求解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接收到的数据做一个回音消除:
目前将主要的源代码放到下面:
希望高手指正!并且支招:
回音消除模块的初始化
通过调整其主要API函数的参数方式均没有得到良好的效果,
目前经过回音消除模块以后的声音质量比之前的声音质量有严重的下降!
请教高手:
第一步:讲解自己的研究项目:
1,通过filter的方式实现了两个过滤器:
audio send filter 与audio recv filter
2.两者的功能:
audio send filter 主要是讲接收来的音频数据在播放之前传送给audio recv filter
recv filter在收到该音频数据后作为回音消除的参数数据
3.本机麦克风的音频数据在获取到之后,会更具recv filter接收到的数据做一个回音消除:
目前将主要的源代码放到下面:
希望高手指正!并且支招:
回音消除模块的初始化
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);
...全文
相关推荐
android Speex回音消除so库文件+源码
Speex库提供了一种有效的方法来消除这种回音。2. Speex AEC实现原理:通过计算麦克风输入与扬声器输出之间的差异,调整扬声器信号的模型,从而消除回音。
android 利用speex 音频降噪,回声消除demo
Speex提供了一种称为AEC(Acoustic Echo Cancellation)的机制。你需要在编码前将回声样本提供给编码器,使其能学习并抵消回声。6.
android 利用speex 音频降噪,回声消除
通过正确配置和使用Speex的噪声抑制和回声消除功能,开发者可以创建出即使在嘈杂环境中也能保持清晰通话的应用。
opensl+speex 回音消除 JNI库
Speex的AEC模块能够识别并消除这部分回音,提高通话质量。4. **JNI库的使用** JNI允许Java代码调用C/C++编写的原生函数,这在处理高性能计算或调用特定平台的库时非常有用。
win32_chat 使用speex的aec模块, 做个测试
本文介绍了一种使用Speex库实现音频回声消除的方法。程序利用waveIn和waveOut API在Windows平台进行音频采集与播放,并结合DirectSound完成全双工处理。同时支持网络通信,


其它技术问题
