aec in speex利用Speex进行AEC(回声抑制)的代码实现
2011-07-29 10:36
561 查看
#include <speex/speex_echo.h>
#include <speex/speex_preprocess.h>
static SpeexEchoState *echo_state = NULL;
static SpeexPreprocessState *denoise_state;
static pthread_mutex_t mutex_aec;
static char* rec_buffer = NULL;
static char* play_buffer = NULL;
static int sampleRate = 8000;
void aec_init(int frame_size)
{
if(echo_state || denoise_state)
return;
rec_buffer = (char*)malloc(frame_size*2);
play_buffer = (char*)malloc(frame_size*2);
echo_state = speex_echo_state_init(frame_size, frame_size*10);
denoise_state = speex_preprocess_state_init(frame_size, sampleRate);
speex_echo_ctl(echo_state, SPEEX_ECHO_SET_SAMPLING_RATE, &sampleRate);
speex_preprocess_ctl(denoise_state, SPEEX_PREPROCESS_SET_ECHO_STATE, echo_state);
pthread_mutex_init(&mutex_aec, NULL);
}
void aec_uninit()
{
if(echo_state)
speex_echo_state_destroy(echo_state);
if(denoise_state)
speex_preprocess_state_destroy(denoise_state);
echo_state = NULL;
denoise_state = NULL;
pthread_mutex_destroy(&mutex_aec);
if(rec_buffer)
free(rec_buffer);
if(play_buffer)
free(play_buffer);
play_buffer = NULL;
rec_buffer = NULL;
}
void aec_record_audio(void* audio_rec_buffer, unsigned int audio_data_len)
{
if(echo_state == NULL || denoise_state == NULL || rec_buffer == NULL)
return;
memset(rec_buffer, 0, audio_data_len);
speex_echo_capture(echo_state, (spx_int16_t*)audio_rec_buffer, (spx_int16_t*)rec_buffer);
speex_preprocess_run(denoise_state, (spx_int16_t*)rec_buffer);
memcpy(audio_rec_buffer, rec_buffer, audio_data_len);
}
void aec_play_audio(void* audio_play_buffer, unsigned int audio_data_len)
{
if(echo_state == NULL || denoise_state == NULL|| play_buffer == NULL)
return;
speex_echo_playback(echo_state, (spx_int16_t*)audio_play_buffer);
}
#include <speex/speex_preprocess.h>
static SpeexEchoState *echo_state = NULL;
static SpeexPreprocessState *denoise_state;
static pthread_mutex_t mutex_aec;
static char* rec_buffer = NULL;
static char* play_buffer = NULL;
static int sampleRate = 8000;
void aec_init(int frame_size)
{
if(echo_state || denoise_state)
return;
rec_buffer = (char*)malloc(frame_size*2);
play_buffer = (char*)malloc(frame_size*2);
echo_state = speex_echo_state_init(frame_size, frame_size*10);
denoise_state = speex_preprocess_state_init(frame_size, sampleRate);
speex_echo_ctl(echo_state, SPEEX_ECHO_SET_SAMPLING_RATE, &sampleRate);
speex_preprocess_ctl(denoise_state, SPEEX_PREPROCESS_SET_ECHO_STATE, echo_state);
pthread_mutex_init(&mutex_aec, NULL);
}
void aec_uninit()
{
if(echo_state)
speex_echo_state_destroy(echo_state);
if(denoise_state)
speex_preprocess_state_destroy(denoise_state);
echo_state = NULL;
denoise_state = NULL;
pthread_mutex_destroy(&mutex_aec);
if(rec_buffer)
free(rec_buffer);
if(play_buffer)
free(play_buffer);
play_buffer = NULL;
rec_buffer = NULL;
}
void aec_record_audio(void* audio_rec_buffer, unsigned int audio_data_len)
{
if(echo_state == NULL || denoise_state == NULL || rec_buffer == NULL)
return;
memset(rec_buffer, 0, audio_data_len);
speex_echo_capture(echo_state, (spx_int16_t*)audio_rec_buffer, (spx_int16_t*)rec_buffer);
speex_preprocess_run(denoise_state, (spx_int16_t*)rec_buffer);
memcpy(audio_rec_buffer, rec_buffer, audio_data_len);
}
void aec_play_audio(void* audio_play_buffer, unsigned int audio_data_len)
{
if(echo_state == NULL || denoise_state == NULL|| play_buffer == NULL)
return;
speex_echo_playback(echo_state, (spx_int16_t*)audio_play_buffer);
}
相关文章推荐
- 利用正则表达对IP进行排序的实现代码
- js混淆代码还原-js反混淆:利用js进行赋值实现
- js混淆代码还原-js反混淆:利用js进行赋值实现
- 2、利用反射技术得到泛型类型,实现对实体添删改查操作进行代码重用设计
- PHP中利用mysql进行访问统计的思路和实现代码
- js混淆代码还原-js反混淆:利用js进行赋值实现
- 利用最大熵进行阈值分割从而实现灰度图像的二值化的原理概要及OpenCV代码
- 利用Canny边缘检测算子进行边缘检测的原理及OpenCV代码实现
- 利用霍夫梯度法进行圆检测的原理概要及OpenCV代码实现
- js混淆代码还原-js反混淆:利用js进行赋值实现
- 利用朴素贝叶斯算法进行分类-Java代码实现
- 利用Spark-mllab进行聚类,分类,回归分析的代码实现(python)
- js混淆代码还原-js反混淆:利用js进行赋值实现
- [投稿]Speex回声消除代码分析
- 利用CreateRemoteThread进行远程代码注入的技术在64位机上可能遇到的问题
- [PHP]利用XAMPP搭建本地服务器, 然后利用iOS客户端上传数据到本地服务器中(四. iOS端代码实现)
- String:利用引用计数进行实现
- 利用Cookie进行自动登录相关代码
- 利用chosen.js插件实现下拉可搜索多选,控制选择个数,选项框复位,修改下拉选项的功能(附代码)
- Android界面编程之利用单选框和复选框实现对学历和爱好进行选择