1

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

1 回答 1

0

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

您可以从我的回答中获得更多指示: Android Speex 回声消除问题

另外,我有一个项目可以对 Speex AEC 进行环回样本 - 视频报道在这里: http ://www.youtube.com/watch?v=e1-HwidHMy0

这是一个完整的项目,因此没有必要试图将其挤到答案中,但我给出的建议应该给你一个开始——视频证明这是可能的。

于 2012-05-25T22:55:49.667 回答