2011-05-04 20 views
69

Quiero grabar voz humana en mi teléfono Android. Me di cuenta de que Android tiene dos clases para hacer esto: AudioRecord y MediaRecorder. ¿Puede alguien decirme cuál es la diferencia entre los dos y cuáles son los casos de uso apropiados para cada uno?Android AudioRecord contra MediaRecorder para grabar audio

Quiero ser capaz de analizar el habla humana en tiempo real para medir la amplitud, etc. ¿Tengo razón en la comprensión de que AudioRecord es más adecuado para esta tarea?

Me di cuenta en la versión oficial de Android guide webpage for recording audio, utilizan MediaRecorder sin mención de AudioRecord.

Respuesta

58

Si desea hacer su análisis mientras la grabación todavía está en progreso, necesita usar AudioRecord, ya que MediaRecorder registra automáticamente en un archivo. AudioRecord tiene la desventaja de que después de llamar al startRecording() necesita sondear los datos usted mismo desde la instancia AudioRecord. Además, debe leer y procesar los datos lo suficientemente rápido como para que el búfer interno no se sobrepase (consulte la salida del logcat, AudioRecord le dirá cuando eso suceda).

+0

¿Tiene el código de muestra de AudioRecord? La mayoría de los que he encontrado son MediaRecorder ... –

+0

@RommelParas busca en esta clase en "telegrama" para fuente de Android. https://github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java – David

13

AudioRecord primero guarda los datos en minBuffer y luego se copia desde allí al búfer temporal, en MediaRecorder se copia a los archivos. En AudioRecord necesitamos la API setRecordPosition() para copiar los datos guardados en la posición requerida, mientras que en MediaRecorder el puntero del archivo hace este trabajo para establecer la posición del marcador. AudioRecord se puede utilizar para las aplicaciones que se ejecutan en un emulador esto se puede hacer proporcionando baja frecuencia de muestreo como 8000, mientras que el uso de MediaRecorder el audio no se puede grabar con emulador. En AudioRecord la pantalla se queda en reposo después de algún tiempo, mientras que en MediaRecorder la pantalla no se queda dormida.

21

Según tengo entendido, MediaRecorder es una caja negra que proporciona un archivo de audio comprimido en la salida y AudioRecorder le proporciona solo la transmisión de sonido sin procesar y tiene que comprimirlo usted mismo.

MediaRecorder le da la máxima amplitud desde la última llamada del método getMaxAmplitude() para que pueda implementar un visualizador de sonido, por ejemplo.

Por lo tanto, en la mayoría de los casos MediaRecorder es la mejor opción, excepto aquellas en las que debe realizar un procesamiento de sonido complicado y necesita acceder a la transmisión de audio en bruto.

+0

Gracias por mencionar el método getMaxAmplitude(). Eso es muy probablemente todo lo que necesito. –

+0

¿Cómo puedo implementar el visualizador usando MediaRecorder? – OnePunchMan

Cuestiones relacionadas