Акустическое эхоподавление на Android не работает

Мы пытаемся включить уже внедренную технологию эхоподавления.

Сценарий:

Два устройства Android успешно подключены, и голос отлично работает на обоих устройствах.

Устройство-1 активирует / деактивирует устройство громкой связи:

AudioManager audioManager = ((AudioManager) getSystemService(AUDIO_SERVICE));
audioManager.setSpeakerphoneOn(false);

Устройство-2 Слышит себя, когда они говорят (перед этой проблемой)

Любая помощь или руководство будет высоко ценится.

2 ответа

Я боролся с проблемой отмены акустического эха на Android во время тестирования видеозвонка в моем мобильном приложении Cordova на основе WebRTC. Однако на большинстве мобильных устройств, включая IOS, проблемы с эхом не было, но на устройствах Samsunng-S10 и Nokia эхо было.

У меня также было предположение, что WebRTC поддерживает аудио ограничения "echoCancellation:true", которые по умолчанию включены. Однако эти ограничения звука, похоже, не работают.

Я исправил это, установив режим в AudioManager

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(true);

Похоже, что некоторые мобильные устройства не запускают эхоподавление (даже если оно поддерживается), пока для режима звука явно не установлено значение "Связь".

Некоторые устройства Android не поддерживают эхоподавление по умолчанию. Если вы используете werbtc, Webrtc предоставляет API для эхоподавления. Пожалуйста, используйте следующий код для включения эхоподавления.

WebRtcAudioUtils.setWebRtcBasedAcousticEchoCanceler(true);
WebRtcAudioUtils.setWebRtcBasedNoiseSuppressor(true);

Предполагая, что ваш AEC активен и работает, я рекомендую убедиться, что эхо-путь поддерживается вашим AEC.

Вам необходимо прикрепить AcousticEchoCanceler к создаваемому вами экземпляру AudioRecord.

Другие вопросы по тегам