android - studio - audiorecorder iphone
Android AudioRecord vs. MediaRecorder para grabar audio (3)
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?
Quiero poder analizar el habla humana en tiempo real para medir la amplitud, etc. ¿Tengo razón al entender que AudioRecord es más adecuado para esta tarea?
Noté que en la página web oficial de la guía de Android para grabar audio , usan MediaRecorder sin mención de AudioRecord.
Según tengo entendido, MediaRecorder
es una caja negra que proporciona un archivo de audio comprimido en la salida, y AudioRecorder
te brinda solo el flujo de sonido en bruto y tienes que comprimirlo por ti mismo.
MediaRecorder
le brinda 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.
AudioRecord
primero guarda 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 aquellas aplicaciones que se ejecutan en un emulador. Esto se puede hacer proporcionando una baja frecuencia de muestreo, como 8000, mientras que con MediaRecorder
el audio no se puede grabar con el emulador. En AudioRecord
la pantalla se queda dormida después de algún tiempo, mientras que en MediaRecorder
la pantalla no se queda dormida.
Si desea hacer su análisis mientras la grabación aún 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 a startRecording()
, debe sondear los datos usted mismo desde la instancia de AudioRecord
. Además, debe leer y procesar los datos lo suficientemente rápido como para que no se sobrepase el búfer interno (busque en la salida de AudioRecord
, AudioRecord
le dirá cuándo sucede eso).