O áudio gravado usando o MediaRecorder.AudioSource.VOICE_COMMUNICATION está vazio em alguns dispositivos com Android 10

10

Estou gravando áudio para mensagens de voz no aplicativo usando o código a seguir.

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();

O uso do MediaRecorder.AudioSource.VOICE_COMMUNICATION em vez do MediaRecorder.AudioSource.MIC) é muito útil na gravação de áudios limpos pré-processados.

Mas, recentemente, encontrei alguns problemas nos quais os arquivos gravados estão vazios estão sendo relatados em alguns dispositivos que foram atualizados recentemente para o Android 10. Deve-se notar que nem todos os dispositivos Android 10 têm esses problemas, apenas alguns, como o Nokia 6.1 e o Nokia 6.1. Mi A2.

Não há erro ou exceção, apenas arquivos de saída de áudio vazios.

Se eu usar o MediaRecorder.AudioSource.MIC) , o problema não será visto.

Encontrei as seguintes informações relacionadas ao Android 10 e VOICE_COMMUNICATION A versão do Android 10 inclui os seguintes requisitos para captura com o VOICE_COMMUNICATION.

Com base nisso, verifiquei a disponibilidade do AcousticEchoCanceler, AutomaticGainControl e NoiseSuppressor usando o código a seguir.

AcousticEchoCanceler.isAvailable()
AutomaticGainControl.isAvailable()
NoiseSuppressor.isAvailable()

E encontrou o mesmo resultado no Mi A2 e no OnePlus 6 com Android 10. Ambos os dispositivos mostram AcousticEchoCanceler e NoiseSuppressor como disponíveis e AutomaticGainControl como não disponível.

Como o problema não está presente em todos os dispositivos Android, não quero voltar a usar o MediaRecorder.AudioSource.MIC) . Ao mesmo tempo, não há erro, exceção ou fator de diferenciação que me diga quando voltar ao MediaRecorder.AudioSource.MIC) .

ATUALIZAÇÃO: o problema é resolvido quando o Google Assistant é desativado no Mi A2. Este pode ser o ponteiro: https://developer.android.com/guide/topics/media/sharing-audio-input

Qualquer ajuda sobre isso é apreciada.

binaryKarmic
fonte
11
A postagem que você vinculou fala sobre MediaRecorder.AudioSource.VOICE_CALL. O que estou usando é MediaRecorder.AudioSource. VOICE_COMMUNICATION. Eu acredito que há alguma diferença nisso. Além disso, não estou gravando chamadas. Estou gravando as mensagens de áudio comuns em um aplicativo de mensagens. Além disso, não está falhando em todos os dispositivos Android 10, mas apenas em alguns, como mencionei anteriormente.
binaryKarmic

Respostas:

1

Acabei usando o MediaRecorder.AudioSource.VOICE_RECOGNITION em vez do MediaRecorder.AudioSource.VOICE_COMMUNICATION em todas as versões do Android.

Acabamos colhendo amostras em mais de 15 dispositivos diferentes e descobrimos que o MediaRecorder.AudioSource.VOICE_RECOGNITION funciona melhor com a maioria dos dispositivos, incluindo os telefones de gama alta e média.

Pelo meu entendimento, o problema original enfrentado em alguns dispositivos em alguns dispositivos parece ser um problema de implementação dos OEMs em relação ao Android 10 e VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing

binaryKarmic
fonte
Enfrentei exatamente o mesmo problema no Nokia 6.1 e, de fato, desative a ajuda do Google Assistant. Mas e se eu realmente quiser usar a fonte de áudio VOICE_COMMUNICATION? Não posso pedir aos nossos clientes que desativem seus assistentes e quero poder usar recursos de pré-processamento de áudio, como cancelamento de eco acústico. Talvez eu possa configurar diferentes efeitos sonoros de áudio manualmente, mas se você tiver outros conselhos, isso seria apreciado)
Alexey Ershov
11
Eu entendo de onde você está vindo. O problema aqui parece ser uma implementação de buggy pelos OEMs que eles podem ou não corrigir no futuro, então não faz sentido confiar nele. Você pode fazer algumas correções personalizadas, como observar o áudio gravado após alguns segundos. Se estiver em branco e a versão do sistema operacional for superior a 10, forneça ao usuário a opção de desligar o Assistente ou alternar para uma qualidade ligeiramente baixa usando VOICE_RECOGNITION.
binaryKarmic 21/04