Estoy grabando audio para mensajes de voz en la aplicación usando el siguiente código.
MediaRecorder audioRecorder = new MediaRecorder();
audioRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
audioRecorder.setOutputFile(audioRecordingFile);
audioRecorder.prepare();
audioRecorder.start();
El uso de MediaRecorder.AudioSource.VOICE_COMMUNICATION en lugar de MediaRecorder.AudioSource.MIC) es muy útil para grabar audios limpios preprocesados.
Pero, recientemente encontré que algunos problemas en los que los archivos grabados están vacíos se informan en algunos dispositivos que se actualizaron recientemente a Android 10. Cabe señalar que no todos los dispositivos Android 10 tienen estos problemas, solo algunos, es decir, Nokia 6.1 y Mi A2.
No hay error ni excepción, sino solo archivos de salida de audio vacíos.
Si uso MediaRecorder.AudioSource.MIC) , el problema no se ve.
Encontré la siguiente información relacionada con Android 10 y VOICE_COMMUNICATION. La versión de Android 10 incluye los siguientes requisitos para la captura con VOICE_COMMUNICATION.
Basado en esto, verifiqué la disponibilidad de AcousticEchoCanceler, AutomaticGainControl y NoiseSuppressor usando el siguiente código.
AcousticEchoCanceler.isAvailable()
AutomaticGainControl.isAvailable()
NoiseSuppressor.isAvailable()
Y encontré el mismo resultado en Mi A2 y OnePlus 6 con Android 10. Ambos dispositivos muestran AcousticEchoCanceler y NoiseSuppressor como disponibles y AutomaticGainControl como no disponibles.
Dado que el problema no está presente en todos los dispositivos Android, no quiero recurrir al uso de MediaRecorder.AudioSource.MIC) . Al mismo tiempo, no hay ningún error, excepción o factor diferenciador que me indique cuándo recurrir a MediaRecorder.AudioSource.MIC) .
ACTUALIZACIÓN: El problema se resuelve cuando el Asistente de Google está apagado en Mi A2. Este podría ser el puntero: https://developer.android.com/guide/topics/media/sharing-audio-input
Cualquier ayuda con respecto a esto es apreciada.
fuente
Respuestas:
Terminé usando MediaRecorder.AudioSource.VOICE_RECOGNITION en lugar de MediaRecorder.AudioSource.VOICE_COMMUNICATION en todas las versiones de Android.
Terminamos tomando muestras en más de 15 dispositivos diferentes y descubrimos que MediaRecorder.AudioSource.VOICE_RECOGNITION funciona mejor con la mayoría de los dispositivos, incluidos los teléfonos de gama alta y media.
Según tengo entendido, el problema original que enfrentan algunos dispositivos en algunos dispositivos parece ser problemas de implementación por parte de los OEM con respecto a Android 10 y VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing
fuente