Столкнувшись с проблемой отменить акустическое эхо с помощью Speex в Android
Я пытаюсь отменить эхо, но не могу отменить, даже используя очень простой пример. Размер кадра 160 Длина плитки 100
audioRecord.read(mic,0,mic.length);
audioData = speex.encode(mic,0,mic.length);
speakerData=speex.decode(audioData);
audioTrack.write(speakerData, 0, speakerData.length);
speex.DoAEC(mic,speakerData,outref);
fos.write(outref);
почему приведенный выше пример кода не отменил эхо я что-то пропустил? Когда я воспроизводил файл, эхо не было удалено.
также следующий простой пример не сработал, но эхо есть.
short[] buf=new short[160];
audioRecord.read(buf,0,buf.length);
if(sData==null){
sData=buf;
}
short[] outref=new short[160];
speex.cancelecho(buf,sData,outref);
audioTrack.write(outref, 0, outref.length);
sData=buf;
1 ответ
Вы должны понимать требования к работе AEC - все это документировано в документации Speex - и знать, как отладить поток для достижения этой цели.
Вы можете получить больше подсказок из моего ответа здесь: Проблемы с эхоподавлением Android Speex
Кроме того, у меня есть проект, который делает петлевую выборку Speex AEC - видео покрытие здесь: http://www.youtube.com/watch?v=e1-HwidHMy0
Это целый проект, так что нет смысла пытаться прижать его к ответу, но указатели, которые я дал, должны дать вам старт - и видео доказывает, что это возможно.