⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hvxcenc.c

📁 语音压缩算法
💻 C
📖 第 1 页 / 共 2 页
字号:
float		*mfdpch,IdAm		*idAm){    int		i, m;    float	arysres[SAMPLE];    static float	arys[FRM];    static float	arysRaw[2][SAMPLE];    static float	alpha[LPCORDER];    static float	rawLsp[LPCORDER];    static float	qLsp[LPCORDER];    static float	ringBuffer[SAMPLE];    float	pitchOL;    float       r0h;    float	rms[SAMPLE], am[SAMPLE/2][3];    float       *dumLSF = NULL;    float	*dummyHarm = NULL;    int		idAmS[2], idAmG, bitNum;    int		idAm4k[4];    int		idCelpSL0[N_SFRM_L0], idCelpGL0[N_SFRM_L0];    int		idCelpSL1[N_SFRM_L1], idCelpGL1[N_SFRM_L1];    float	per_wt[129];    float	frmPwr;    static float	r0r[3];    static int	frm = 0;    static int	normMode = 0;    static int	offset = -48;    int		tmpIdVUV;    static int prevVUV = 0;	/* AI 990322 */    if(frm == 0)    {	for(i = 0; i < FRM; i++)	{	    arys[i] = 0.0;	}	if(ipc_encDelayMode == DM_LONG)	{	    for(i = 0; i < SAMPLE; i++)	    {		arysRaw[0][i] = 0.0;		arysRaw[1][i] = 0.0;	    }	}	else	{	    for(i = 0; i < SAMPLE; i++)	    {		arysRaw[0][i] = 0.0;	    }	}	for(i = 0; i < SAMPLE; i++)	{	    ringBuffer[i] = 0.0;	}    }    if(ipc_encDelayMode == DM_LONG)    {	for(m = 0; m < SAMPLE; m++)	{	    arysRaw[0][m] = arysRaw[1][m];	}    }    for(i = 0; i < FRM; i++)    {	ringBuffer[(frm * FRM + i) % SAMPLE] = (float) frmBuf[i];    }        if(ipc_encDelayMode == DM_LONG)    {	for(m = 0; m < SAMPLE; m++)	{	    arysRaw[1][m] =		ringBuffer[(m + frm * FRM - OVERLAP + SAMPLE) % SAMPLE];	}    }    else    {	for(m = 0; m < SAMPLE; m++)	{	    arysRaw[0][m] =		ringBuffer[(m + frm * FRM - OVERLAP + SAMPLE) % SAMPLE];	}    }	    if(ipc_bitstreamMode == BM_VARIABLE)    {        if(ipc_encDelayMode == DM_LONG)        {#if 1	    pitch_estimation(arysRaw[1], r0r, prevVUV, &pitchOL, &r0h);	/* AI 990324 */#else	    pitch_estimation(arysRaw[1], r0r, *idVUV, &pitchOL, &r0h); #endif        }        else        {#if 1	    pitch_estimation(arysRaw[0], r0r, prevVUV, &pitchOL, &r0h);	/* AI 990324 */#else	    pitch_estimation(arysRaw[0], r0r, *idVUV, &pitchOL, &r0h); #endif        }        HvxcVUVDecisionVR(arysRaw[0], pitchOL, r0r, r0h, idVUV);        IPC_NormalizationVR(arysRaw[0], arys, arysres, &frmPwr, alpha, rawLsp,                          qLsp, idLsp, &offset, *idVUV);        harm_srew(frmPwr, arysres, 256, offset, pitchOL, mfdpch, am, rms,	          dummyHarm, &normMode);    }    else    {        IPC_Normalization(arysRaw[0], arys, arysres, &frmPwr, alpha, rawLsp,		          qLsp, idLsp, &offset);        if(ipc_encDelayMode == DM_LONG)        {#if 1	    pitch_estimation(arysRaw[1], r0r, prevVUV, &pitchOL, &r0h);	/* AI 990324 */#else	    pitch_estimation(arysRaw[1], r0r, *idVUV, &pitchOL, &r0h); #endif        }        else        {#if 1	    pitch_estimation(arysRaw[0], r0r, prevVUV, &pitchOL, &r0h);	/* AI 990324 */#else	    pitch_estimation(arysRaw[0], r0r, *idVUV, &pitchOL, &r0h);#endif        }        harm_srew(frmPwr, arysres, 256, offset, pitchOL, mfdpch, am, rms,	          dummyHarm, &normMode);        vuv_decision(arysRaw[0], mfdpch, am, rms, r0r, idVUV, r0h);	    }        prevVUV = *idVUV;	/* AI 990324 */        td_encoder(arys, rawLsp, qLsp, *idVUV, idCelpSL0, idCelpGL0,	       idCelpSL1, idCelpGL1);    for(i = 0; i < 2; i++)    {	idCelp->idSL0[i] = idCelpSL0[i];	idCelp->idGL0[i] = idCelpGL0[i];    }        if(ipc_encMode == ENC4K)    {	for(i = 0; i < N_SFRM_L1; i++)	{	    idCelp->idSL1[i] = idCelpSL1[i];	    idCelp->idGL1[i] = idCelpGL1[i];	}    }        percep_weight_alpha(alpha, per_wt);    if(ipc_bitstreamMode == BM_VARIABLE)    {        if(*idVUV == 1)        {            tmpIdVUV = 0;        }        else        {            tmpIdVUV = *idVUV;        }        harm_quant(am, mfdpch, per_wt, dumLSF, normMode, tmpIdVUV, idAmS,	           &bitNum, &idAmG, idAm4k);    }    else    {        harm_quant(am, mfdpch, per_wt, dumLSF, normMode, *idVUV, idAmS,	           &bitNum, &idAmG, idAm4k);    }    idAm->idS0 = idAmS[0];      idAm->idS1 = idAmS[1];     idAm->idG = idAmG;       if(ipc_encMode == ENC4K)    {	idAm->id4kS0 = idAm4k[0];	idAm->id4kS1 = idAm4k[1];	idAm->id4kS2 = idAm4k[2];	idAm->id4kS3 = idAm4k[3];    }        frm++;}void PackBitsChar(char *encBitChar, int *ptr, int param, int nbit){    int     i;        for(i = 0; i < nbit; i++)    {	if(param & (0x01 << (nbit - i - 1)))	{	    encBitChar[*ptr] = '1';	}	else	{	    encBitChar[*ptr] = '0';	}	(*ptr)++;    }}static void Prm2Bit(EncPrm *encPrm, unsigned char *encBit){    char	encBitChar[80]; /* for 4kbps one frame */    int		i, j;    int		ptr = 0;    PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[0],         PAN_BIT_LSP18_0);    PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[1],         PAN_BIT_LSP18_1);    PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[2],         PAN_BIT_LSP18_2);    PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[3],         PAN_BIT_LSP18_3);    PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[4],         PAN_BIT_LSP18_4);    PackBitsChar(encBitChar, &ptr, encPrm->vuvFlag, 2);    if(encPrm->vuvFlag == 0)    {	for(i = 0; i < N_SFRM_L0; i++)	{	    PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idUV.idSL0[i], 6);	    PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idUV.idGL0[i], 4);	}    }    else    {	PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.pchcode, 7);	PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.idS0, 4);	PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.idS1, 4);	PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.idG, 5);    }    for(i = 0; i < 5; i++)    {	encBit[i] = 0;	for(j = 0; j < 8; j++)	{	    if(encBitChar[i * 8 + j] == '1')	    {		encBit[i] |= 0x01 << (8 - j - 1);	    }	}    }    if(ipc_encMode == ENC4K)    {	PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[5], 8);		if(encPrm->vuvFlag == 0)	{	    for(i = 0; i < N_SFRM_L1; i++)	    {		PackBitsChar(encBitChar, &ptr,			     encPrm->vuvPrm.idUV.idSL1[i], 5);		PackBitsChar(encBitChar, &ptr,			     encPrm->vuvPrm.idUV.idGL1[i], 3);	    }	}	else	{	    PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.id4kS0, 7);	    PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.id4kS1, 10);	    PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.id4kS2, 9);	    PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.id4kS3, 6);	}		for(i = 5; i < 10; i++)	{	    encBit[i] = 0;	    for(j = 0; j < 8; j++)	    {		if(encBitChar[i * 8 + j] == '1')		{		    encBit[i] |= 0x01 << (8 - j - 1);		}	    }	}    }}static void Prm2BitVR(EncPrm *encPrm, unsigned char *encBit){    char        encBitChar[80]; /* for 4kbps one frame */    int         i, j;    int         ptr = 0;    for(i = 0; i < 80; i++)    {        encBitChar[i] = 0;    }    PackBitsChar(encBitChar, &ptr, encPrm->vuvFlag, 2);    if(encPrm->vuvFlag != 1)    {        PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[0],                     PAN_BIT_LSP18_0);        PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[1],                     PAN_BIT_LSP18_1);        PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[2],                     PAN_BIT_LSP18_2);        PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[3],                     PAN_BIT_LSP18_3);        PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[4],                     PAN_BIT_LSP18_4);        if(encPrm->vuvFlag == 0)        {            for(i = 0; i < N_SFRM_L0; i++)            {                PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idUV.idGL0[i], 4);            }        }        else        {            PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.pchcode, 7);            PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.idS0, 4);            PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.idS1, 4);            PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.idG, 5);        }    }    for(i = 0; i < 5; i++)    {        encBit[i] = 0;        for(j = 0; j < 8; j++)        {            if(encBitChar[i * 8 + j] == '1')            {                encBit[i] |= 0x01 << (8 - j - 1);            }        }    }    if(ipc_encMode == ENC4K)    {        if(encPrm->vuvFlag != 1)        {            PackBitsChar(encBitChar, &ptr, encPrm->idLsp.nVq[5], 8);            if(encPrm->vuvFlag == 0)            {                for(i = 0; i < N_SFRM_L1; i++)                {                    PackBitsChar(encBitChar, &ptr,                                 encPrm->vuvPrm.idUV.idSL1[i], 5);                    PackBitsChar(encBitChar, &ptr,                                 encPrm->vuvPrm.idUV.idGL1[i], 3);                }            }            else            {                PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.id4kS0, 7);                PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.id4kS1, 10);                PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.id4kS2, 9);                PackBitsChar(encBitChar, &ptr, encPrm->vuvPrm.idV.id4kS3, 6);            }        }        for(i = 5; i < 10; i++)        {            encBit[i] = 0;            for(j = 0; j < 8; j++)            {                if(encBitChar[i * 8 + j] == '1')                {                    encBit[i] |= 0x01 << (8 - j - 1);                }            }        }    }}void IPC_PackPrm2Bit(IdLsp		*idLsp,int		idVUV,IdCelp		*idCelp,float		pitch,IdAm		*idAm,unsigned char	*encBit){    int		i;    static int	frm = 0;    static EncPrm	encPrm;    for(i = 0; i < L_VQ - 1; i++)    {	encPrm.idLsp.nVq[i] = idLsp->nVq[i];    }        encPrm.vuvFlag = idVUV;    if(idVUV == 0)    {	for(i = 0; i < N_SFRM_L0; i++)	{	    encPrm.vuvPrm.idUV.idSL0[i] = idCelp->idSL0[i];	    encPrm.vuvPrm.idUV.idGL0[i] = idCelp->idGL0[i];	}    }    else    {	encPrm.vuvPrm.idV.pchcode = (int) (pitch - 20.0);	encPrm.vuvPrm.idV.idS0 = idAm->idS0;	encPrm.vuvPrm.idV.idS1 = idAm->idS1;	encPrm.vuvPrm.idV.idG = idAm->idG;    }        if(ipc_encMode == ENC4K)    {	encPrm.idLsp.nVq[L_VQ - 1] = idLsp->nVq[L_VQ - 1];	    	if(idVUV == 0)	{	    for(i = 0; i < N_SFRM_L1; i++)	    {		encPrm.vuvPrm.idUV.idSL1[i] = idCelp->idSL1[i];		encPrm.vuvPrm.idUV.idGL1[i] = idCelp->idGL1[i];	    }	}	else	{	    encPrm.vuvPrm.idV.id4kS0 = idAm->id4kS0;	    encPrm.vuvPrm.idV.id4kS1 = idAm->id4kS1;	    encPrm.vuvPrm.idV.id4kS2 = idAm->id4kS2;	    encPrm.vuvPrm.idV.id4kS3 = idAm->id4kS3;	}    }    {        if(ipc_bitstreamMode == BM_VARIABLE)        {	    Prm2BitVR(&encPrm, encBit);        }        else        {            Prm2Bit(&encPrm, encBit);        }    }        frm++;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -