speex 设置增益失败, int act_set=speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC,

sinat_24769833 2015-10-21 02:20:53
#include <jni.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include<stdio.h>
//#include <speex/speex.h>
//#include <speex/speex_echo.h>

/*start*/
#include <fcntl.h>
#include <speex/speex.h>

#include <speex/speex_preprocess.h>

#include <android/log.h>

#ifdef ANDROID
#define LOGE(format, ...) __android_log_print(ANDROID_LOG_ERROR, "(>_<)", format, ##__VA_ARGS__)
#define LOGI(format, ...) __android_log_print(ANDROID_LOG_INFO, "(=_=)", format, ##__VA_ARGS__)
#else
#define LOGE(format, ...) LOGE("(>_<) " format "\n", ##__VA_ARGS__)
#define LOGI(format, ...) LOGE("(^_^) " format "\n", ##__VA_ARGS__)
#endif

#define TAG "Decoder_Audio" // 这个是自定义的LOG的标识
#define LOGD(...) __android_log_print(ANDROID_LOG_INFO,TAG,__VA_ARGS__) // 定义LOGD类型



#define FRAME_SIZE 160

void Java_com_example_speexdeom_SpeexHelper_speex_1agc() {



const char *in_filename = "/mnt/sdcard/test/raw.pcm";
const char *out_filename = "/mnt/sdcard/test/agc.pcm";

FILE *fin, *fout;

short in[FRAME_SIZE];


int i;

SpeexPreprocessState *st;

st=speex_preprocess_state_init(FRAME_SIZE, 8000);



int denoise = 1;
int noiseSuppress = -25;
int denoise_set=speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_DENOISE, &denoise); //降噪
LOGI("---denoise_set=%d", denoise_set);
int denoise_ctl=speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS,
&noiseSuppress); //设置噪声的dB
LOGI("---denoise_ctl=%d", denoise_ctl);

int agc = 1;
int q = 24000;
//actually default is 8000(0,32768),here make it louder for voice is not loudy enough by default. 8000
int act_set=speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC, &agc); //增益
LOGI("---agc_set=%d", act_set);
int agc_ctl=speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_AGC_LEVEL, &q);
LOGI("---agc_ctl=%d", agc_ctl);

int vad = 1;
int vadProbStart = 80;
int vadProbContinue = 65;
speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_VAD, &vad); //静音检测
speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_PROB_START, &vadProbStart); //Set probability required for the VAD to go from silence to voice
speex_preprocess_ctl(st, SPEEX_PREPROCESS_SET_PROB_CONTINUE,
&vadProbContinue); //Set probability required for the VAD to stay in the voice state (integer percent)

fin = fopen(in_filename, "rb");
fout = fopen(out_filename, "wb");

while (1)

{

int size = fread(in, sizeof(short), FRAME_SIZE, fin);

if (size< FRAME_SIZE){
break;
}

spx_int16_t * ptr=(spx_int16_t *)in;

int run= speex_preprocess_run(st, ptr);
// LOGI("---run=%d", run);

fwrite(in, sizeof(short), FRAME_SIZE, fout);


}

speex_preprocess_state_destroy(st);

}
...全文
221 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧