3,881
社区成员
发帖
与我相关
我的任务
分享
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);