求解speex AEC回音消除模块的正确使用方法解决方法

求解speex AEC回音消除模块的正确使用方法
本人经过一个多月的speex AEC回音消除模块的研究,
通过调整其主要API函数的参数方式均没有得到良好的效果,
目前经过回音消除模块以后的声音质量比之前的声音质量有严重的下降!

请教高手:

第一步:讲解自己的研究项目:
1,通过filter的方式实现了两个过滤器:
  audio send filter 与audio recv filter
2.两者的功能:
  audio send filter 主要是讲接收来的音频数据在播放之前传送给audio recv filter
  recv filter在收到该音频数据后作为回音消除的参数数据
3.本机麦克风的音频数据在获取到之后,会更具recv filter接收到的数据做一个回音消除:

目前将主要的源代码放到下面:
希望高手指正!并且支招:
 
回音消除模块的初始化
C/C++ code

        m_sampRate = 44100;
        _speex_aec = speex_echo_state_init(m_sampRate/50, m_sampRate/5);
    _speex_preprocess = speex_preprocess_state_init(m_sampRate/50, m_sampRate);
    speex_echo_ctl(_speex_aec, SPEEX_ECHO_SET_SAMPLING_RATE, &m_sampRate);
    speex_preprocess_ctl(_speex_preprocess, SPEEX_PREPROCESS_SET_ECHO_STATE, _speex_aec);

      
        pSample->GetPointer(&pBuff);        
        lSize = pSample->GetActualDataLength();        
    m_cirMicBuf.Push(pBuff, lSize);
    ZeroMemory(pBuff, lSize);            
    int i = 0;
    int iMicLen = m_cirMicBuf.Len();
    int iRecvLen = m_cirRecvBuf2.Len();
    while (m_cirMicBuf.Len() >= m_sampRate/50 &&
    m_cirRecvBuf2.Len() >= m_sampRate/50 && (m_sampRate/50) * i < lSize)
    {
        m_cirMicBuf.Pop((PBYTE)buf_in, m_sampRate/50);
        m_cirRecvBuf2.Pop((PBYTE)buf_out, m_sampRate/50);
    
        speex_echo_cancellation(_speex_aec, buf_in, buf_out, outbuf);
        speex_preprocess_run(_speex_preprocess, outbuf);            
        memcpy(pBuff + (m_sampRate/50) * (i++), outbuf, m_sampRate/50);
    }
    m_cirMicBuf.Reset();
    m_cirRecvBuf1.Reset();
        m_OutputPin.Deliver(pSample);




------解决方案--------------------
请高手来帮个忙呀,给点意见与建议了...
这个项目真的很急,都托了两个月了,在弄下去有点说不过去了吧!!!!!
这个搞不好我就得卷铺盖走人啦!