1、下载speex源代码
http://download.csdn.net/detail/codeheng/9523856
2、配置makefile
./configure --host=arm-linux CC=arm-linux-gcc --enable-static --disable-shared
3、make
4、xxspeexdsp-1.2rc3libspeexdsp.libs路径下会生成静态库文件
5、xxspeexdsp-1.2rc3libspeexdsp 会有一些demo供参考
6、编译链接的时候加上 -lm
//speex不是线程安全的,如多线程调用必须加锁
static SpeexPreprocessState* init()
{
SpeexPreprocessState* SPstat = speex_preprocess_state_init(160, 8000); // 8000: 采样率;160:20ms的采样点(8000/1000*20)
int value = 1;
speex_preprocess_ctl(SPstat, SPEEX_PREPROCESS_SET_DENOISE, &value);
value = -50;
speex_preprocess_ctl(SPstat, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &value);//降噪强度
return SPstat;
}
static int audio_speex_denoise(SpeexPreprocessState* SPstat, unsigned char* buf, int size)
{
int samples = 160; // 20ms 的采样点
int frame_size = samples*2; // 每个采样点2bytes
int remain_size = size;
unsigned char* begin = buf;
while (remain_size >= frame_size)
{
speex_preprocess_run(SPstat, (short*)begin);// 每调一次处理20ms个采样点(与speex_preprocess_state_init一致)
//如果不是frame_size的整数倍,则想办法弄成整数倍,否则会有部分数据得不到降噪处理
begin += frame_size;
remain_size -= frame_size;
}
return 0;
}