speex噪音消除

来源:互联网 发布:阿里云服务器连接终端 编辑:程序博客网 时间:2024/04/27 13:40
#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "speex/speex_preprocess.h"#include <stdio.h>#define NN 160int main(){   short in[NN];   int i;   SpeexPreprocessState *st;   int count=0;   float f;   st = speex_preprocess_state_init(NN, 8000);   i=1;   speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_DENOISE, &i);   i=0;   speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC, &i);   i=8000;   speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i);   i=0;   speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_DEREVERB, &i);   f=.0;   speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f);   f=.0;   speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f);   while (1)   {      int vad;      fread(in, sizeof(short), NN, stdin);      if (feof(stdin))         break;      vad = speex_preprocess_run(st, in);      /*fprintf (stderr, "%d\n", vad);*/      fwrite(in, sizeof(short), NN, stdout);      count++;   }   speex_preprocess_state_destroy(st);   return 0;}

函数名称 speex_preprocess_state_init
头文件 #include “speex_preprocess.h”
函数功能 初始化Speex预处理器句柄。
Speex预处理器句柄用于对原始音频数据进行预处理。
函数声明 SpeexPreprocessState * speex_preprocess_state_init ( int frame_size, int sampling_rate);
函数参数
frame_size,[输入]:存放音频数据一帧的大小,单位多少个采样单元。
sampling_rate,[输入]: 存放音频数据的采样频率,单位Hz。
返回值 Speex预处理器句柄。
其他说明
如果是对一条音频流预处理,那么预处理从开始到结束都应该用一个Speex预处理器句柄,中途不要更换Speex预处理器句柄,也不要用一个Speex预处理器句柄给多条音频流预处理,否则会导致预处理后的音频数据不正确。当Speex预处理器句柄不再使用时,必须调用speex_preprocess_state_destroy()函数销毁预处理器句柄,否则会内存泄漏。

函数名称 speex_preprocess_ctl
头文件 #include “speex_preprocess.h”
函数功能 控制Speex预处理器句柄的相关参数。
函数声明 int speex_preprocess_ctl (SpeexPreprocessState * st, int request, void * ptr);
函数参数
st,[输入]:存放Speex预处理器句柄。
request,[输入]:存放需要控制的参数,可以为(选一至一个):

SPEEX_PREPROCESS_SET_DENOISE宏(0x0000):
设置是否打开Speex预处理器句柄的噪音抑制,ptr参数为spx_int32_t型变量的内存指针,1表示开启,0表示关闭,默认为1。
SPEEX_PREPROCESS_GET_DENOISE宏(0x0001):
获取是否打开Speex预处理器句柄的噪音抑制,ptr参数为spx_int32_t型变量的内存指针,1表示开启,0表示关闭。
SPEEX_PREPROCESS_SET_AGC宏(0x0002):
设置是否打开Speex预处理器句柄的AGC自动增益控制,ptr参数为spx_int32_t型变量的内存指针,1表示开启,0表示关闭,默认为0。
注意:Speex库的AGC自动增益控制正常情况下会增大音量,但有时可能会让减小音量,甚至直接变为静音,所以需要谨慎使用。
SPEEX_PREPROCESS_GET_AGC宏(0x0003):
获取是否打开Speex预处理器句柄的AGC自动增益控制,ptr参数为spx_int32_t型变量的内存指针,1表示开启,0表示关闭。
SPEEX_PREPROCESS_SET_VAD宏(0x0004):
设置是否打开Speex预处理器句柄的VAD语音活动检测,ptr参数为spx_int32_t型变量的内存指针,1表示开启,0表示关闭,默认为0。
SPEEX_PREPROCESS_GET_VAD宏(0x0005):
获取是否打开Speex预处理器句柄的VAD语音活动检测,ptr参数为spx_int32_t型变量的内存指针,1表示开启,0表示关闭。
SPEEX_PREPROCESS_SET_AGC_LEVEL宏(0x0006):
设置AGC自动增益控制时,是否打开Speex预处理器句柄的语音活动检测,ptr参数为float型变量的内存指针,默认为8000.0。
SPEEX_PREPROCESS_GET_AGC_LEVEL宏(0x0007):
获取AGC自动增益控制时,是否打开Speex预处理器句柄的语音活动检测,ptr参数为float型变量的内存指针。
SPEEX_PREPROCESS_SET_DEREVERB宏(0x0008):
设置是否打开Speex预处理器句柄的消除混响,ptr参数为spx_int32_t型变量的内存指针,1表示开启,0表示关闭,默认为0。
SPEEX_PREPROCESS_GET_DEREVERB宏(0x0009):
设置是否打开Speex预处理器句柄的消除混响,ptr参数为spx_int32_t型变量的内存指针,1表示开启,0表示关闭。

*SPEEX_PREPROCESS_SET_DEREVERB_LEVEL宏(0x000A):
设置Speex预处理器句柄的消除混响的等级,ptr参数为float型变量的内存指针,本标记目前无意义。
SPEEX_PREPROCESS_GET_DEREVERB_LEVEL宏(0x000B):
获取Speex预处理器句柄的消除混响的等级,ptr参数为float型变量的内存指针,本标记目前无意义。
SPEEX_PREPROCESS_SET_DEREVERB_DECAY宏(0x000C):
设置Speex预处理器句柄的消除混响的衰减,ptr参数为float型变量的内存指针,本标记目前无意义。
SPEEX_PREPROCESS_GET_DEREVERB_DECAY宏(0x000C):
获取Speex预处理器句柄的消除混响的衰减,ptr参数为float型变量的内存指针,本标记目前无意义。*

SPEEX_PREPROCESS_SET_PROB_START宏(0x000E):
设置VAD语音活动检测时,从静音到有声音的判断标准,ptr参数为int型变量的内存指针,默认为34。
SPEEX_PREPROCESS_GET_PROB_START宏(0x000F):
获取VAD语音活动检测时,从静音到有声音的判断标准,ptr参数为int型变量的内存指针。
SPEEX_PREPROCESS_SET_PROB_CONTINUE宏(0x0010):
设置VAD语音活动检测时,从有声音到静音的判断标准,ptr参数为int型变量的内存指针,默认为20。
SPEEX_PREPROCESS_GET_PROB_CONTINUE宏(0x0011):
获取VAD语音活动检测时,从有声音到静音的判断标准,ptr参数为int型变量的内存指针。
SPEEX_PREPROCESS_SET_NOISE_SUPPRESS宏(0x0012):
设置噪音抑制时,噪音的最大程度衰减的分贝值,ptr参数为spx_int32_t型变量的内存指针,默认为-15。
SPEEX_PREPROCESS_GET_NOISE_SUPPRESS宏(0x0013):
获取噪音抑制时,噪音的最大程度衰减的分贝值,ptr参数为spx_int32_t型变量的内存指针。
SPEEX_PREPROCESS_SET_ECHO_SUPPRESS宏(0x0014):
设置残余回音消除时,残余回音的最大程度衰减的分贝值,ptr参数为spx_int32_t型变量的内存指针,默认为-40。
SPEEX_PREPROCESS_GET_ECHO_SUPPRESS宏(0x0015):
获取残余回音消除时,残余回音的最大程度衰减的分贝值,ptr参数为spx_int32_t型变量的内存指针。
SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE宏(0x0016):
设置残余回音消除时,接近末尾的残余回音的最大程度衰减的分贝值。ptr参数为spx_int32_t型变量的内存指针,默认为-15。
SPEEX_PREPROCESS_GET_ECHO_SUPPRESS_ACTIVE宏(0x0017):
获取残余回音消除时,接近末尾的残余回音的最大程度衰减的分贝值。ptr参数为spx_int32_t型变量的内存指针。
SPEEX_PREPROCESS_SET_ECHO_STATE宏(0x0018):
设置是否打开Speex预处理器句柄的残余回音消除,开启后应在回音消除后再进行预处理。ptr参数为SpeexEchoState结构体变量的内存指针,也就是Speex声学回音消除器句柄,为NULL表示关闭。
SPEEX_PREPROCESS_GET_ECHO_STATE宏(0x0019):
获取是否打开Speex预处理器句柄的残余回音消除。ptr参数为SpeexEchoState结构体指针变量的内存指针,也就是用来存放Speex声学回音消除器句柄,如果Speex声学回音消除器句柄为NULL表示关闭。
SPEEX_PREPROCESS_SET_AGC_INCREMENT宏(0x001A):
设置AGC自动增益控制时,每秒增益最大增量的分贝值,ptr参数为spx_int32_t型变量的内存指针,默认为12。
SPEEX_PREPROCESS_GET_AGC_INCREMENT宏(0x001B):
获取AGC自动增益控制时,每秒增益最大增量的分贝值,ptr参数为spx_int32_t型变量的内存指针。
SPEEX_PREPROCESS_SET_AGC_DECREMENT宏(0x001C):
设置AGC自动增益控制时,每秒增益最大减量的分贝值,ptr参数为spx_int32_t型变量的内存指针,默认为-40。
SPEEX_PREPROCESS_GET_AGC_DECREMENT宏(0x001D):
获取AGC自动增益控制时,每秒增益最大减量的分贝值,ptr参数为spx_int32_t型变量的内存指针。
SPEEX_PREPROCESS_SET_AGC_MAX_GAIN宏(0x001C):
设置AGC自动增益控制时,增益最大增加的分贝值,ptr参数为spx_int32_t型变量的内存指针,默认为30。
SPEEX_PREPROCESS_GET_AGC_MAX_GAIN宏(0x001C):
获取AGC自动增益控制时,增益最大增加的分贝值,ptr参数为spx_int32_t型变量的内存指针。

/* Can’t set loudness */
/* Get loudness /
SPEEX_PREPROCESS_GET_AGC_LOUDNESS 33
/* Can’t set gain */
/* Get current gain (int32 percent) /
SPEEX_PREPROCESS_GET_AGC_GAIN 35
/* Can’t set spectrum size */
/* Get spectrum size for power spectrum (int32) /
SPEEX_PREPROCESS_GET_PSD_SIZE 37
/* Can’t set power spectrum */
/* Get power spectrum (int32[] of squared values) /
SPEEX_PREPROCESS_GET_PSD 39
/* Can’t set noise size */
/* Get spectrum size for noise estimate (int32) /
SPEEX_PREPROCESS_GET_NOISE_PSD_SIZE 41
/* Can’t set noise estimate */
/* Get noise estimate (int32[] of squared values) /
SPEEX_PREPROCESS_GET_NOISE_PSD 43
/* Can’t set speech probability */
/* Get speech probability in last frame (int32). /
SPEEX_PREPROCESS_GET_PROB 45
/* Set preprocessor Automatic Gain Control level (int32) /
SPEEX_PREPROCESS_SET_AGC_TARGET 46
/* Get preprocessor Automatic Gain Control level (int32) /
SPEEX_PREPROCESS_GET_AGC_TARGET 47

ptr,[输入&输出]:存放控制参数。
本参数是根据request参数来定义的。
返回值
0:成功。
非0:失败,request参数无效。

函数名称 speex_preprocess_run
头文件 #include “speex_preprocess.h”
函数功能 根据Speex预处理器句柄,对一帧16位有符号整型单声道原始音频数据进行预处理。
函数声明 int speex_preprocess_run (SpeexPreprocessState * st, spx_int16_t * x);
函数参数 st,[输入]:
存放Speex预处理器句柄。
x,[输入]:
存放一帧16位有符号整型单声道原始音频数据的内存指针。
返回值
1:预处理完毕,如果打开语音活动检测,表示本帧音频数据为有声音。
0:预处理完毕,如果打开语音活动检测,表示本帧音频数据为静音。

函数名称 speex_preprocess_state_destroy
头文件 #include “speex_preprocess.h”
函数功能
销毁一个Speex预处理器句柄。
函数声明 void speex_preprocess_state_destroy (SpeexPreprocessState * st);
函数参数
st,[输入]:存放Speex预处理器句柄。
返回值 无

原创粉丝点击