<div>I have invoke the speex echo cancellation interface as follow, but it seems not work (the echo still exists, my testbed is a small udp based p2p voice chat software). Can anyone tell me why it doesn't work? or whether I have made some mistake? Thanks a lot.<br>#define SPEEX_SAMPLERATE 8000<br>#define SPEEX_NN 128<br>#define SPEEX_TAIL 1920<br><br>class AECHandler<br>{<br>public:<br>&nbsp;&nbsp;&nbsp; AECHandler(void){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this-&gt;st = speex_echo_state_init(SPEEX_NN, SPEEX_TAIL);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int tmp = SPEEX_SAMPLERATE;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this-&gt;den = speex_preprocess_state_init(SPEEX_NN, SPEEX_SAMPLERATE);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_echo_ctl(st, SPEEX_ECHO_SET_SAMPLING_RATE, &amp;tmp);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_preprocess_ctl(den, SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE, st);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //int tmp1 = 1;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //speex_preprocess_ctl(den, SPEEX_PREPROCESS_SET_AGC, &amp;tmp1);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; //FILE *echo_fd, *ref_fd, *e_fd;<br>&nbsp;&nbsp;&nbsp; short echo_buf[SPEEX_NN], ref_buf[SPEEX_NN], e_buf[SPEEX_NN];<br>&nbsp;&nbsp;&nbsp; SpeexEchoState *st;<br>&nbsp;&nbsp;&nbsp; SpeexPreprocessState *den;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; char* inputBuf;<br>&nbsp;&nbsp;&nbsp; ~AECHandler(void){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_echo_state_destroy(this-&gt;st);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_preprocess_state_destroy(this-&gt;den);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; void HookComingSound(char* buf){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_echo_playback(this-&gt;st,(spx_int16_t*)buf);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; void HookOutingSound(char* origin, char* &amp;outbuf){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_echo_capture(this-&gt;st,(spx_int16_t*)origin,(spx_int16_t*)outbuf);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_preprocess_run(this-&gt;den,(spx_int16_t*)outbuf);<br>&nbsp;&nbsp;&nbsp; }<br>};<br></div><br><!-- footer --><br><span title="neteasefooter"/><hr/>
<a href="http://www.yeah.net">网易邮箱,中国第一大电子邮件服务商</a>
</span>