Записанное аудио с использованием MediaRecorder.AudioSource.VOICE_COMMUNICATION пусто на некоторых устройствах с Android 10

10

Я записываю аудио для голосовых сообщений в приложении, используя следующий код.

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

Использование MediaRecorder.AudioSource.VOICE_COMMUNICATION вместо MediaRecorder.AudioSource.MIC) очень полезно при записи предварительно обработанных чистых аудиозаписей.

Но недавно я обнаружил, что на некоторых устройствах, которые были недавно обновлены до Android 10, сообщается о некоторых проблемах, связанных с пустыми записанными файлами. Следует отметить, что не у всех устройств Android 10 есть эти проблемы, только у нескольких, то есть Nokia 6.1 и Ми А2.

Там нет ошибок или исключений, но только пустые файлы вывода звука.

Если я использую MediaRecorder.AudioSource.MIC), то проблема не видна.

Я обнаружил следующую информацию, связанную с Android 10 и VOICE_COMMUNICATION. Релиз Android 10 включает следующие требования для захвата с помощью VOICE_COMMUNICATION.

Основываясь на этом, я проверил наличие AcousticEchoCanceler, AutomaticGainControl и NoiseSuppressor, используя следующий код.

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

И нашел тот же результат на Mi A2 и OnePlus 6 с Android 10. Оба устройства показывают AcousticEchoCanceler и NoiseSuppressor как доступные и AutomaticGainControl как недоступные.

Поскольку эта проблема присутствует не на всех устройствах Android, я не хочу использовать MediaRecorder.AudioSource.MIC) . В то же время, нет ошибки, исключения или дифференцирующего фактора, который говорит мне, когда следует обращаться к MediaRecorder.AudioSource.MIC) .

ОБНОВЛЕНИЕ: проблема решается, когда помощник Google выключен на Mi A2. Это может быть указатель: https://developer.android.com/guide/topics/media/sharing-audio-input

Любая помощь в этом отношении приветствуется.

binaryKarmic
источник
1
Пост, на который вы ссылаетесь, рассказывает о MediaRecorder.AudioSource.VOICE_CALL. Я использую MediaRecorder.AudioSource. VOICE_COMMUNICATION. Я считаю, что в этом есть какая-то разница. Также я не записываю звонки. Я записываю обычные аудио сообщения в приложении обмена сообщениями. Кроме того, он работает не на всех устройствах Android 10, а только на некоторых, как я упоминал ранее.
binaryKarmic

Ответы:

1

В итоге я использовал MediaRecorder.AudioSource.VOICE_RECOGNITION вместо MediaRecorder.AudioSource.VOICE_COMMUNICATION на всех версиях Android.

В итоге мы взяли образцы на более чем 15 различных устройствах и обнаружили, что MediaRecorder.AudioSource.VOICE_RECOGNITION лучше всего работает с большинством устройств, включая телефоны высшего и среднего уровня.

Насколько я понимаю, первоначальная проблема, с которой сталкиваются некоторые устройства на некоторых устройствах, выглядит как проблемы реализации OEM-изготовителями в отношении Android 10 и VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing.

binaryKarmic
источник
Я столкнулся с точно такой же проблемой на Nokia 6.1, и отключение Google Assistant действительно помогает. Но что, если я действительно хочу использовать аудиоисточник VOICE_COMMUNICATION? Я не могу просить наших клиентов отключить их помощников, и я хочу иметь возможность использовать функции предварительной обработки звука, такие как акустическое эхоподавление. Может быть, я могу настроить разные аудио-эффекты вручную, но если у вас есть какой-либо другой совет, это будет оценено)
Алексей Ершов
1
Я понимаю, откуда ты. Проблема здесь кажется ошибочной реализацией OEM-изготовителями, которую они могут исправить или не исправить в будущем, поэтому нет смысла полагаться на нее. Вы можете сделать собственное исправление, например, наблюдать записанное аудио, скажем, через пару секунд. Если оно пустое и версия ОС выше 10, дайте пользователю возможность выключить Помощник или переключиться на немного низкое качество с помощью VOICE_RECOGNITION.
binaryKarmic