layeriiidecoder.java

来自「java mp3 player library. for play back m」· Java 代码 · 共 1,310 行 · 第 1/5 页

JAVA
1,310
字号
            48, 54, 60, 49, 55, 61, 50, 56, 62, 51, 57, 63, 52, 58, 64, 53,
            59, 65, 66, 72, 78, 67, 73, 79, 68, 74, 80, 69, 75, 81, 70, 76,
            82, 71, 77, 83, 84, 94, 104, 85, 95, 105, 86, 96, 106, 87, 97, 107,
            88, 98, 108, 89, 99, 109, 90, 100, 110, 91, 101, 111, 92, 102, 112, 93,
            103, 113, 114, 126, 138, 115, 127, 139, 116, 128, 140, 117, 129, 141, 118, 130,
            142, 119, 131, 143, 120, 132, 144, 121, 133, 145, 122, 134, 146, 123, 135, 147,
            124, 136, 148, 125, 137, 149, 150, 164, 178, 151, 165, 179, 152, 166, 180, 153,
            167, 181, 154, 168, 182, 155, 169, 183, 156, 170, 184, 157, 171, 185, 158, 172,
            186, 159, 173, 187, 160, 174, 188, 161, 175, 189, 162, 176, 190, 163, 177, 191,
            192, 208, 224, 193, 209, 225, 194, 210, 226, 195, 211, 227, 196, 212, 228, 197,
            213, 229, 198, 214, 230, 199, 215, 231, 200, 216, 232, 201, 217, 233, 202, 218,
            234, 203, 219, 235, 204, 220, 236, 205, 221, 237, 206, 222, 238, 207, 223, 239,
            240, 260, 280, 241, 261, 281, 242, 262, 282, 243, 263, 283, 244, 264, 284, 245,
            265, 285, 246, 266, 286, 247, 267, 287, 248, 268, 288, 249, 269, 289, 250, 270,
            290, 251, 271, 291, 252, 272, 292, 253, 273, 293, 254, 274, 294, 255, 275, 295,
            256, 276, 296, 257, 277, 297, 258, 278, 298, 259, 279, 299, 300, 326, 352, 301,
            327, 353, 302, 328, 354, 303, 329, 355, 304, 330, 356, 305, 331, 357, 306, 332,
            358, 307, 333, 359, 308, 334, 360, 309, 335, 361, 310, 336, 362, 311, 337, 363,
            312, 338, 364, 313, 339, 365, 314, 340, 366, 315, 341, 367, 316, 342, 368, 317,
            343, 369, 318, 344, 370, 319, 345, 371, 320, 346, 372, 321, 347, 373, 322, 348,
            374, 323, 349, 375, 324, 350, 376, 325, 351, 377, 378, 444, 510, 379, 445, 511,
            380, 446, 512, 381, 447, 513, 382, 448, 514, 383, 449, 515, 384, 450, 516, 385,
            451, 517, 386, 452, 518, 387, 453, 519, 388, 454, 520, 389, 455, 521, 390, 456,
            522, 391, 457, 523, 392, 458, 524, 393, 459, 525, 394, 460, 526, 395, 461, 527,
            396, 462, 528, 397, 463, 529, 398, 464, 530, 399, 465, 531, 400, 466, 532, 401,
            467, 533, 402, 468, 534, 403, 469, 535, 404, 470, 536, 405, 471, 537, 406, 472,
            538, 407, 473, 539, 408, 474, 540, 409, 475, 541, 410, 476, 542, 411, 477, 543,
            412, 478, 544, 413, 479, 545, 414, 480, 546, 415, 481, 547, 416, 482, 548, 417,
            483, 549, 418, 484, 550, 419, 485, 551, 420, 486, 552, 421, 487, 553, 422, 488,
            554, 423, 489, 555, 424, 490, 556, 425, 491, 557, 426, 492, 558, 427, 493, 559,
            428, 494, 560, 429, 495, 561, 430, 496, 562, 431, 497, 563, 432, 498, 564, 433,
            499, 565, 434, 500, 566, 435, 501, 567, 436, 502, 568, 437, 503, 569, 438, 504,
            570, 439, 505, 571, 440, 506, 572, 441, 507, 573, 442, 508, 574, 443, 509, 575},
            {0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11, 12, 16, 20, 13,
            17, 21, 14, 18, 22, 15, 19, 23, 24, 28, 32, 25, 29, 33, 26, 30,
            34, 27, 31, 35, 36, 40, 44, 37, 41, 45, 38, 42, 46, 39, 43, 47,
            48, 54, 60, 49, 55, 61, 50, 56, 62, 51, 57, 63, 52, 58, 64, 53,
            59, 65, 66, 74, 82, 67, 75, 83, 68, 76, 84, 69, 77, 85, 70, 78,
            86, 71, 79, 87, 72, 80, 88, 73, 81, 89, 90, 102, 114, 91, 103, 115,
            92, 104, 116, 93, 105, 117, 94, 106, 118, 95, 107, 119, 96, 108, 120, 97,
            109, 121, 98, 110, 122, 99, 111, 123, 100, 112, 124, 101, 113, 125, 126, 142,
            158, 127, 143, 159, 128, 144, 160, 129, 145, 161, 130, 146, 162, 131, 147, 163,
            132, 148, 164, 133, 149, 165, 134, 150, 166, 135, 151, 167, 136, 152, 168, 137,
            153, 169, 138, 154, 170, 139, 155, 171, 140, 156, 172, 141, 157, 173, 174, 194,
            214, 175, 195, 215, 176, 196, 216, 177, 197, 217, 178, 198, 218, 179, 199, 219,
            180, 200, 220, 181, 201, 221, 182, 202, 222, 183, 203, 223, 184, 204, 224, 185,
            205, 225, 186, 206, 226, 187, 207, 227, 188, 208, 228, 189, 209, 229, 190, 210,
            230, 191, 211, 231, 192, 212, 232, 193, 213, 233, 234, 260, 286, 235, 261, 287,
            236, 262, 288, 237, 263, 289, 238, 264, 290, 239, 265, 291, 240, 266, 292, 241,
            267, 293, 242, 268, 294, 243, 269, 295, 244, 270, 296, 245, 271, 297, 246, 272,
            298, 247, 273, 299, 248, 274, 300, 249, 275, 301, 250, 276, 302, 251, 277, 303,
            252, 278, 304, 253, 279, 305, 254, 280, 306, 255, 281, 307, 256, 282, 308, 257,
            283, 309, 258, 284, 310, 259, 285, 311, 312, 346, 380, 313, 347, 381, 314, 348,
            382, 315, 349, 383, 316, 350, 384, 317, 351, 385, 318, 352, 386, 319, 353, 387,
            320, 354, 388, 321, 355, 389, 322, 356, 390, 323, 357, 391, 324, 358, 392, 325,
            359, 393, 326, 360, 394, 327, 361, 395, 328, 362, 396, 329, 363, 397, 330, 364,
            398, 331, 365, 399, 332, 366, 400, 333, 367, 401, 334, 368, 402, 335, 369, 403,
            336, 370, 404, 337, 371, 405, 338, 372, 406, 339, 373, 407, 340, 374, 408, 341,
            375, 409, 342, 376, 410, 343, 377, 411, 344, 378, 412, 345, 379, 413, 414, 456,
            498, 415, 457, 499, 416, 458, 500, 417, 459, 501, 418, 460, 502, 419, 461, 503,
            420, 462, 504, 421, 463, 505, 422, 464, 506, 423, 465, 507, 424, 466, 508, 425,
            467, 509, 426, 468, 510, 427, 469, 511, 428, 470, 512, 429, 471, 513, 430, 472,
            514, 431, 473, 515, 432, 474, 516, 433, 475, 517, 434, 476, 518, 435, 477, 519,
            436, 478, 520, 437, 479, 521, 438, 480, 522, 439, 481, 523, 440, 482, 524, 441,
            483, 525, 442, 484, 526, 443, 485, 527, 444, 486, 528, 445, 487, 529, 446, 488,
            530, 447, 489, 531, 448, 490, 532, 449, 491, 533, 450, 492, 534, 451, 493, 535,
            452, 494, 536, 453, 495, 537, 454, 496, 538, 455, 497, 539, 540, 552, 564, 541,
            553, 565, 542, 554, 566, 543, 555, 567, 544, 556, 568, 545, 557, 569, 546, 558,
            570, 547, 559, 571, 548, 560, 572, 549, 561, 573, 550, 562, 574, 551, 563, 575}
            };

    private final static int SSLIMIT = 18;
    private final static int SBLIMIT = 32;

    final static int slen0[] ={0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4};
    final static int slen1[] ={0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3};

    private final static HuffmanTables.Huffman huff = new HuffmanTables.Huffman();

    private final static int[] is_pos = new int[576];
    private final static float[] is_ratio = new float[576];

    private final static float[] tsOutCopy = new float[18];
    private final static float[] rawout = new float[36];
    private static final int[] is_1d = new int[SBLIMIT * SSLIMIT + 4];
    private static final float[][][] ro = new float[2][SBLIMIT][SSLIMIT];
    private static final float[][][] lr = new float[2][SBLIMIT][SSLIMIT];
    private static final float[] out_1d = new float[SBLIMIT * SSLIMIT];
    private static final float[][] prevblck = new float[2][SBLIMIT * SSLIMIT];
    private static final float[][] k = new float[2][SBLIMIT * SSLIMIT];
    private static int nonzero0, nonzero1;
    private static BitStream stream;
    private static Header header;
    private static SynthesisFilter filter1, filter2;
    private static SampleBuffer buffer;
    private static int which_channels;
    private static BitReserve br;
    private static SideInfo si;

    public static int[] scalefac0L= new int[23];
    public static int[][] scalefac0S= new int[3][13];
    public static int[] scalefac1L= new int[23];
    public static int[][] scalefac1S= new int[3][13];

    private static int max_gr;
    private static int frame_start;
    private static int part2_start;
    private static int channels;
    private static int first_channel;
    private static int last_channel;
    private static int sfreq;

    private final static float[] samples1 = new float[32];
    private final static float[] samples2 = new float[32];

    private static int[] sfBandIndexL;
    private static int[] sfBandIndexS;
    private static HuffmanTables h;


    public LayerIIIDecoder(BitStream stream0, Header header0, SynthesisFilter filtera, SynthesisFilter filterb, SampleBuffer buffer0, int which_ch0) {
        stream = stream0;
        header = header0;
        filter1 = filtera;
        filter2 = filterb;
        buffer = buffer0;
        which_channels = which_ch0;
        frame_start = 0;
        channels = (header.mode() == Header.SINGLE_CHANNEL) ? 1 : 2;
        max_gr = (header.version() == Header.MPEG1) ? 2 : 1;
        sfreq = header.sample_frequency() + ((header.version() == Header.MPEG1) ? 3 : 0);
        switch(sfreq){
          case 0:
            sfBandIndexL = new int[]{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576};
            sfBandIndexS = new int[]{0, 4, 8, 12, 18, 24, 32, 42, 56, 74, 100, 132, 174, 192};
          break;
          case 1:
            sfBandIndexL = new int[]{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 114, 136, 162, 194, 232, 278, 330, 394, 464, 540, 576};
            sfBandIndexS = new int[]{0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 136, 180, 192};
          break;
          case 2:
            sfBandIndexL = new int[]{0, 6, 12, 18, 24, 30, 36, 44, 54, 66, 80, 96, 116, 140, 168, 200, 238, 284, 336, 396, 464, 522, 576};
            sfBandIndexS = new int[]{0, 4, 8, 12, 18, 26, 36, 48, 62, 80, 104, 134, 174, 192};
          break;
          case 3:
            sfBandIndexL = new int[]{0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 52, 62, 74, 90, 110, 134, 162, 196, 238, 288, 342, 418, 576};
            sfBandIndexS = new int[]{0, 4, 8, 12, 16, 22, 30, 40, 52, 66, 84, 106, 136, 192};
          break;
          case 4:
            sfBandIndexL = new int[]{0, 4, 8, 12, 16, 20, 24, 30, 36, 42, 50, 60, 72, 88, 106, 128, 156, 190, 230, 276, 330, 384, 576};
            sfBandIndexS = new int[]{0, 4, 8, 12, 16, 22, 28, 38, 50, 64, 80, 100, 126, 192};
          break;
          case 5:
            sfBandIndexL = new int[]{0, 4, 8, 12, 16, 20, 24, 30, 36, 44, 54, 66, 82, 102, 126, 156, 194, 240, 296, 364, 448, 550, 576};
            sfBandIndexS = new int[]{0, 4, 8, 12, 16, 22, 30, 42, 58, 78, 104, 138, 180, 192};
          break;
        }

        if (channels == 2) {
            switch (which_channels) {
                case OutputChannels.LEFT_CHANNEL:
                case OutputChannels.DOWNMIX_CHANNELS:
                    first_channel = last_channel = 0;
                    break;
                case OutputChannels.RIGHT_CHANNEL:
                    first_channel = last_channel = 1;
                    break;
                case OutputChannels.BOTH_CHANNELS:
                default:
                    first_channel = 0;
                    last_channel = 1;
                    break;
            }
        }
        else {
            first_channel = last_channel = 0;
        }
        for (int ch = 0; ch < 2; ch++) {
            for (int j = 0; j < 576; j++) {
                prevblck[ch][j] = 0.0f;
            }
        }
        nonzero0 = nonzero1 = 576;
        br = new BitReserve();
        si = new SideInfo();
        h = new HuffmanTables();
    }

    public final void decodeFrame() {
        int nSlots = header.slots();
        get_side_info();

        for (int i = 0; i < nSlots; i++) {
            br.hputbuf(stream.readbits(8));
        }
        int main_data_end = br.totbit >>> 3;
        int flush_main = (br.totbit & 7);
        if (flush_main != 0) {
            br.hgetbits(8 - flush_main);
            main_data_end++;
        }

        // E.B Fix.
        int bytes_to_discard = frame_start - main_data_end - si.main_data_begin;
        frame_start += nSlots;
        if(bytes_to_discard < 0)
          return;


        /*int bytes_to_discard = frame_start - main_data_end - si.main_data_begin;
        if(bytes_to_discard < 0)
          return;

        frame_start += nSlots;*/
        // End of E.B Fix.
        
        if (main_data_end > 4096) {
            frame_start -= 4096;
            br.rewindNbytes(4096);
        }

        while(bytes_to_discard-->0)
          br.hgetbits(8);

        for (int gr = 0; gr < max_gr; gr++) {
            for (int ch = 0; ch < channels; ch++) {
                part2_start = br.totbit;
				if(header.version() == Header.MPEG1) {
					get_scale_factors_1(ch, gr);
				} else {
					get_scale_factors_2(ch, gr);
				}
                huffman_decode(ch, gr);
                dequantize_sample(ro[ch], ch, gr);
            }

            stereo(gr);

            for (int ch = first_channel; ch <= last_channel; ch++) {
                reorder(lr[ch], ch, gr);
                antialias(ch, gr);
                hybrid(ch, gr);

                for(int sb18 = 18; sb18 < 576; sb18 += 36){
                  for(int ss=1; ss < SSLIMIT; ss += 2){
                    out_1d[sb18 + ss] *= -1;
                  }
                }

                if ((ch == 0) || (which_channels == OutputChannels.RIGHT_CHANNEL)) {
                    for(int ss=0; ss < SSLIMIT; ss++){
                      for(int sb18 = 0, sb = 0; sb18 < 576; sb18 += 18){
                        samples1[sb++] = out_1d[sb18 + ss];
                      }
                      filter1.calculateSamples(samples1, buffer);
                    }
                }
                else {
                    for(int ss=0; ss < SSLIMIT; ss++){
                      for(int sb18 = 0, sb = 0; sb18 < 576; sb18 += 18){
                        samples2[sb++] = out_1d[sb18 + ss];
                      }

⌨️ 快捷键说明

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