📄 decodeld.dsp
字号:
AR=DM(Dec_subfr);
DM(prm_save)=I2;
AR=PASS AR,AX1=AR;
IF NE JUMP second_subframe;
AR=DM(I2,M1);
AY0=DM(bfi);
AR=AR+AY0;
DM(prm_save)=I2;
DM(bad_pitch)=AR;
IF NE JUMP picth_old;
AY0=PIT_MIN;
AY1=PIT_MAX;
MR1=DM(Dec_T0);
AR=DM(Dec_T0frac);
CALL Dec_lag3;
DM(Dec_T0)=MR1;
DM(Dec_oldT0)=MR1;
DM(Dec_T0frac)=AR;
JUMP subframe_comm;
picth_old: AR=PASS 0;
AY0=DM(Dec_oldT0);
DM(Dec_T0)=AY0;
DM(Dec_T0frac)=AR;
AR=AY0+1;
AY0=PIT_MAX;
NONE=AR-AY0;
IF GT AR=PASS AY0;
DM(Dec_oldT0)=AR;
JUMP subframe_comm;
second_subframe:
AR=DM(bfi);
AR=PASS AR;
IF NE JUMP lag_old;
AY0=PIT_MIN;
AY1=PIT_MAX;
MR1=DM(Dec_T0);
AR=DM(Dec_T0frac);
CALL Dec_lag3;
DM(Dec_T0)=MR1;
DM(Dec_oldT0)=MR1;
DM(Dec_T0frac)=AR;
JUMP subframe_comm;
lag_old: AR=PASS 0;
DM(Dec_T0frac)=AR;
AY0=DM(Dec_oldT0);
DM(Dec_T0)=AY0;
AR=AY0+1;
AY0=PIT_MAX;
NONE=AR-AY0;
IF GT AR=PASS AY0;
DM(Dec_oldT0)=AR;
subframe_comm:
/*-------------------------------------------------*
* - Find the adaptive codebook vector. *
*-------------------------------------------------*/
I1=DM(Dec_excit);
SR1=DM(Dec_T0);
CNTR=L_SUBFR;
SR0=DM(Dec_T0frac);
M3=DM(Dec_subfr);
MODIFY(I1,M3);
CALL Pred_lt_3;
/*-------------------------------------------------------*
* - Decode innovative codebook. *
* - Add the fixed-gain pitch contribution to Dec_code[] *
*-------------------------------------------------------*/
AR=DM(bfi);
AR=PASS AR;
IF EQ JUMP decode_celp;
I2=DM(prm_save);
MX0=DM(seed_fer);
CALL Random;
AY0=H#1FFF;
AR=AR AND AY0;
DM(I2,M1)=AR;
CALL Random;
AY0=H#000F;
AR=AR AND AY0;
DM(I2,M1)=AR;
DM(seed_fer)=MX0;
decode_celp: I1=^Dec_code;
I2=DM(prm_save);
MR1=DM(I2,M1);
MR0=DM(I2,M1);
DM(prm_save)=I2;
CALL Decode_ACELP;
AR=DM(Dec_sharp);
SR=ASHIFT AR BY 1(LO);
AX0=L_SUBFR;
AY0=DM(Dec_T0);
AR=AX0-AY0;
IF LE JUMP deco_gain;
M3 =AY0;
// CNTR=AR;
I2=^Dec_code;
I3=^Dec_code;
MODIFY(I2,M3);
CNTR=AR;
DO cal_code UNTIL CE;
MY0=DM(I3,M1);
MR=SR0 * MY0(SS),AY0=DM(I2,M0);
AR=MR1+AY0;
cal_code: DM(I2,M1)=AR;
deco_gain: I2=DM(prm_save);
SR0=DM(I2,M1);
DM(prm_save)=I2;
/*-------------------------------------------------*
* - Decode pitch and codebook gains. *
*-------------------------------------------------*/
I2=^Dec_code;
AR=DM(bfi);
SI=L_SUBFR;
MX1=DM(Dec_gaincode);
MX0=DM(Dec_gainpitch);
CALL Dec_gain;
DM(Dec_gainpitch)=AR;
DM(Dec_gaincode)=MR1;
/*-------------------------------------------------------------*
* - Update pitch sharpening with quantized Dec_gainpitch *
*-------------------------------------------------------------*/
AY0=SHARPMAX;
AF=AR-AY0,MY1=AR;
IF GT AR=PASS AY0;
AY0=SHARPMIN;
AF=AR-AY0,MY0=MR1;
IF LT AR=PASS AY0;
DM(Dec_sharp)=AR;
/*-------------------------------------------------------*
* - Find the total excitation. *
* - Find synthesis speech corresponding to Dec_excit[]. *
*-------------------------------------------------------*/
I3=^Dec_code;
I2=DM(Dec_excit);
// CNTR=L_SUBFR;
M3=DM(Dec_subfr);
MODIFY(I2,M3);
CNTR=L_SUBFR;
DO round_exc UNTIL CE;
/*-----Dec_excit[i] in Q0 Dec_gainpitch in Q14 ---*/
/*-----Dec_code[i] in Q13 gain_codeode in Q1 ---*/
AR=DM(I2,M0);
MR=AR * MY1(SS),AR=DM(I3,M1);
MR=MR+AR*MY0(SS);
SR=LSHIFT MR0 BY 1(LO);
SR=SR OR ASHIFT MR1 BY 1(HI);
AR=SR0+H#8000;
AR=SR1+C;
round_exc: DM(I2,M1)=AR;
AY0=0;
I2=DM(Dec_excit);
I0=DM(SynthDecode);
SI=L_SUBFR;
I3=^Dec_memsyn;
M3=DM(Dec_subfr);
I1=DM(Az_save);
MODIFY(I0,M3);
MODIFY(I2,M3);
CALL Syn_filt;
AR=PASS AR;
IF EQ JUMP copy_mem;
/*-----In case of overflow in the synthesis---------*/
/*-----Scale down vector Dec_excit[] and redo synthesis---*/
// CNTR=PIT_MAX+L_INTERPOL+L_FRAME;
I2=^Dec_oldexc;
CNTR=PIT_MAX+L_INTERPOL+L_FRAME;
DO back_old_exc1 UNTIL CE;
AR=DM(I2,M0);
SR=ASHIFT AR BY -2(LO);
back_old_exc1: DM(I2,M1)=SR0;
AY0=1;
I2=DM(Dec_excit);
I0=DM(SynthDecode);
SI=L_SUBFR;
I3=^Dec_memsyn;
I1=DM(Az_save);
M3=DM(Dec_subfr);
MODIFY(I0,M3);
MODIFY(I2,M3);
CALL Syn_filt;
JUMP Analfilt_next;
//copy_mem: CNTR=M;
copy_mem: I3=DM(SynthDecode);
M3=L_SUBFR-M;
MODIFY(I3,M3);
M3=DM(Dec_subfr);
MODIFY(I3,M3);
I2=^Dec_memsyn;
CNTR=M;
DO back_mem UNTIL CE;
AR=DM(I3,M1);
back_mem: DM(I2,M1)=AR;
Analfilt_next: M3=MP1;
AR=DM(Dec_T0);
I0=DM(T2_save);
DM(I0,M1)=AR;
I1=DM(Az_save);
I2=DM(prm_save);
MODIFY(I1,M3);
AY0=L_SUBFR;
AX0=DM(Dec_subfr);
AR=AX0+AY0;
AY0=L_FRAME;
NONE=AR-AY0;
IF LT JUMP Analfilt_loop;
/*--------------------------------*
* For G729b *
*--------------------------------*/
decode_comm: AR=DM(bfi);
AR=PASS AR;
IF NE JUMP Update_signal;
MR=0;
I2=DM(Dec_excit);
CNTR=L_FRAME;
DO mac_decode UNTIl CE;
SR0=DM(I2,M1);
mac_decode: IF NOT MV MR=MR+SR0*SR0(SS);
IF MV SAT MR;
AF=PASS 16;
SE=EXP MR1 (HI),AY0=MR0;
SE=EXP MR0 (LO);
AR=MR1 OR AY0,AX0=SE;
IF NE AR=PASS AX0;
AR=AR+AF;
DM(Dec_sh_sidsav)=AR;
SR=NORM MR0(LO);
SR=SR OR NORM MR1(HI);
AR=SR0+H#8000;
AR=SR1+C;
DM(Dec_sidsav)=AR;
/*--------------------------------------------------*
* Update signal for next frame. *
* -> shift to the left by L_FRAME Dec_excit[] *
*--------------------------------------------------*/
Update_signal: I2=^Dec_oldexc;
I3=^Dec_oldexc+L_FRAME;
CNTR=PIT_MAX+L_INTERPOL;
DO copy_exc UNTIL CE;
AR=DM(I3,M1);
copy_exc: DM(I2,M1)=AR;
/*------for G729b-----------------------*/
AR=DM(ftyp);
DM(past_ftyp)=AR;
RTS;
/************************************************************************/
.ENDMOD;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -