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.
fonte
Respostas:
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
fonte