linux运行speex,linux 用speex库压缩音频

int sound::encode()

{

FILE *fin,*fout1,*fout2,*fout3;//三个文件指针,fin为已录制好的音频文件

short in[FRAME_SIZE];

short out[FRAME_SIZE];

float input[FRAME_SIZE];

float output[FRAME_SIZE];//设置几个缓冲区

char cbits[200];

int nbBytes;//用来记录每次编码出来的数据量

qDebug()<

void *stateencode;

void *statedecode;

qDebug()<

SpeexBits bitsencode;

SpeexBits bitsdecode;

qDebug()<

int i,tmp;

stateencode = speex_encoder_init(&speex_nb_mode);//初始化编码器,

qDebug()<

statedecode = speex_decoder_init(&speex_nb_mode);

qDebug()<

tmp=0;

int k=0;

k=speex_encoder_ctl(stateencode,SPEEX_SET_VBR,&tmp);

qDebug()<

float q=8.0;

tmp=8;

k=speex_encoder_ctl(stateencode,SPEEX_SET_VBR_QUALITY,&q);

qDebug()<

k=speex_encoder_ctl(stateencode,SPEEX_SET_QUALITY,&tmp);

qDebug()<

fin = fopen("./test.wav","rb");

fout1 =fopen("./demo.raw","wb");

fout2 = fopen("./demo.wav","wb");

fout3= fopen("./demoslience","wb");

qDebug()<

speex_bits_init(&bitsencode);

qDebug()<

speex_bits_init(&bitsdecode);

qDebug()<

qDebug()<

int j=0;

SpeexPreprocessState *m_st;

SpeexPreprocessState *echo_state;

qDebug()<

m_st=speex_preprocess_state_init(160,8000);

qDebug()<

int denoise =1;

int noisesuppress=-25;

k= speex_preprocess_ctl(m_st,SPEEX_PREPROCESS_SET_DENOISE,&denoise);

k=speex_preprocess_ctl(m_st,SPEEX_PREPROCESS_SET_NOISE_SUPPRESS,&noisesuppress);

int agc =1;

q =24000;

k=speex_preprocess_ctl(m_st,SPEEX_PREPROCESS_SET_AGC,&agc);

k=speex_preprocess_ctl(m_st,SPEEX_PREPROCESS_SET_AGC_LEVEL,&q);

int vad =1;

int vadprobstart = 80;

int vadprobcontinue = 65;

qDebug()<

k=speex_preprocess_ctl(m_st,SPEEX_PREPROCESS_SET_VAD,&vad);

k=speex_preprocess_ctl(m_st,SPEEX_PREPROCESS_SET_PROB_START,&vadprobstart);

k=speex_preprocess_ctl(m_st,SPEEX_PREPROCESS_SET_PROB_CONTINUE,&vadprobcontinue);

while(1)

{

qDebug()<

memset(out,0,160*sizeof(short));

j++;

qDebug()<

int r=fread(in,sizeof(short),160,fin);

qDebug()<

if(feof(fin))

break;

qDebug()<

spx_int16_t *ptr=(spx_int16_t *)in;

qDebug()<

if(speex_preprocess_run(m_st,ptr))

{

printf("speech,");

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

}

else

{

printf("slience,");

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

}

qDebug()<

i = fwrite(in,sizeof(short),FRAME_SIZE,fout3);

r = fflush(fout3);

for(i=0;iinput[i]=in[i];

qDebug()<

speex_bits_reset(&bitsencode);

qDebug()<

int ret =speex_encode(stateencode,input,&bitsencode);

qDebug()<

nbBytes = speex_bits_write(&bitsencode,cbits,200);

qDebug()<

k=fwrite(cbits,sizeof(char),nbBytes,fout1);

r = fflush(fout1);

qDebug()<

qDebug()<

qDebug()<

speex_bits_reset(&bitsdecode);

qDebug()<

speex_bits_read_from(&bitsdecode,cbits,nbBytes);

qDebug()<

qDebug()<

qDebug()<

//memset(statedecode,0,160*sizeof(short));

//qDebug()<

qDebug()<

qDebug()<

qDebug()<

qDebug()<

qDebug()<

ret = speex_decode_int(statedecode,&bitsdecode,out);

qDebug()<

/* for(i=0;i<128;i++)

out[i]=output[i];*/

r = fwrite(out,sizeof(short),128,fout2);

qDebug()<

r = fflush(fout2);

qDebug()<

}

speex_encoder_destroy(stateencode);

speex_bits_destroy(&bitsencode);

speex_decoder_destroy(statedecode);

speex_bits_destroy(&bitsdecode);

fclose(fin);

fclose(fout1);

fclose(fout2);

fclose(fout3);

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值