2

我正在为 Windows Phone 8 开发 VoIP 应用程序,我想取消使用免提电话时产生的回声。Speex 提供了一个 AEC 模块,我尝试将其集成到我的应用程序中,但无济于事。我的应用程序工作正常,但回声仍然存在。我的代码基于 MS Chatterbox VoIP 应用程序,使用 WASAPI 进行捕获和渲染。这是相关部分的形式(我试图指出已经存在和工作的内容,以及新的内容):

在里面:

// I've tried tail lengths between 100-500ms (800-4000 samples @ 8KHz)
echoState = speex_echo_state_init (80, 800) 
speex_echo_ctl(echoState, SPEEX_ECHO_SET_SAMPLING_RATE, 8000);

渲染(每 10 毫秒运行一次):

Read 10ms (80 samples) data from network (8KHz, 16 bit, mono)

NEW - speex_echo_playback(echoState, networkData)

Upsample data to 48KHz
Render data

捕获(每 10 毫秒运行一次):

Capture 10ms of data (48KHz, 16 bit, mono)
Downsample to 8KHz

NEW - speex_echo_capture(echoState, downsampledData, echoCancelledData)

Send echoCancelledData to network

在阅读了 Speex 文档并查看了该站点上的一些帖子(Wp8 问题的 speex 不是很多,但 android 的问题很少)之后,我的印象是,这是或接近于他们的正确实施API。那么为什么它不起作用呢?

提前致谢

4

0 回答 0