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

📄 layeriiidecoder.java

📁 JLayer is a library that decodes/plays/converts MPEG 1/2/2.5 Layer 1/2/3 (i.e. MP3) in real time fo
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	                           i_stereo_k_values(is_pos[i], io_type, i);
	                        else
	                        	is_ratio[i] = TAN12[is_pos[i]];

								i++;
							} // for (; sb>0...
							sfb++;
						} // while (sfb < 12)
						sfb = sfBandIndex[sfreq].s[10];
	               sb  = sfBandIndex[sfreq].s[11] - sfb;
	               sfb = (sfb << 2) - sfb + j * sb;
	               temp  = sfBandIndex[sfreq].s[11];
	               sb = sfBandIndex[sfreq].s[12] - temp;
	               i = (temp << 2) - temp + j * sb;

						for (; sb > 0; sb--) {
	               	is_pos[i] = is_pos[sfb];

			            if (lsf) {
			               k[0][i] = k[0][sfb];
					         k[1][i] = k[1][sfb];
			            } else {
	     						is_ratio[i] = is_ratio[sfb];
	                  }
							i++;
						} // for (; sb > 0 ...
					 }
					 if (max_sfb <= 3) {
	                i = 2;
						 ss = 17;
						 sb = -1;
						 while (i >= 0) {
	                	if (ro[1][i][ss] != 0.0f) {
	                   	 sb = (i<<4) + (i<<1) + ss;
								 i = -1;
							} else {
	                      ss--;
								 if (ss < 0) {
	                         i--;
									 ss = 17;
								 }
							} // if (ro ...
						 } // while (i>=0)
						 i = 0;
						 while (sfBandIndex[sfreq].l[i] <= sb)
							 i++;
						 sfb = i;
						 i = sfBandIndex[sfreq].l[i];
						 for (; sfb<8; sfb++) {
	                   sb = sfBandIndex[sfreq].l[sfb+1]-sfBandIndex[sfreq].l[sfb];
							 for (; sb>0; sb--) {
	                      is_pos[i] = scalefac[1].l[sfb];
	                   	 if (is_pos[i] != 7)
		                      if (lsf)
	                           i_stereo_k_values(is_pos[i], io_type, i);
	                         else
	                        	is_ratio[i] = TAN12[is_pos[i]];
								 i++;
							 } // for (; sb>0 ...
						 } // for (; sfb<8 ...
					 } // for (j=0 ...
				} else { // if (gr_info.mixed_block_flag)
	         	for (int j=0; j<3; j++) {
	            	int sfbcnt;
						sfbcnt = -1;
						for( sfb=12; sfb >=0; sfb-- )
						{
							temp = sfBandIndex[sfreq].s[sfb];
	                  lines = sfBandIndex[sfreq].s[sfb+1] - temp;
	                  i = (temp << 2) - temp + (j+1) * lines - 1;

							while (lines > 0) {
								if (ro[1][i/18][i%18] != 0.0f) {
								// MDM: in java, array access is very slow.
								// Is quicker to compute div and mod values.
								//if (ro[1][ss_div[i]][ss_mod[i]] != 0.0f) {
	                     	sfbcnt = sfb;
									sfb = -10;
									lines = -10;
								}
								lines--;
								i--;
							} // while (lines > 0) */

						} // for (sfb=12 ...
						sfb = sfbcnt + 1;
						while(sfb<12) {
							temp = sfBandIndex[sfreq].s[sfb];
	                  sb   = sfBandIndex[sfreq].s[sfb+1] - temp;
	                  i    = (temp << 2) - temp + j * sb;
							for ( ; sb > 0; sb--) {
	                  	is_pos[i] = scalefac[1].s[j][sfb];
								if (is_pos[i] != 7)
		                      if (lsf)
	                           i_stereo_k_values(is_pos[i], io_type, i);
	                         else
	                        	is_ratio[i] = TAN12[is_pos[i]];
								i++;
							} // for (; sb>0 ...
							sfb++;
						} // while (sfb<12)

						temp = sfBandIndex[sfreq].s[10];
	               temp2= sfBandIndex[sfreq].s[11];
	               sb   = temp2 - temp;
	               sfb  = (temp << 2) - temp + j * sb;
	               sb   = sfBandIndex[sfreq].s[12] - temp2;
	               i    = (temp2 << 2) - temp2 + j * sb;

						for (; sb>0; sb--) {
	               	is_pos[i] = is_pos[sfb];

			            if (lsf) {
			               k[0][i] = k[0][sfb];
					         k[1][i] = k[1][sfb];
	      		      } else {
	               		is_ratio[i] = is_ratio[sfb];
	                  }
							i++;
						} // for (; sb>0 ...
					} // for (sfb=12
				} // for (j=0 ...
			} else { // if (gr_info.window_switching_flag ...
	      	i = 31;
				ss = 17;
				sb = 0;
				while (i >= 0) {
	         	if (ro[1][i][ss] != 0.0f) {
	            	sb = (i<<4) + (i<<1) + ss;
						i = -1;
					} else {
	            	ss--;
						if (ss < 0) {
	               	i--;
							ss = 17;
						}
					}
				}
				i = 0;
				while (sfBandIndex[sfreq].l[i] <= sb)
					i++;

				sfb = i;
				i = sfBandIndex[sfreq].l[i];
				for (; sfb<21; sfb++) {
	         	sb = sfBandIndex[sfreq].l[sfb+1] - sfBandIndex[sfreq].l[sfb];
	         	for (; sb > 0; sb--) {
	            	is_pos[i] = scalefac[1].l[sfb];
						if (is_pos[i] != 7)
	                  if (lsf)
	                     i_stereo_k_values(is_pos[i], io_type, i);
	                  else
	                   	is_ratio[i] = TAN12[is_pos[i]];
						i++;
					}
				}
				sfb = sfBandIndex[sfreq].l[20];
				for (sb = 576 - sfBandIndex[sfreq].l[21]; (sb > 0) && (i<576); sb--)
				{
	         	is_pos[i] = is_pos[sfb]; // error here : i >=576

	            if (lsf) {
	               k[0][i] = k[0][sfb];
			         k[1][i] = k[1][sfb];
	            } else {
	  					is_ratio[i] = is_ratio[sfb];
	            }
					i++;
				} // if (gr_info.mixed_block_flag)
			} // if (gr_info.window_switching_flag ...
		} // if (i_stereo)

	   	i = 0;
			for(sb=0;sb<SBLIMIT;sb++)
				for(ss=0;ss<SSLIMIT;ss++) {
					if (is_pos[i] == 7) {
						if (ms_stereo) {
							lr[0][sb][ss] = (ro[0][sb][ss]+ro[1][sb][ss]) * 0.707106781f;
							lr[1][sb][ss] = (ro[0][sb][ss]-ro[1][sb][ss]) * 0.707106781f;
						} else {
							lr[0][sb][ss] = ro[0][sb][ss];
							lr[1][sb][ss] = ro[1][sb][ss];
						}
					}
					else if (i_stereo) {

	            	if (lsf) {
	                  lr[0][sb][ss] = ro[0][sb][ss] * k[0][i];
	                  lr[1][sb][ss] = ro[0][sb][ss] * k[1][i];
	               } else {
	               	lr[1][sb][ss] = ro[0][sb][ss] / (float) (1 + is_ratio[i]);
		  				   lr[0][sb][ss] = lr[1][sb][ss] * is_ratio[i];
	               }
					}
	/*				else {
						System.out.println("Error in stereo processing\n");
					} */
	            i++;
				}

    	} // channels == 2

	}

    /**
	 *
	 */
	private void antialias(int ch, int gr)
	{
	   int sb18, ss, sb18lim;
	   gr_info_s gr_info = (si.ch[ch].gr[gr]);
	   // 31 alias-reduction operations between each pair of sub-bands
	   // with 8 butterflies between each pair

		if  ((gr_info.window_switching_flag !=0) && (gr_info.block_type == 2) &&
			 !(gr_info.mixed_block_flag != 0) )
	       return;

		if ((gr_info.window_switching_flag !=0) && (gr_info.mixed_block_flag != 0)&&
		    (gr_info.block_type == 2)) {
	      sb18lim = 18;
		} else {
			sb18lim = 558;
	   }

	   for (sb18=0; sb18 < sb18lim; sb18+=18) {
	      for (ss=0;ss<8;ss++) {
	      	int src_idx1 = sb18 + 17 - ss;
	         int src_idx2 = sb18 + 18 + ss;
	      	float bu = out_1d[src_idx1];
				float bd = out_1d[src_idx2];
				out_1d[src_idx1] = (bu * cs[ss]) - (bd * ca[ss]);
				out_1d[src_idx2] = (bd * cs[ss]) + (bu * ca[ss]);
	      }
   	  }
	}

	/**
	 *
	 */

	// MDM: tsOutCopy and rawout do not need initializing, so the arrays
	// can be reused.
	float[] tsOutCopy = new float[18];
	float[] rawout = new float[36];

	private void hybrid(int ch, int gr)
	{
	   int bt;
	   int sb18;
	   gr_info_s gr_info = (si.ch[ch].gr[gr]);
	   float[] tsOut;

	   float[][] prvblk;

	   for(sb18=0;sb18<576;sb18+=18)
	   {
			bt = ((gr_info.window_switching_flag !=0 ) && (gr_info.mixed_block_flag !=0) &&
					 (sb18 < 36)) ? 0 : gr_info.block_type;

		   tsOut = out_1d;
	       // Modif E.B 02/22/99
	       for (int cc = 0;cc<18;cc++)
			   tsOutCopy[cc] = tsOut[cc+sb18];

		   inv_mdct(tsOutCopy, rawout, bt);


		   for (int cc = 0;cc<18;cc++)
			   tsOut[cc+sb18] = tsOutCopy[cc];
		   // Fin Modif

			// overlap addition
		   prvblk = prevblck;

		   tsOut[0 + sb18]   = rawout[0]  + prvblk[ch][sb18 + 0];
		   prvblk[ch][sb18 + 0]  = rawout[18];
		   tsOut[1 + sb18]   = rawout[1]  + prvblk[ch][sb18 + 1];
		   prvblk[ch][sb18 + 1]  = rawout[19];
		   tsOut[2 + sb18]   = rawout[2]  + prvblk[ch][sb18 + 2];
		   prvblk[ch][sb18 + 2]  = rawout[20];
		   tsOut[3 + sb18]   = rawout[3]  + prvblk[ch][sb18 + 3];
		   prvblk[ch][sb18 + 3]  = rawout[21];
		   tsOut[4 + sb18]   = rawout[4]  + prvblk[ch][sb18 + 4];
		   prvblk[ch][sb18 + 4]  = rawout[22];
		   tsOut[5 + sb18]   = rawout[5]  + prvblk[ch][sb18 + 5];
		   prvblk[ch][sb18 + 5]  = rawout[23];
		   tsOut[6 + sb18]   = rawout[6]  + prvblk[ch][sb18 + 6];
		   prvblk[ch][sb18 + 6]  = rawout[24];
		   tsOut[7 + sb18]   = rawout[7]  + prvblk[ch][sb18 + 7];
		   prvblk[ch][sb18 + 7]  = rawout[25];
		   tsOut[8 + sb18]   = rawout[8]  + prvblk[ch][sb18 + 8];
		   prvblk[ch][sb18 + 8]  = rawout[26];
		   tsOut[9 + sb18]   = rawout[9]  + prvblk[ch][sb18 + 9];
		   prvblk[ch][sb18 + 9]  = rawout[27];
	   	   tsOut[10 + sb18]  = rawout[10] + prvblk[ch][sb18 + 10];
	   	   prvblk[ch][sb18 + 10] = rawout[28];
	 	   tsOut[11 + sb18]  = rawout[11] + prvblk[ch][sb18 + 11];
	 	   prvblk[ch][sb18 + 11] = rawout[29];
	 	   tsOut[12 + sb18]  = rawout[12] + prvblk[ch][sb18 + 12];
	 	   prvblk[ch][sb18 + 12] = rawout[30];
	 	   tsOut[13 + sb18]  = rawout[13] + prvblk[ch][sb18 + 13];
	 	   prvblk[ch][sb18 + 13] = rawout[31];
	 	   tsOut[14 + sb18]  = rawout[14] + prvblk[ch][sb18 + 14];
	 	   prvblk[ch][sb18 + 14] = rawout[32];
	 	   tsOut[15 + sb18]  = rawout[15] + prvblk[ch][sb18 + 15];
	 	   prvblk[ch][sb18 + 15] = rawout[33];
	 	   tsOut[16 + sb18]  = rawout[16] + prvblk[ch][sb18 + 16];
	 	   prvblk[ch][sb18 + 16] = rawout[34];
	 	   tsOut[17 + sb18]  = rawout[17] + prvblk[ch][sb18 + 17];
	 	   prvblk[ch][sb18 + 17] = rawout[35];
   	  }
	}

    /**
	 *
	 */
	private void do_downmix()
	{
		for (int sb=0; sb<SSLIMIT; sb++) {
	   	for (int ss=0; ss<SSLIMIT; ss+=3) {
	      	lr[0][sb][ss]   = (lr[0][sb][ss]   + lr[1][sb][ss])   * 0.5f;
	      	lr[0][sb][ss+1] = (lr[0][sb][ss+1] + lr[1][sb][ss+1]) * 0.5f;
	      	lr[0][sb][ss+2] = (lr[0][sb][ss+2] + lr[1][sb][ss+2]) * 0.5f;
	      }
   		}
	}

	/**
	 * Fast INV_MDCT.
	 */

	public void inv_mdct(float[] in, float[] out, int block_type)
	{
		 float[] win_bt;
	     int   i;

		float tmpf_0, tmpf_1, tmpf_2, tmpf_3, tmpf_4, tmpf_5, tmpf_6, tmpf_7, tmpf_8, tmpf_9;
		float tmpf_10, tmpf_11, tmpf_12, tmpf_13, tmpf_14, tmpf_15, tmpf_16, tmpf_17;

		tmpf_0 = tmpf_1 = tmpf_2 = tmpf_3 = tmpf_4 = tmpf_5 = tmpf_6 = tmpf_7 = tmpf_8 = tmpf_9 =
		tmpf_10 = tmpf_11 = tmpf_12 = tmpf_13 = tmpf_14 = tmpf_15 = tmpf_16 = tmpf_17 = 0.0f;



		 if(block_type == 2)
		 {

	/*
	 *
	 *		Under MicrosoftVM 2922, This causes a GPF, or
	 *		At best, an ArrayIndexOutOfBoundsExceptin.
			for(int p=0;p<36;p+=9)
		   {
		   	  out[p]   = out[p+1] = out[p+2] = out[p+3] =
		      out[p+4] = out[p+5] = out[p+6] = out[p+7] =
		      out[p+8] = 0.0f;
		   }
	*/
			out[0] = 0.0f;
			out[1] = 0.0f;
			out[2] = 0.0f;
			out[3] = 0.0f;
			out[4] = 0.0f;
			out[5] = 0.0f;
			out[6] = 0.0f;
			out[7] = 0.0f;
			out[8] = 0.0f;
			out[9] = 0.0f;
			out[10] = 0.0f;
			out[11] = 0.0f;
			out[12] = 0.0f;
			out[13] = 0.0f;
			out[14] = 0.0f;
			out[15] = 0.0f;
			out[16] = 0.0f;
			out[17] = 0.0f;
			out[18] = 0.0f;
			out[19] = 0.0f;
			out[20] = 0.0f;
			out[21] = 0.0f;
			out[22] = 0.0f;
			out[23] = 0.0f;
			out[24] = 0.0f;
			out[25] = 0.0f;
			out[26] = 0.0f;
			out[27] = 0.0f;
			out[28] = 0.0f;
			out[29] = 0.0f;
			out[30] = 0.0f;
			out[31] = 0.0f;
			out[32] = 0.0f;
			out[33] = 0.0f;
			out[34] = 0.0f;
			out[35] = 0.0f;

	       int six_i = 0;

		   for(i=0;i<3;i++)

⌨️ 快捷键说明

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