SpeexDsp回音消除的一些理解

1.speexdsp的变量定义:

SpeexEchoState *echo_state = NULL;//回声消除变量
SpeexPreprocessState *pre_state = NULL;//噪声抑制变量
int sampleRate = 16000;//16k采样率


2. speexdsp的初始化:

echo_state = speex_echo_state_init(256, 2048);//回音消除初始化

参数说明:256为每次算法处理的一帧数据的大小(此时的数据格式为short),2048为尾音长度(一般为256*8)

pre_state = speex_preprocess_state_init(256, sampleRate);//噪声抑制初始化

参数说明:256与以上的256对应即可, sampleRate为以上定义的采样率变量

speex_echo_ctl(echo_state, SPEEX_ECHO_SET_SAMPLING_RATE, &sampleRate);//回音消除参数设置

参数说明:echo_state为以上定义的变量,SPEEX_ECHO_SET_SAMPLING_RATE默认即可不用管,sampleRate为设置的采样率变量

speex_preprocess_ctl(pre_state, SPEEX_PREPROCESS_SET_ECHO_STATE, echo_state);//噪声抑制参数设置

参数说明:pre_state为以上定义的变量,SPEEX_PREPROCESS_SET_ECHO_STATE默认即可不用管,echo_state为以上定义的变量


3. speexdsp的使用:

speex_echo_cancellation(echo_state, (short *)voice_capture_buf, (short *)voice_play_buf, (short *)end_buf);//实现回音消除

参数说明:echo_state为以上定义的变量,
voice_capture_buf为从麦克风采集的语音数据(如果是char需要强转,如果是short则不用),
voice_play_buf为从网络接收到的语音数据(如果是char需要强转,如果是short则不用),
end_buf为处理后的语音数据,此时的数据已去除回音

 

speex_preprocess_run(pre_state, (short *)end_buf);//实现噪声抑制

参数说明:pre_state为以上定义的变量,end_buf为回音消除后得到的数据


4. 注意事项:
用speex_echo_cancellation实现回音消除时,voice_capture_buf与voice_play_buf有顺序关系,voice_play_buf在前(正在播放),
voice_capture_buf在后,这样才可以实现将采集的数据中去除掉正在播放的回音数据,我是放在同一个线程中处理的,具体怎么做随意,实现效果就行

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值