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

📄 gsmdecoder.java

📁 java处理声音文件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	{		return (x<MIN_WORD ? MIN_WORD : (x>MAX_WORD?MAX_WORD: x));	}	private final static int sub(int a, int b)	{		int diff = a - b;		return saturate(diff);	}	private final static int add(int a, int b)	{		int sum = a + b;		return saturate(sum);	}	private final static int asl(int a, int n)	{		if (n>= 16) return 0;		if (n<= -16) return (a<0?-1:0);		if (n<0) return asr(a,-n);		return (a << n);	}	private final static int asr(int a, int n)	{		if (n>=16) return (a<0?-1:0);		if (n<=-16) return 0;		if (n<0) return (a<<-n);//&0xffff;		return (a>>n);	}	private final static int mult_r(int a, int b)	{		if (b == MIN_WORD && a == MIN_WORD) 			return MAX_WORD;		else		{			int prod = a * b + 16384;			//prod >>= 15;			return saturate(prod>>15);//&0xffff;			//return (prod & 0xffff);		}	}	private final void longTermSynthesisFiltering(int Ncr,						      int bcr,						      int erp[],						      int dp0[])	{		int ltmp;		int k;		int brp, drpp, Nr;		Nr = Ncr < 40 || Ncr > 120 ? nrp : Ncr;		nrp = Nr;		brp = QLB[bcr];		for (k=0;k<=39;k++) {			drpp = mult_r(brp,dp0[120+(k-Nr)]);			dp0[120+k] = add(erp[k],drpp);		}		for (k=0;k<=119;k++) dp0[k]=dp0[40+k];	}	private final int[] shortTermSynthesisFilter(int LARcr[],						     int wt[])	{		//print("wt",wt);    		int LARpp_j[] = LARpp[j];		int LARpp_j_1[] = LARpp[j^=1];		int LARp[] = new int[8];		int s[] = new int[160];		decodingOfTheCodedLogAreaRatios(LARcr,LARpp_j);		//print("LARpp_j",LARpp_j);    		Coefficients_0_12(LARpp_j_1,LARpp_j,LARp);		LARp_to_rp(LARp);		shortTermSynthesisFiltering(LARp,13,wt,s,0);		Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);		LARp_to_rp( LARp );		shortTermSynthesisFiltering( LARp, 14, wt, s, 13);		Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);		LARp_to_rp( LARp );		shortTermSynthesisFiltering( LARp, 13, wt, s, 27 );		Coefficients_40_159( LARpp_j, LARp );		LARp_to_rp( LARp );		shortTermSynthesisFiltering( LARp, 120, wt, s, 40);		return s;	}	public final static void decodingOfTheCodedLogAreaRatios(int LARc[],								 int LARpp[])	{		int temp1;		int ltmp;		// STEP(      0,  -32,  13107 );		temp1 = (add(LARc[0],-32)<<10);		//temp1 = (sub(temp1, 0));		temp1 = (mult_r(13107,temp1));		LARpp[0] = (add(temp1, temp1));		//         STEP(      0,  -32,  13107 );		temp1 = (add(LARc[1],-32)<<10);		//temp1 = (sub(temp1, 0));		temp1 = (mult_r(13107,temp1));		LARpp[1] = (add(temp1, temp1));    		//         STEP(   2048,  -16,  13107 );		temp1 = (add(LARc[2],-16)<<10);		temp1 = (sub(temp1, 4096));		temp1 = (mult_r(13107,temp1));		LARpp[2] = (add(temp1, temp1));		//         STEP(  -2560,  -16,  13107 );    		temp1 = (add(LARc[3],(-16))<<10);		temp1 = (sub(temp1, -5120));		temp1 = (mult_r(13107,temp1));		LARpp[3] = (add(temp1, temp1));		//         STEP(     94,   -8,  19223 );		temp1 = (add(LARc[4],-8)<<10);		temp1 = (sub(temp1, 188));		temp1 = (mult_r(19223,temp1));		LARpp[4] = (add(temp1, temp1));		//         STEP(  -1792,   -8,  17476 );		temp1 = (add(LARc[5],(-8))<<10);		temp1 = (sub(temp1, -3584));		temp1 = (mult_r(17476,temp1));		LARpp[5] = (add(temp1, temp1));		//         STEP(   -341,   -4,  31454 );		temp1 = (add(LARc[6],(-4))<<10);		temp1 = (sub(temp1, -682));		temp1 = (mult_r(31454,temp1));		LARpp[6] = (add(temp1, temp1));		//         STEP(  -1144,   -4,  29708 );    		temp1 = (add(LARc[7],-4)<<10);		temp1 = (sub(temp1, -2288));		temp1 = (mult_r(29708,temp1));		LARpp[7] = (add(temp1, temp1));	}	private final static void Coefficients_0_12(int LARpp_j_1[],						    int LARpp_j[],						    int LARp[])	{		int i;		int ltmp;    		for(i=0;i<8;i++)		{			LARp[i] = add((LARpp_j_1[i]>>2),(LARpp_j[i]>>2));			LARp[i] = add(LARp[i],(LARpp_j_1[i]>>1));		}	}	private final static void Coefficients_13_26(int LARpp_j_1[],						     int LARpp_j[],						     int LARp[])	{		int i;		int ltmp;    		for(i=0;i<8;i++)		{			LARp[i] = add((LARpp_j_1[i]>>1),(LARpp_j[i]>>1));		}	}	private final static void Coefficients_27_39(int LARpp_j_1[],						     int LARpp_j[],						     int LARp[])	{		int i;		int ltmp;    		for(i=0;i<8;i++)		{			LARp[i] = add((LARpp_j_1[i]>>2),(LARpp_j[i]>>2));			LARp[i] = add(LARp[i],(LARpp_j[i]>>1));		}	}  	private final static void Coefficients_40_159(int LARpp_j[],						      int LARp[])	{		int i;		int ltmp;    		for(i=0;i<8;i++)		{			LARp[i] = LARpp_j[i];		}	}	private final static void LARp_to_rp(int LARp[])	{		int i;		int temp;		for(i=0;i<8;i++)		{			if(LARp[i]<0)			{				temp = ((LARp[i]==MIN_WORD)?MAX_WORD:-LARp[i]);				LARp[i] = (- ((temp < 11059) ? temp << 1					      : ((temp < 20070) ? temp + 11059						 : add((temp>>2),26112))));			}			else			{				temp = LARp[i];				LARp[i] = ((temp<11059)?temp<<1					   : ((temp<20070)?temp+11059					      :add((temp>>2),26112)));			}		}	}	//      shortTermSynthesisFiltering(LARp,13,wt,s,0);	private final void shortTermSynthesisFiltering(int rrp[],						       int k,						       int wt[],						       int sr[],						       int off)	{		int i;		int sri, tmp1, tmp2;		int woff = off;		int soff = off;		while (k-->0)		{			sri = wt[woff++];			for (i=8;i-->0;)			{				tmp1 = rrp[i];				tmp2 = v[i];				tmp2 = ((tmp1==MIN_WORD && tmp2 == MIN_WORD					 ? MAX_WORD					 : saturate((tmp1*tmp2 + 16384)>>15)));				sri = sub(sri,tmp2);				tmp1 = ((tmp1 == MIN_WORD && sri == MIN_WORD					 ? MAX_WORD					 : saturate( (tmp1 *sri+16384) >>15)));				v[i+1]=add(v[i],tmp1);			}			sr[soff++] = v[0] = sri;		}	}	private final void postprocessing(int s[])	{		int k,soff=0;		int tmp;		for(k=160;k-->0;soff++)		{			tmp = mult_r(msr,(28180));			msr = add(s[soff],tmp);			//s[soff]=(add(msr,msr) & 0xfff8);			s[soff]=saturate(add(msr,msr) & ~0x7);		}	}	private final static void RPE_grid_positioning(int Mc,						       int xMp[],						       int ep[])	{		int i = 13;    		int epo = 0;		int po = 0;		switch(Mc)		{		case 3: ep[epo++] = 0;		case 2: ep[epo++] = 0;		case 1: ep[epo++] = 0;		case 0: ep[epo++] = xMp[po++];			i--;		};    		do		{			ep[epo++] = 0;			ep[epo++] = 0;			ep[epo++] = xMp[po++];		}		while (--i>0);		while (++Mc < 4)		{			ep[epo++] = 0;		}	}}/*** GSMDecoder.java ***/

⌨️ 快捷键说明

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