亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? decoder.cpp

?? G711語(yǔ)音壓縮源碼
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
//#include "stdafx.h"
#include <math.h>
#include <memory.h>
#include <float.h>

#include "LanAudio.h"
#include "Global.h"

unsigned char linear2alaw(_int16	pcm_val);
_int16 alaw2linear(unsigned char  a_val);
unsigned char linear2ulaw(_int16	pcm_val);
_int16 ulaw2linear(unsigned char	u_val);
unsigned char alaw2ulaw(unsigned char	aval);
unsigned char ulaw2alaw(unsigned char	uval);

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CLanAudioDecoder::CLanAudioDecoder(BOOL bPostFilter,EAudioCodec nCodec)
{
	UsePf = bPostFilter;
    Init_Decod();
    Init_Dec_Cng();
//	OutputDebugString("Audio Decoder Inited\n");
	m_nCodec = nCodec;
	m_bMute = FALSE;
}

CLanAudioDecoder::~CLanAudioDecoder()
{
}
int CLanAudioDecoder::DecodeG711(unsigned char * input,short* decode)
{
	unsigned char * org_input = input;
	short* org_decode = decode;

	if(m_bMute)
		for(int i = 0; i < G711_Frame; i++){
			*decode = 0;
			decode ++;
		}
	else{ 
		if(m_nCodec==G711_A)
			for(int i = 0; i < G711_Frame; i++){
				*decode = alaw2linear(*input);
				input ++;
				decode ++;
			}
		else
			for(int i = 0; i < G711_Frame; i++){
				*decode = ulaw2linear(*input);
				input ++;
				decode ++;
			}
	}

	input = org_input;
	decode = org_decode;
	return(G711_Frame);
}

int CLanAudioDecoder::DecodeG723(short * iFrame, char * cCode)
{
	int i, iInfo, iSize;

    short Crc = (short) 0;
    Decod(DataBuff, cCode, Crc);

    for (i = 0; i < Frame; i ++)
    {
        if (DataBuff[i] < (float)-32767.5)
            iFrame[i] = -32768L;
        else if (DataBuff[i] > (float)32766.5)
            iFrame[i] = 32767;
        else
        {
            if (DataBuff[i] < 0)
                iFrame[i] = (short) (DataBuff[i]-(float)0.5);
            else
                iFrame[i] = (short) (DataBuff[i]+(float)0.5);
        }
    }

    iInfo = cCode[0] & 0x0003;

    /* Check frame type and rate information */
    switch (iInfo) 
	{
        case 0x0002 : {  /* SID frame */
            iSize = 4;
            break;
        }

        case 0x0003 : {  /* untransmitted silence frame */
            iSize = 1;
            break;
        }

        case 0x0001 : {  /* active frame, low rate */
            iSize = 20;
            break;
        }

        default : {      /* active frame, high rate */
            iSize = 24;
        }
    }
	return iSize;
}

int CLanAudioDecoder::Decode(short * iFrame, char * cCode)
{
	switch (m_nCodec){
	case G711_A:
	case G711_U:
		return(DecodeG711((unsigned char *)cCode,iFrame));
		break;
	case G723:
		return(DecodeG723(iFrame,cCode));
		break;
	default:
		return(0);
		break;
	}
}

/*
**
** Function:        Init_Decod()
**
** Description:     Initializes non-zero state variables
**          for the decoder.
**
** Links to text:   Section 3.11
**
** Arguments:       None
**
** Outputs:     None
**
** Return value:    None
**
*/
void  CLanAudioDecoder::Init_Decod(void)
{
    int i;

    /* Initialize decoder data structure with zeros */
    ::memset(&DecStat,0,sizeof(DECSTATDEF));

    /* Initialize the previously decoded LSP vector to the DC vector */
    for (i = 0; i < LpcOrder; i++)
        DecStat.PrevLsp[i] = LspDcTable[i];

    DecStat.Gain = (float)1.0;
}

/*
**
** Function:        Init_Dec_Cng()
**
** Description:     Initialize Dec_Cng static variables
**
** Links to text:
**
** Arguments:       None
**
** Outputs:         None
**
** Return value:    None
**
*/
void CLanAudioDecoder::Init_Dec_Cng(void)
{
    int i;

    DecCng.PastFtyp = 1;
    DecCng.SidGain = (float)0.0;
    for (i=0; i<LpcOrder; i++)
        DecCng.LspSid[i] = LspDcTable[i];
    DecCng.RandSeed = 12345;
    return;
}

/*
**
** Function:        Decod()
**
** Description:     Implements G.723.1 dual-rate decoder for  a frame
**          of speech
**
** Links to text:   Section 3
**
** Arguments:
**
**  float  *DataBuff    Empty buffer
**  short Vinp[]       Encoded frame (22/26 bytes)
**

** Outputs:
**
**  float  DataBuff[]   Decoded frame (480 bytes)
**
** Return value:
**
**  BOOL            Always TRUE
**
*/

BOOL  CLanAudioDecoder::Decod(float *DataBuff, char *Vinp, short Crc)
{
    int      i, j, g;

    float    Senr;
    float    QntLpc[SubFrames*LpcOrder];
    float    AcbkCont[SubFrLen];

    float    LspVect[LpcOrder];
    float    Temp[PitchMax+Frame];
    float   *Dpnt;

    LINEDEF  Line;
    PFDEF    Pf[SubFrames];

    short   Ftyp;

    /*
     * Decode the packed bitstream for the frame.  (Text: Section 4;
     * pars of sectio,d 2.17, 2.18)
     */
    Line = Line_Unpk(Vinp, &Ftyp, Crc);

    if (Line.Crc != (short) 0) {
        if(DecCng.PastFtyp == 1)
            Ftyp = 1;  /* active */
        else
            Ftyp = 0;  /* untransmitted */
    }

    if (Ftyp != 1) {

        /* Silence frame : do noise generation */
        Dec_Cng(Ftyp, &Line, DataBuff, QntLpc);
    }
    else {

        /*
         * Update the frame erasure count (Text: Section 3.10)
         */
        if (Line.Crc != 0)
            DecStat.Ecount++;
        else
            DecStat.Ecount = 0;

        if (DecStat.Ecount >  ErrMaxNum)
            DecStat.Ecount = ErrMaxNum;

        /*
         * Decode the LSP vector for subframe 3.  (Text: Section 3.2)
         */
        Lsp_Inq(LspVect, DecStat.PrevLsp, Line.LspId, Line.Crc);

        /*
         * Interpolate the LSP vectors for subframes 0--2.  Convert the
         * LSP vectors to LPC coefficients.  (Text: Section 3.3)
         */
        Lsp_Int(QntLpc, LspVect, DecStat.PrevLsp);

        /* Copy the LSP vector for the next frame */
        for ( i = 0 ; i < LpcOrder ; i ++ )
            DecStat.PrevLsp[i] = LspVect[i];

        /*
         * In case of no erasure, update the interpolation gain memory.
         * Otherwise compute the interpolation gain (Text: Section 3.10)
         */
        if (DecStat.Ecount == 0) {
            g = (Line.Sfs[SubFrames-2].Mamp + Line.Sfs[SubFrames-1].Mamp) >> 1;
            DecStat.InterGain = FcbkGainTable[g];
        }
        else
            DecStat.InterGain = DecStat.InterGain*(float)0.75;

        /*
         * Generate the excitation for the frame
         */
        for (i = 0; i < PitchMax; i++)
            Temp[i] = DecStat.PrevExc[i];

        Dpnt = &Temp[PitchMax];

        if (DecStat.Ecount == 0) {

            for (i = 0; i < SubFrames; i++) {

                /* Generate the fixed codebook excitation for a
                   subframe. (Text: Section 3.5) */
                Fcbk_Unpk(Dpnt, Line.Sfs[i], Line.Olp[i>>1], i);

                /* Generate the adaptive codebook excitation for a
                   subframe. (Text: Section 3.4) */
                Decod_Acbk(AcbkCont, &Temp[SubFrLen*i], Line.Olp[i>>1],
                           Line.Sfs[i].AcLg, Line.Sfs[i].AcGn);

                /* Add the adaptive and fixed codebook contributions to
                   generate the total excitation. */

                for (j = 0; j < SubFrLen; j++)
                    Dpnt[j] = Dpnt[j] + AcbkCont[j];

                Dpnt += SubFrLen;
            }

            /* Save the excitation */
            for (j = 0; j < Frame; j++)
                DataBuff[j] = Temp[PitchMax+j];

            /* Compute interpolation index. (Text: Section 3.10) */
            /* Use DecCng.SidGain to store                       */
            /* excitation energy estimation                      */
            DecStat.InterIndx = Comp_Info(Temp, Line.Olp[SubFrames/2-1],
                                          &DecCng.SidGain);

            /* Compute pitch post filter coefficients.  (Text: Section 3.6) */
            if (UsePf)
                for (i = 0; i < SubFrames; i++)
                    Pf[i] = Comp_Lpf(Temp, Line.Olp[i>>1], i);

            /* Reload the original excitation */
            for (j = 0; j < PitchMax; j++)
                Temp[j] = DecStat.PrevExc[j];
            for (j = 0; j < Frame; j++)
                Temp[PitchMax+j] = DataBuff[j];

            /* Clip newly generated samples in Temp array */
            for (j = 0; j < Frame; j++) {
                if (Temp[PitchMax+j] < (float)-32767.5)
                    Temp[PitchMax+j] = (float)-32768.0;
                else if (Temp[PitchMax+j] > (float)32766.5)
                    Temp[PitchMax+j] = (float)32767.0;
            }

            /* Perform pitch post filtering for the frame.  (Text: Section
               3.6) */
            if (UsePf)
                for (i = 0; i < SubFrames; i++)
                    Filt_Lpf(DataBuff, Temp, Pf[i], i);

            /* Save Lsps --> LspSid */
            for (i=0; i < LpcOrder; i++)
                DecCng.LspSid[i] = DecStat.PrevLsp[i];
        }
        else {
            /* If a frame erasure has occurred, regenerate the
               signal for the frame. (Text: Section 3.10) */
            Regen(DataBuff, Temp, DecStat.InterIndx, DecStat.InterGain,
                  DecStat.Ecount, &DecStat.Rseed);
        }

        /* Update the previous excitation for the next frame */
        for (j = 0; j < PitchMax; j++)
            DecStat.PrevExc[j] = Temp[Frame+j];

        /* Resets random generator for CNG */
        DecCng.RandSeed = 12345;
    }

    /* Save Ftyp information for next frame */
    DecCng.PastFtyp = Ftyp;

    /*
     * Synthesize the speech for the frame
     */
    Dpnt = DataBuff;
    for (i = 0; i < SubFrames; i++) {

        /* Compute the synthesized speech signal for a subframe.
         * (Text: Section 3.7)
         */
        Synt(Dpnt, &QntLpc[i*LpcOrder]);

        if (UsePf) {

            /* Do the formant post filter. (Text: Section 3.8) */
            Senr = Spf( Dpnt, &QntLpc[i*LpcOrder] ) ;

            /* Do the gain scaling unit.  (Text: Section 3.9) */
            Scale(Dpnt, Senr);
        }

        Dpnt += SubFrLen;
    }

    return TRUE;
}

/*
**
** Function:           Dec_Cng()
**
** Description:        Receives Ftyp
**                     0  :  for untransmitted frames
**                     2  :  for SID frames
**                     Decodes SID frames
**                     Computes current frame excitation
**                     Computes current frame LSPs
**
** Links to text:
**
** Arguments:
**
**  short  Ftyp       Type of silence frame
**  LINEDEF *Line      Coded parameters
**  float   *DataExc   Current frame excitation
**  float   *QntLpc    Interpolated frame LPC coefficients
**
** Outputs:
**
**  float   *DataExc
**  float   *QntLpc
**
** Return value:       None
**
*/
void CLanAudioDecoder::Dec_Cng(short Ftyp, LINEDEF *Line, float *DataExc, float *QntLpc)
{
    short temp;
    int i;

    if (Ftyp == 2) {
        /*
         * SID Frame decoding
         */

        DecCng.SidGain = Dec_SidGain((short) Line->Sfs[0].Mamp);

        /* Inverse quantization of the LSP */
        Lsp_Inq(DecCng.LspSid, DecStat.PrevLsp, Line->LspId, 0);
    }
    else {

        /*
         * non SID Frame
         */
        if (DecCng.PastFtyp == 1) {
            /*
             * Case of 1st SID frame erased : quantize-decode
             * energy estimate stored in DecCng.SidGain
             * scaling factor in DecCng.CurGain
             */
            temp = Qua_SidGain(&DecCng.SidGain, 0);
            DecCng.SidGain = Dec_SidGain(temp);
        }
    }

    if (DecCng.PastFtyp == 1) {
        DecCng.CurGain = DecCng.SidGain;
    }
    else {
        DecCng.CurGain =   (float) 0.875 * DecCng.CurGain
                         + (float) 0.125 * DecCng.SidGain;
    }
    Calc_Exc_Rand(DecCng.CurGain, DecStat.PrevExc, DataExc,
                    &DecCng.RandSeed, Line);

    /* Interpolate the Lsp vectors */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人综合天天影院| 一区二区久久久| 337p粉嫩大胆噜噜噜噜噜91av| 欧美午夜一区二区三区免费大片| 97se亚洲国产综合自在线不卡| 成人黄色一级视频| www.视频一区| 色综合久久久久综合体桃花网| 99视频精品全部免费在线| 成人黄色电影在线| 91尤物视频在线观看| 色综合色狠狠综合色| 欧美视频中文字幕| 欧美精品xxxxbbbb| 日韩你懂的在线播放| 精品人在线二区三区| 久久久综合精品| 国产精品久久久久aaaa樱花| 亚洲色图在线视频| 一区二区欧美精品| 日韩综合一区二区| 蜜桃视频一区二区三区| 国产一区二区在线免费观看| 丰满亚洲少妇av| 97久久超碰精品国产| 在线欧美日韩国产| 在线播放中文一区| 久久婷婷国产综合精品青草 | 日韩欧美中文一区二区| 精品国产1区二区| 国产精品久久网站| 亚洲国产日韩精品| 激情文学综合网| 波多野结衣91| 欧美久久久久久久久| 久久久久成人黄色影片| 亚洲精品一二三四区| 轻轻草成人在线| 国产91精品精华液一区二区三区| 色综合天天综合色综合av | 在线观看视频一区二区| 欧美精品xxxxbbbb| 久久蜜桃av一区精品变态类天堂 | 国产很黄免费观看久久| 91香蕉国产在线观看软件| 欧美丝袜丝交足nylons图片| 欧美电视剧在线看免费| 亚洲美女视频一区| 久久国产欧美日韩精品| 99国产精品久久久久久久久久| 欧美精品一卡两卡| 国产精品美女久久久久久| 亚洲第一狼人社区| 成人黄色在线网站| 欧美一级在线视频| 亚洲人成网站精品片在线观看| 久久精品国产999大香线蕉| 不卡的av电影| 日韩一区二区麻豆国产| 亚洲色图丝袜美腿| 国产精品18久久久久| 欧美日韩一区二区在线视频| 中文字幕精品一区二区三区精品| 日韩激情一二三区| 色综合久久久网| 国产婷婷色一区二区三区在线| 亚洲一区二区在线视频| 成人福利视频在线看| 精品日韩一区二区三区| 亚洲一区二区三区中文字幕在线| 国产精品一品二品| 911国产精品| 一区二区免费在线| 波多野结衣中文字幕一区| 精品免费视频.| 日韩高清不卡一区| 日本高清不卡一区| 中文字幕在线不卡一区二区三区| 美女免费视频一区二区| 欧美日韩三级一区| 亚洲人精品一区| 成人av电影在线播放| 亚洲精品一区二区三区99| 日韩精品色哟哟| 欧美亚洲一区二区在线观看| 亚洲人亚洲人成电影网站色| 国产91精品在线观看| 精品人在线二区三区| 日本在线播放一区二区三区| 欧美亚洲自拍偷拍| 一区二区三区欧美视频| 91色婷婷久久久久合中文| 中文字幕在线不卡| 99视频热这里只有精品免费| 国产精品无遮挡| 成人黄色大片在线观看| 中文字幕不卡三区| 成人激情开心网| 国产精品乱人伦中文| 成人国产在线观看| 国产精品丝袜一区| a在线欧美一区| 国产精品福利在线播放| 成人福利视频网站| 日韩伦理电影网| 一本大道久久精品懂色aⅴ| 亚洲视频免费在线观看| 色哟哟欧美精品| 夜夜精品视频一区二区| 欧美视频一区二区三区| 亚洲va欧美va天堂v国产综合| 欧美情侣在线播放| 乱一区二区av| 精品99久久久久久| 国产麻豆一精品一av一免费 | 激情综合色综合久久| 久久亚洲一区二区三区四区| 国产在线精品一区二区| 欧美激情中文字幕| 色综合久久综合网欧美综合网| 亚洲综合色婷婷| 欧美美女黄视频| 久久超碰97人人做人人爱| 国产亚洲午夜高清国产拍精品 | 欧美视频在线一区| 日本一不卡视频| 26uuu亚洲婷婷狠狠天堂| 成人免费的视频| 一区二区三区不卡视频| 欧美一区二区三区四区在线观看| 极品少妇xxxx精品少妇| 中文字幕在线播放不卡一区| 欧美日韩一级视频| 韩国女主播一区二区三区| 国产精品成人一区二区艾草| 欧美性色欧美a在线播放| 免费高清在线视频一区·| 久久色在线视频| 色综合色综合色综合色综合色综合 | 91小视频在线观看| 日韩在线一区二区| 久久精品视频一区| 色偷偷久久一区二区三区| 日韩有码一区二区三区| 国产亚洲精品bt天堂精选| 日本韩国精品在线| 国产在线国偷精品产拍免费yy| **欧美大码日韩| 日韩欧美中文一区| 91香蕉视频mp4| 久久精品999| 亚洲精品第1页| 久久女同精品一区二区| 欧美视频一区二区三区在线观看 | 国产真实精品久久二三区| 自拍偷在线精品自拍偷无码专区 | 国产精品乱码一区二三区小蝌蚪| 欧美私模裸体表演在线观看| 国产尤物一区二区| 亚洲成av人影院| 国产精品日韩精品欧美在线| 91精品在线一区二区| 99久久99久久精品免费观看| 麻豆国产精品官网| 亚洲精品网站在线观看| 久久综合久久鬼色中文字| 欧美日韩极品在线观看一区| 成人黄色一级视频| 激情综合色综合久久综合| 亚洲第一主播视频| ...av二区三区久久精品| 久久综合久久综合久久综合| 欧美精品tushy高清| 99久久99久久精品国产片果冻 | 久久综合色8888| 欧美二区乱c少妇| 色综合久久中文综合久久97| 国产成人综合网站| 精品一区二区三区影院在线午夜| 一区二区欧美视频| 亚洲丝袜美腿综合| 久久精品日产第一区二区三区高清版 | 欧美一区二区黄色| 欧美中文字幕亚洲一区二区va在线 | 香蕉久久夜色精品国产使用方法| 国产精品视频看| 国产亚洲综合av| 久久午夜国产精品| 精品免费一区二区三区| 91麻豆精品国产自产在线| 欧美色国产精品| 色老综合老女人久久久| 成人黄色电影在线| 成人在线视频一区| 国产成人无遮挡在线视频| 久久超碰97人人做人人爱| 奇米一区二区三区av| 青青草伊人久久| 日本午夜精品一区二区三区电影| 亚洲.国产.中文慕字在线|