我正在尝试取消回声,但即使使用非常简单的示例也无法取消。框架尺寸 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 文档中 - 并知道如何调试您的流程以实现这一点。
你可以从我的回答中得到更多的指示:安卓 Speex 回声消除问题
另外,我有一个项目可以执行Speex AEC的循环示例-视频报道在这里:http://www.youtube.com/watch?v=e1-HwidHMy0
这是一个完整的项目,所以试图把它压缩到答案是没有意义的,但我给出的指示应该给你一个开始 - 视频证明这是可能的。