linux 用speex库压缩音频

原创 2012年03月21日 09:34:58


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()<<"i love china!!";

void *stateencode;

void *statedecode;

qDebug()<<"loveing china!!";

SpeexBits bitsencode;

SpeexBits bitsdecode;

qDebug()<<"hello!!";

int i,tmp;

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

qDebug()<<"world!! and the stateencode is:"<<stateencode;

statedecode = speex_decoder_init(&speex_nb_mode);

qDebug()<<"power and the statedecode is:"<<statedecode;

tmp=0;

int k=0;

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

qDebug()<<"ooxx set VBR "<<k;

float q=8.0;

tmp=8;

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

qDebug()<<"!!!!!!!!!!!!!!!!! SET VBR QUALITY "<<k;

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

qDebug()<<"***********************"<<k;

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

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

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

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

qDebug()<<"After open the file!!";

speex_bits_init(&bitsencode);

qDebug()<<"speex bits init encode "<<k;

speex_bits_init(&bitsdecode);

qDebug()<<"speex bits init decode "<<k;

qDebug()<<"After the bits init";

int j=0;

SpeexPreprocessState *m_st;

SpeexPreprocessState *echo_state;

qDebug()<<"Aftre the SpeexPreprocessStat";

m_st=speex_preprocess_state_init(160,8000);

qDebug()<<"After the speex_preprocess_state"<<m_st;

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()<<"before the SET VAD";

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()<<"in the while";

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

j++;

qDebug()<<"before the read the file and the j is:"<<j;

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

qDebug()<<"after the read the file and the r is"<<r;

if(feof(fin))

break;

qDebug()<<"ooxxoxxooxxoxxoox";

spx_int16_t *ptr=(spx_int16_t *)in;

qDebug()<<"*************************"<<ptr;

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()<<"the in size is"<<sizeof(in)<<"the in is : "<<in;

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

r = fflush(fout3);

for(i=0;i<FRAME_SIZE;i++)

input[i]=in[i];

qDebug()<<"It is starting decode...";

speex_bits_reset(&bitsencode);

qDebug()<<"after bits reset and the k is:"<<k;

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

qDebug()<<"after the speex encode"<<ret;

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

qDebug()<<"after speex bits write";

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

r = fflush(fout1);

qDebug()<<"check the fflush fout1 and the result is:"<<r;

qDebug()<<"after the write in to the fout1: "<<k;

qDebug()<<"nbBytes is,"<<nbBytes;

speex_bits_reset(&bitsdecode);

qDebug()<<"after the second bits reset";

speex_bits_read_from(&bitsdecode,cbits,nbBytes);

qDebug()<<"after speex bits read from";

qDebug()<<"statedecode:"<<statedecode;

qDebug()<<"&bitsdecode:"<<&bitsdecode;

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

//qDebug()<<"bitsdecode:"<<bitsdecode;

qDebug()<<"the sizeof of out is"<<sizeof(out);

qDebug()<<"the out is "<<out;

qDebug()<<"bitsdecode"<<bitsdecode.buf_size;

qDebug()<<"bitsdecode"<<bitsdecode.overflow;

qDebug()<<"bitsdecode"<<bitsdecode.owner;

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

qDebug()<<"after the speex decode and the ret is:"<<ret;

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

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

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

qDebug()<<"after to write into the fout2:"<<r;

r = fflush(fout2);

qDebug()<<"check the fflush fout2"<<r;

}

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;

}


相关文章推荐

speex-linux下音频处理

交叉编译linphone [osip2 ,ogg, speex, ortp(VOIP开源软件)(转)]2008-10-22 16:40LINPHONE ON ARM-LINUX (cross-comp...

编译speex过程

部分内容参考:http://blog.csdn.net/chenfeng0104/article/details/7088138 一、作者使用的speex版本是:speex-1.2rc2,speex...
  • nanaqx
  • nanaqx
  • 2015年06月15日 13:35
  • 1860

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Speex之三--编译和移植

3. 编译和移植 通过自动配置在UNIX/Linux或其它平台支持(如Win32/cywin)编译Speex很容易,只需键入: %./configure[options] %make %mak...
  • zsJum
  • zsJum
  • 2012年05月10日 20:04
  • 6384

不要用speex做静音检测vad

speex从1.2版本开始支持静音检测vad(还有降噪、回声消除、自动增益控制agc、抖动buffer、重采样等一堆功能)等针对语音的预处理功能,实现在libspeexdsp库中。 真正用起来后,发...

串口的Hex/AscII发送与显示

来源:http://www.bubuko.com/infodetail-996955.html       首先,底层的数据传输都是字节流,所以不管选择什么方式,都会被分解为一个一个的字节。 ...

用js 码一段代码求 三元一次方程组的值!

// 求用js 码一段代码求 三元一次方程组的值! // a1 = y * b1 + z * c1 - d1 * x; (1) // a2 = y * b2 + z * c2 - d2 * x; ...

通俗地说压缩音频格式

日常生活中我们能接触到很多声音信息。而记录这些信息的方法也是多种多样。最常见的就是磁带、CD、MD、MP3。当然,还有其他比如LP、DVD-A等。这里主要介绍最为常见的MP3、MD和比较有对比性的AP...

speex音频解压缩demo(含Eclipse和AS版)

  • 2016年11月15日 18:31
  • 28.08MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux 用speex库压缩音频
举报原因:
原因补充:

(最多只允许输入30个字)