日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

G711编解码

發布時間:2023/12/15 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 G711编解码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/rightorwrong/article/details/4209467

搞語音對講幾天了,播放時聲音干擾太大了。拖得時間久有兩個原因:

1.每次采樣的位數這個值設置的問題。本來是用的采樣位數為16,但是服務端那邊說用8。導致編解碼時8位的始終有雜音。

1.G711編解碼的問題:用了一個錯誤的編解碼程序。目前用的編解碼代碼對于8為始終有雜音

下面把編解碼的代碼放在這里,16為采集效果很好

[cpp] view plaincopyprint?

//編碼
intCG711Decoder::G711_EnCode(unsignedchar*pCodecBits,constchar*pBuffer,intnBufferSize)
{
short*buffer=(short*)pBuffer;
for(inti=0;i<nBufferSize/2;i++)
{
pCodecBits[i]=encode(buffer[i]);
}

returnnBufferSize/2;
}

//解碼
intCG711Decoder::G711_Decode(char*pRawData,constunsignedchar*pBuffer,intnBufferSize)
{
short*out_data=(short*)pRawData;
for(inti=0;i<nBufferSize;i++)
{
out_data[i]=decode(pBuffer[i]);
}

returnnBufferSize*2;
}

#defineMAX(32635)
unsignedcharCG711Decoder::encode(shortpcm)
{
intsign=(pcm&0x8000)>>8;
if(sign!=0)
pcm=-pcm;
if(pcm>MAX)pcm=MAX;
intexponent=7;
intexpMask;
for(expMask=0x4000;(pcm&expMask)==0
&&exponent>0;exponent--,expMask>>=1){}
intmantissa=(pcm>>((exponent==0)?4:(exponent+3)))&0x0f;
unsignedcharalaw=(unsignedchar)(sign|exponent<<4|mantissa);
return(unsignedchar)(alaw^0xD5);
}
shortCG711Decoder::decode(unsignedcharalaw)
{
alaw^=0xD5;
intsign=alaw&0x80;
intexponent=(alaw&0x70)>>4;
intdata=alaw&0x0f;
data<<=4;
data+=8;
if(exponent!=0)
data+=0x100;
if(exponent>1)
data<<=(exponent-1);

return(short)(sign==0?data:-data);
}

總結

以上是生活随笔為你收集整理的G711编解码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。