Использование встроенного в Android подавления акустического эха - PullRequest
7 голосов
/ 20 октября 2010

Кто-нибудь знает, как использовать встроенное в Android устройство подавления акустического эха? Он расположен где-то в кремнии и используется для разговоров по громкой связи GSM / CDMA. Мы бы очень хотели использовать его для приложения VoIP, а не для собственного.

Ben

Ответы [ 3 ]

4 голосов
/ 19 августа 2011

Мне наконец удалось заставить эхоподавление работать на моем процессоре Arm5 (WM8650) (Android 2.2). Ниже приведены шаги, которые я предпринял.

  1. Я обернул Speex JNI и вызвал процедуры обработки эха перед отправкой кадров PCM в кодировщик. Эхо не было отменено независимо от того, какие настройки Speex я пробовал.

  2. Поскольку Speex очень чувствителен к задержке между воспроизведением и эхо-кадрами, я создал очередь и поставил в очередь все пакеты, отправленные в AudioTrack. Размер очереди должен быть примерно равен размеру внутреннего буфера AudioTrack. Таким образом, пакет отправлялся на echo_playback примерно в то время, когда AudioTrack отправлял пакеты на звуковую карту из своего внутреннего буфера. При таком подходе задержка была удалена, но эхо все еще не было отменено

  3. Я завернул часть эхоподавления WebRtc с JNI и вызвал ее методы перед отправкой пакетов в кодировщик. Эхо все еще присутствовало, но библиотека явно пыталась его отменить.

  4. Я применил метод буфера, описанный в P2, и он наконец начал работать. Задержка должна быть скорректирована для каждого устройства, хотя. Также обратите внимание, что в WebRtc есть мобильная и полная версия эхоподавления. Полная версия существенно замедляет процессор и, вероятно, должна работать только на ARM7. Мобильная версия работает, но с более низким качеством

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 24 ноября 2011

Начиная с уровня API 11, существует новое значение для MediaRecorder.AudioSource, это VOICE_COMMUNICATION. Android docs скажем : «Источник звука для микрофона, настроенный для голосовой связи, такой как VoIP. Например, он будет использовать преимущества эхоподавления или автоматической регулировки усиления, если таковой имеется. " Я попробовал это, но не смог заставить это работать. Проблема может быть в устройстве, которое я использовал, - Sony Tablet S. Стоит попробовать.

0 голосов
/ 09 марта 2011

Я был там же, успешно портировал Speex AEC на Android и использовал его в 2 разных клиентах Android VoIP. Большая часть эха отменяется при громкой связи на громкой связи - проверено на различных устройствах. Официальных документов Speex и поисковика должно быть достаточно, чтобы заставить его работать.

...