El audio grabado con MediaRecorder.AudioSource.VOICE_COMMUNICATION está vacío en algunos dispositivos con Android 10

10

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.

binaryKarmic
fuente
1
La publicación que vinculó habla sobre MediaRecorder.AudioSource.VOICE_CALL. Lo que estoy usando es MediaRecorder.AudioSource. COMUNICACIÓN DE VOZ. Creo que hay alguna diferencia en ello. Además, no estoy grabando llamadas. Estoy grabando los mensajes de audio habituales en una aplicación de mensajería. Además, no está fallando en todos los dispositivos con Android 10, sino solo en algunos como mencioné anteriormente.
binaryKarmic

Respuestas:

1

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

binaryKarmic
fuente
Me enfrenté exactamente al mismo problema en Nokia 6.1 y, de hecho, desactivar el Asistente de Google ayuda. Pero, ¿qué sucede si realmente quiero usar la fuente de audio VOICE_COMMUNICATION? No puedo pedirles a nuestros clientes que deshabiliten a sus asistentes, y quiero poder usar funciones de preprocesamiento de audio como la cancelación de eco acústico. Tal vez pueda configurar diferentes fx de audio manualmente, pero si recibiera algún otro consejo, se lo agradecería)
Alexey Ershov
1
Entiendo de dónde vienes. El problema aquí parece ser una implementación defectuosa por parte de los fabricantes de equipos originales que pueden o no solucionar en el futuro, por lo que no tiene sentido confiar en ello. Puede hacer una solución personalizada como observar el audio grabado después de unos segundos. Si está en blanco y la versión del sistema operativo es superior a 10, ofrezca al usuario la opción de apagar el Asistente o cambiar a una calidad ligeramente baja utilizando VOICE_RECOGNITION.
binaryKarmic