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、xx\speexdsp-1.2rc3\libspeexdsp\.libs路径下会生成静态库文件

5、xx\speexdsp-1.2rc3\libspeexdsp 会有一些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;
}


Logo

更多推荐