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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? encoder.cpp

?? G711語音壓縮源碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
         * versus reference filter
         */
        if (!LpcDiff(CodCng.RC, CodCng.Acf, *CodCng.Ener)) {
            *Ftyp = 2;  /* transmit SID frame */
        }
        else {
            i = ::abs((int)(curQGain - CodCng.IRef));
            if (i > ThreshGain) {
                *Ftyp = 2;
            }
            else {
                /* no transmission */
                *Ftyp = 0;
            }
        }
    }

    /*
     * If SID frame : Compute SID filter
     */
    if (*Ftyp == 2) {

        /*
         * Evaluates local stationnarity :
         * Computes difference between current filter and past average filter
         * if signal not locally stationary SID filter = current filter
         * else SID filter = past average filter
         */

        /* Compute past average filter */
        ComputePastAvFilter(CodCng.SidLpc) ;

        /* If adaptation enabled, fill noise filter */
        if ( !VadStat.Aen ) {
            for (i = 0; i < LpcOrder; i++)
                VadStat.NLpc[i] = CodCng.SidLpc[i];
        }

        /* Compute autocorr. of past average filter coefficients */
        CalcRC(CodCng.SidLpc , CodCng.RC);

        if (!LpcDiff(CodCng.RC, CodCng.Acf, *CodCng.Ener)) {
            for (i=0; i<LpcOrder; i++) {
                CodCng.SidLpc[i] = curCoeff[i];
            }
            CalcRC(curCoeff, CodCng.RC);
        }

        /*
         * Compute SID frame codes
         */

        /* Compute LspSid */
        AtoLsp(CodCng.LspSid, CodCng.SidLpc, CodStat.PrevLsp);
        Line->LspId = Lsp_Qnt(CodCng.LspSid, CodStat.PrevLsp);
        Lsp_Inq(CodCng.LspSid, CodStat.PrevLsp, Line->LspId, 0);

        Line->Sfs[0].Mamp = curQGain;
        CodCng.IRef = curQGain;
        CodCng.SidGain = Dec_SidGain(CodCng.IRef);

    } /* end of Ftyp=2 case (SID frame) */

    /*
     * Compute new excitation
     */
    if (CodCng.PastFtyp == 1) {
        CodCng.CurGain = CodCng.SidGain;
    }
    else {
        CodCng.CurGain = (float)0.875 * CodCng.CurGain + (float)0.125 * CodCng.SidGain;
    }
    Calc_Exc_Rand(CodCng.CurGain, CodStat.PrevExc, DataExc,
                                                &CodCng.RandSeed, Line);

    /*
     * Interpolate LSPs and update PrevLsp
     */
    Lsp_Int(QntLpc, CodCng.LspSid, CodStat.PrevLsp);
    for (i=0; i < LpcOrder ; i++) {
        CodStat.PrevLsp[i] = CodCng.LspSid[i];
    }

    /*
     * Output & save frame type info
     */
    CodCng.PastFtyp = *Ftyp;
    return;
}

BOOL CLanAudioEncoder::Comp_Vad(float *Dpnt)
{
    int     i, j, bexp;

    float   Acc0, Frac, Thresh, Enr;
    float   Temp;
    int  Tm1, Tm2;
    short  Minp;

    BOOL    VadState = TRUE;

    static  float  ScfTab[11] = {
        (float)  9170.0,
        (float)  9170.0,
        (float)  9170.0,
        (float)  9170.0,
        (float) 10289.0,
        (float) 11544.0,
        (float) 12953.0,
        (float) 14533.0,
        (float) 16306.0,
        (float) 18296.0,
        (float) 20529.0
    };

    if ( !UseVx )
        return VadState ;

    /* Find Minimum pitch period */
    Minp = (short) PitchMax ;
    for ( i = 0 ; i < 4 ; i ++ ) {
        if ( Minp > VadStat.Polp[i] )
            Minp = VadStat.Polp[i] ;
    }

    /* Check that all are multiplies of the minimum */
    Tm2 = 0 ;
    for ( i = 0 ; i < 4 ; i ++ ) {
        Tm1 = Minp ;
        for ( j = 0 ; j < 8 ; j ++ ) {
            if (abs((int)(Tm1 - VadStat.Polp[i])) <= 3)
                Tm2++ ;
            Tm1 += Minp;
        }
    }

    /* Update adaptation enable counter if not periodic and not sine */
    if ( (Tm2 == 4) || (CodStat.SinDet < 0) )
        VadStat.Aen += 2 ;
    else
        VadStat.Aen -- ;

    /* Clip it */
    if ( VadStat.Aen > 6 )
        VadStat.Aen = 6 ;
    if ( VadStat.Aen < 0 )
        VadStat.Aen = 0 ;

    /* Inverse filter the data */
    Enr = (float) 0.0;
    for ( i = SubFrLen ; i < Frame ; i ++ ) {
        Acc0 = Dpnt[i];
        for ( j = 0 ; j < LpcOrder ; j ++ )
            Acc0 -= Dpnt[i-j-1] * VadStat.NLpc[j];
        Enr += Acc0 * Acc0;
    }

    /* Scale the rezidual energy.
     * Multiplication by 0.5 yields a value approximately equal
     * to the corresponding computation in the fixed point code.
     * Thus the same bounds, computations and thresholds as in the
     * fixed point code can be used below.
     */
    Enr = (float)0.5 * (Enr / (float)180.0);

    /* Clip noise level in any case */
    if ( VadStat.Nlev > VadStat.Penr ) {
        VadStat.Nlev = (float)0.25 * VadStat.Nlev + (float)0.75 * VadStat.Penr;
    }

    /* Update the noise level, if adaptation is enabled */
    if ( !VadStat.Aen ) {
        VadStat.Nlev *= (float)33.0 / (float)32.0;
    }
    /* Decay Nlev by small amount */
    else {
        VadStat.Nlev *= (float)2047.0 / (float)2048.0;
    }

    /* Update previous energy */
    VadStat.Penr = Enr;

    /* CLip Noise Level */
    if (VadStat.Nlev < (float) 128.0)
        VadStat.Nlev = (float) 128.0;
    if (VadStat.Nlev > (float) 131071.0)
        VadStat.Nlev = (float) 131071.0;

    /* Compute the threshold */
    Frac = (float) frexp(VadStat.Nlev, &bexp);
    /* VadStat.Nlev = Frac x 2**bexp, where Frac = 0.1bbbbbb...., binary.
     * Isolate the 6 fractional bits 'b', Temp = 0.bbbbbb.
     */
    Temp = ((float)floor(Frac * (float)128.0) / (float)64.0) - (float)1.0;
    Temp = ((float)1.0 - Temp) * ScfTab[18 - bexp] + Temp * ScfTab[17 - bexp];
    Thresh = (Temp * VadStat.Nlev) / (float)4096.0;

    /* Compare with the threshold */
    if (Thresh > Enr)
        VadState = FALSE ;

    /* Do the various counters */
    if ( VadState ) {
        VadStat.Vcnt ++ ;
        VadStat.Hcnt ++ ;
    }
    else {
        VadStat.Vcnt -- ;
        if ( VadStat.Vcnt < 0 )
            VadStat.Vcnt = 0 ;
    }

    if ( VadStat.Vcnt >= 2 ) {
        VadStat.Hcnt = 6 ;
        if (VadStat.Vcnt >= 3)
            VadStat.Vcnt = 3;
    }

    if ( VadStat.Hcnt ) {
        VadState = TRUE ;
        if ( VadStat.Vcnt == 0 )
            VadStat.Hcnt -- ;
    }

    /* Update Periodicy detector */
    VadStat.Polp[0] = VadStat.Polp[2] ;
    VadStat.Polp[1] = VadStat.Polp[3] ;

    return VadState ;
}

/*
**
** Function:           Update_Acf()
**
** Description:        Computes & Stores sums of subframe-acfs
**
** Links to text:
**
** Arguments:
**
**  float  *Acf_sf     sets of subframes Acfs of current frame
**
** Output :            None
**
** Return value:       None
**
*/
void CLanAudioEncoder::Update_Acf(float *Acf_sf)
{
    int i, i_subfr;
    float *ptr1, *ptr2;

    /* Update Acf */
    ptr2 = CodCng.Acf + SizAcf;
    ptr1 = ptr2 - LpcOrderP1;
    for (i=LpcOrderP1; i<SizAcf; i++)
        *(--ptr2) = *(--ptr1);

    /* Compute current sum of acfs */
    for (i=0; i<= LpcOrder; i++)
        CodCng.Acf[i] = (float) 0.0;

    ptr2 = Acf_sf;
    for (i_subfr=0; i_subfr<SubFrames; i_subfr++) {
        for (i=0; i <= LpcOrder; i++) {
            CodCng.Acf[i] += *ptr2++;
        }
    }
}

/*
**
** Function:           ComputePastAvFilter()
**
** Description:        Computes past average filter
**
** Links to text:
**
** Argument:
**
**   float *Coeff      set of LPC coefficients
**
** Output:
**
**   float *Coeff
**
** Return value:       None
**
*/
void CLanAudioEncoder::ComputePastAvFilter(float *Coeff)
{
    int i, j;
    float *ptr_Acf;
    float sumAcf[LpcOrderP1];
    float temp;

    /* Compute sum of NbAvAcf frame-Acfs  */
    for (j=0; j <= LpcOrder; j++)
        sumAcf[j] = (float) 0.0;

    ptr_Acf = CodCng.Acf + LpcOrderP1;
    for (i=1; i <= NbAvAcf; i++) {
        for (j=0; j <= LpcOrder; j++) {
            sumAcf[j] += *ptr_Acf++;
        }
    }

    Durbin(Coeff, &sumAcf[1], sumAcf[0], &temp);

    return;
}

/*
**
** Function:           CalcRC()
**
** Description:        Computes function derived from
**                     the autocorrelation of LPC coefficients
**                     used for Itakura distance
**
** Links to text:
**
** Arguments :
**
**   float *Coeff      set of LPC coefficients
**   float *RC         derived from LPC coefficients autocorrelation
**
** Outputs :
**
**   float *RC
**
** Return value:       None
**
*/
void CLanAudioEncoder::CalcRC(float *Coeff, float *RC)
{
    int i, j;
    float temp;

//    temp = (float) 1.0 + DotProd(Coeff, Coeff, LpcOrder);
    temp = (float) 1.0 + DotProd10s(Coeff, Coeff);
    RC[0] = temp;

    for (i=1; i<=LpcOrder; i++) {
        temp = -Coeff[i-1];
        for (j=0; j<LpcOrder-i; j++) {
            temp += Coeff[j] * Coeff[j+i];
        }
        RC[i] = (float)2.0 * temp;
    }
    return;
}

/*
**
** Function:           LpcDiff()
**
** Description:        Comparison of two filters
**                     using Itakura distance
**                     1st filter : defined by *ptrAcf
**                     2nd filter : defined by *RC
**                     the autocorrelation of LPC coefficients
**                     used for Itakura distance
**
** Links to text:
**
** Arguments :
**
**   float *RC         derived from LPC coefficients autocorrelation
**   float *ptrAcf     pointer on signal autocorrelation function
**   float alpha       residual energy in LPC analysis using *ptrAcf
**
** Output:             None
**
** Return value:       flag = 1 if similar filters
**                     flag = 0 if different filters
**
*/
BOOL CLanAudioEncoder::LpcDiff(float *RC, float *ptrAcf, float alpha)
{
    float temp0, temp1;
    BOOL diff;

    temp0 = DotProd(RC, ptrAcf, LpcOrderP1);
    temp1 = alpha * FracThreshP1;

    if (temp0 < temp1)
        diff = TRUE;
    else
        diff = FALSE;
    return diff;
}

/*
**
** Function:        Rem_Dc()
**
** Description:     High-pass filtering
**
** Links to text:   Section 2.3
**
** Arguments:
**
**  float  *Dpnt
**
** Inputs:
**
**  CodStat.HpfZdl  FIR filter memory from previous frame (1 word)
**  CodStat.HpfPdl  IIR filter memory from previous frame (1 word)
**
** Outputs:
**
**  float  *Dpnt
**
** Return value:    None
**
*/

void  CLanAudioEncoder::Rem_Dc(float *Dpnt)
{
    int   i;
    float acc0;

    if (UseHp)
    {
        for (i=0; i < Frame; i++)
        {
            acc0 = Dpnt[i] - CodStat.HpfZdl;
            CodStat.HpfZdl = Dpnt[i];

            Dpnt[i] = CodStat.HpfPdl =
                            acc0 + CodStat.HpfPdl*((float)127.0/(float)128.0);
        }
    }
}


/*
**
** Function:        Line_Pack()
**
** Description:     Packing coded parameters in bitstream of 16-bit words
**
** Links to text:   Section 4
**
** Arguments:
**
**  LINEDEF *Line     Coded parameters for a frame
**  char    *Vout     bitstream chars
**  short   Ftyp     Voice Activity Indicator
**
** Outputs:
**
**  short *Vout
**
** Return value:    None
**
*/
void    CLanAudioEncoder::Line_Pack(LINEDEF *Line, char *Vout, short Ftyp)
{
    int       i;
    int       BitCount;

    short    BitStream[192];
    short    *Bsp = BitStream;
    int    Temp;

    /* Clear the output vector */
    for ( i = 0 ; i < 24 ; i ++ )
        Vout[i] = 0 ;

 /*
  * Add the coder rate info and frame type info to the 2 msb
  * of the first word of the frame.
  * The signaling is as follows:
  *     Ftyp  WrkRate => X1X0
  *       1     Rate63     00  :   High Rate
  *       1     Rate53     01  :   Low  Rate
  *       2       x        10  :   Silence Insertion Descriptor frame
  *       0       x        11  :   Used only for simulation of
  *                                 untransmitted silence frames
  */
    switch (Ftyp) {

        case 0 : {
            Temp = 0x00000003L;
            break;
        }

        case 2 : {
            Temp = 0x00000002L;
            break;
        }

        default : {
            if ( WrkRate == Rate63 )
                Temp = 0x00000000L;
            else
                Temp = 0x00000001L;
            break;
        }
    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片你懂的| 成人晚上爱看视频| 国产成人精品1024| 欧美视频一区在线| 久久久久久免费| 亚洲成人免费视频| 成人成人成人在线视频| 欧美精品成人一区二区三区四区| 国产欧美日韩不卡免费| 免费不卡在线观看| 欧美在线|欧美| 国产精品电影院| 国内不卡的二区三区中文字幕| 91视频你懂的| 国产精品女主播av| 狠狠色丁香婷婷综合| 欧美猛男男办公室激情| 亚洲精品乱码久久久久久久久| 国产盗摄一区二区三区| 日韩一区国产二区欧美三区| 亚洲图片欧美一区| 色婷婷国产精品综合在线观看| 欧美激情在线一区二区三区| 激情文学综合网| 精品美女在线观看| 日本亚洲免费观看| 欧美一区二区三级| 亚洲福利视频三区| 欧美三区在线视频| 一区二区三区欧美亚洲| 色综合激情久久| 中文字幕中文字幕在线一区| 成人午夜看片网址| 亚洲国产精品成人综合| 成人中文字幕在线| 国产三区在线成人av| 国产综合久久久久影院| 欧美不卡激情三级在线观看| 久久国产婷婷国产香蕉| 欧美哺乳videos| 国产精品中文字幕一区二区三区| 久久婷婷久久一区二区三区| 精品一区二区三区视频在线观看| 精品久久久久久久久久久久久久久| 日韩制服丝袜av| 精品久久人人做人人爽| 国产乱码精品一区二区三| 久久一区二区三区国产精品| 国产在线视视频有精品| 国产日产亚洲精品系列| 成人精品视频一区二区三区| 成人免费在线视频观看| 色美美综合视频| 香蕉乱码成人久久天堂爱免费| 欧美精品久久一区| 蜜桃精品在线观看| 欧美激情综合网| 色视频欧美一区二区三区| 亚洲国产精品久久久久婷婷884 | 91免费视频网址| 亚洲综合视频网| 欧美精选在线播放| 国产精品综合久久| 亚洲同性同志一二三专区| 欧美日本一道本| 国产成人鲁色资源国产91色综| 中文字幕亚洲成人| 91精品国产色综合久久不卡电影| 国产在线麻豆精品观看| 国产精品国产三级国产aⅴ入口| 日本道免费精品一区二区三区| 日本美女一区二区三区视频| 久久久久久久久久久黄色| 色婷婷av一区二区三区软件| 免费成人av在线播放| 国产精品剧情在线亚洲| 67194成人在线观看| 国产91在线看| 日韩黄色在线观看| 国产女主播一区| 欧美日韩免费观看一区二区三区| 国产美女在线观看一区| 亚洲午夜av在线| 中文字幕成人在线观看| 欧美一区二区三区日韩| 99re亚洲国产精品| 精品一区二区三区视频在线观看| 一区二区三区加勒比av| 久久久www成人免费无遮挡大片| 欧美中文字幕久久| 成人免费看黄yyy456| 久久aⅴ国产欧美74aaa| 亚洲国产综合人成综合网站| 亚洲国产精品传媒在线观看| 精品日韩一区二区三区免费视频| 在线观看成人小视频| 波多野结衣在线一区| 激情综合亚洲精品| 蜜臀精品一区二区三区在线观看 | 欧美成人三级电影在线| 色综合中文字幕| 成人一道本在线| 精品一区二区三区av| 日韩精品一级二级 | 97精品久久久久中文字幕 | 日韩一区二区视频| 色婷婷综合久久久| 99riav久久精品riav| 国产成人福利片| 国产一区二区三区四| 免费人成在线不卡| 日韩电影在线一区二区三区| 亚洲大片免费看| 亚洲综合色噜噜狠狠| 亚洲女子a中天字幕| 国产精品国产三级国产aⅴ入口| 国产免费成人在线视频| 国产亚洲一区二区三区四区 | 久久久国产精品午夜一区ai换脸| 欧美一级黄色录像| 日韩欧美国产小视频| 日韩三级精品电影久久久| 欧美一区二区女人| 91精品国产一区二区| 在线播放中文字幕一区| 欧美一区二区三区的| 欧美va亚洲va香蕉在线| 精品国产污网站| 中文字幕av免费专区久久| 欧美高清在线精品一区| 综合久久一区二区三区| 亚洲免费av高清| 午夜精品福利久久久| 美女看a上一区| 国产精品自拍三区| www.欧美.com| 欧美日韩国产精选| 欧美大度的电影原声| 久久久久久久久久久久久夜| 国产精品全国免费观看高清| 亚洲欧美影音先锋| 亚洲不卡在线观看| 精品在线免费视频| 成人免费毛片高清视频| 91成人在线免费观看| 欧美一二三区在线| 欧美韩日一区二区三区四区| 日韩毛片视频在线看| 亚洲午夜视频在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 国产麻豆精品一区二区| 99国产精品视频免费观看| 欧美日韩一区二区三区不卡| 精品国产免费久久 | 99视频一区二区| 欧美午夜一区二区三区| 精品国免费一区二区三区| ...中文天堂在线一区| 肉丝袜脚交视频一区二区| 国产成a人亚洲| 91.com在线观看| 国产精品视频一区二区三区不卡| 亚洲高清视频的网址| 国产精品亚洲人在线观看| 欧美日韩高清一区| 国产欧美视频一区二区| 日日摸夜夜添夜夜添国产精品| 国产成a人无v码亚洲福利| 欧美日本在线播放| 欧美经典一区二区三区| 日韩av中文字幕一区二区| 一本久久a久久精品亚洲| 日韩精品综合一本久道在线视频| 亚洲欧美自拍偷拍| 国产一区二区0| 欧美一区二区三区喷汁尤物| 自拍偷在线精品自拍偷无码专区 | 欧美精品精品一区| 专区另类欧美日韩| 极品少妇一区二区三区精品视频| 日韩一级视频免费观看在线| 国产精品久久久久9999吃药| 九色综合狠狠综合久久| 欧美日韩美女一区二区| 亚洲激情图片一区| 成人aaaa免费全部观看| 精品欧美乱码久久久久久| 午夜成人免费电影| 色狠狠桃花综合| 中文字幕一区日韩精品欧美| 国产精品系列在线观看| 欧美成人a在线| 麻豆91免费观看| 欧美精品乱码久久久久久| 亚洲综合一二三区| 欧美专区日韩专区| 一区二区三区自拍| 91福利精品第一导航| 一区二区免费看| 91久久精品日日躁夜夜躁欧美|