当前位置: 首页 > 工具软件 > e-speak > 使用案例 >

speex

钦永贞
2023-12-01

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.

今天测试了speex中带回声消除模块,效果还可以。

测试环境:网络双工通话,16K采样16位编码,speex压缩以及解压.原来通话会听到线路另一端传过来的自己的声音,现在在程序中加入speex回声消除模块。

代码:

  1. <SPAN style="FONT-SIZE: 18px">#include "speex/speex_echo.h"  
  2. ......  
  3. ......  
  4. #define SPEEX_FRAME_BYTE 640   
  5. SpeexEchoState *echo_state speex_echo_state_init(320,5000);  
  6. short Echo_Data[SPEEX_FRAME_BYTE / 2];//从网络上收到的语音包   
  7.   
  8. //读取声卡,将数据保存在input_frame0中   
  9. ......  
  10. //回声消除   
  11. speex_echo_cancellation(echo_state,input_frame0,Echo_Data,input_frame);  
  12. //将回声消除后的数据input_frame通过网络发送   
  13. ......</SPAN>  
#include "speex/speex_echo.h"
......
......
#define SPEEX_FRAME_BYTE 640
SpeexEchoState *echo_state speex_echo_state_init(320,5000);
short Echo_Data[SPEEX_FRAME_BYTE / 2];//从网络上收到的语音包

//读取声卡,将数据保存在input_frame0中
......
//回声消除
speex_echo_cancellation(echo_state,input_frame0,Echo_Data,input_frame);
//将回声消除后的数据input_frame通过网络发送
......

speex_echo_state_init(320,5000);这个函数中320为每一个数据包的帧数,5000即为尾音长度,这个参数的设置将影响回声消除模块的处理效果。如果在一个房间里,最好是发射时间的1/3.我现在的情况是通过网络传输,大概估算回声出现的时间是在说话后1秒左右的时间,1s的帧数是320 * 50 = 16000,1/3即5333帧,取5000帧写入函数。
 类似资料:

相关阅读

相关文章

相关问答