我试图取消回声,但即使使用一个非常简单的示例也无法取消。帧大小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);


为什么上面的代码示例没有取消echo我错过了什么?当我播放文件时,没有回声被删除。

下面的简单示例也无法正常工作,回声仍然存在。

    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;

最佳答案

您需要了解AEC起作用的要求-所有这些都记录在Speex文档中-并知道如何调试流程以实现这一目标。

您可以在这里从我的答案中获得更多指示:
Android Speex echo cancellation problems

另外,我有一个做Speex AEC回送示例的项目-视频范围在这里:
http://www.youtube.com/watch?v=e1-HwidHMy0

这是一个整个项目,因此尝试将其压缩为一个答案没有任何意义,但是我给的指针应该给您一个开始-视频证明了这是可能的。

10-08 08:56