Android AudioRecord vs.MediaRecorder para grabar audio

91

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

Quiero poder analizar el habla humana en tiempo real para medir la amplitud, etc. ¿Estoy en lo cierto al entender que AudioRecord es más adecuado para esta tarea?

Me di cuenta de que en la página web oficial de la guía de Android para grabar audio , usan MediaRecorder sin mencionar AudioRecord.

stackoverflowuser2010
fuente

Respuestas:

81

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

Stephan
fuente
¿Tiene un código de muestra de AudioRecord? La mayoría de los que he encontrado son MediaRecorder ...
Rommel Paras
@RommelParas busca en esta clase en "telegram" para la fuente de Android. github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
David
@David ¿Conoce una muestra más básica? ¿Uno que funciona por sí solo?
desarrollador de Android
@androiddeveloper lamentablemente no.
David
33

Según tengo entendido, MediaRecorderes una caja negra que proporciona un archivo de audio comprimido en la salida y AudioRecorderle brinda una transmisión de sonido sin procesar y debe comprimirlo usted mismo.

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

Entonces, en la mayoría de los casos, MediaRecorderes la mejor opción, excepto aquellos en los que debe realizar un procesamiento de sonido complicado y necesita acceso al flujo de audio sin procesar.

Lampapos
fuente
Gracias por mencionar el método getMaxAmplitude (). Eso es probablemente todo lo que necesito.
Dheeraj Bhaskar
¿Cómo puedo implementar el visualizador usando MediaRecorder?
OnePunchMan
¿Qué ayuda getMaxAmplitude exactamente aquí? ¿No necesita obtener el actual en cada momento para el visualizador?
desarrollador de Android
18

AudioRecorderer primero guarda los datos en minBuffer, luego se copia desde allí al búfer temporal, en MediaRecorder se copia en archivos. En AudioRecorder 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. AudioRecorder se puede usar para aquellas aplicaciones que se ejecutan en un emulador, esto se puede hacer proporcionando una frecuencia de muestreo baja, como 8000, mientras que con MediaRecorder, el audio no se puede grabar usando un emulador. En AudioRecord, la pantalla duerme después de un tiempo, mientras que en MediaRecorder la pantalla no se duerme.

sanjeev51
fuente