Пример #1
0
        private void Initialize(Header header)
        {
            // REVIEW: allow customizable scale factor
            float scalefactor = 32700.0f;

            int mode     = header.mode();
            int layer    = header.layer();
            int channels = mode == Header.SINGLE_CHANNEL ? 1 : 2;

            // set up output buffer if not set up by client.
            if (m_Output == null)
            {
                m_Output = new SampleBuffer(header.frequency(), channels);
            }

            float[] factors = m_Equalizer.BandFactors;
            //Console.WriteLine("NOT CREATING SYNTHESIS FILTERS");
            m_LeftChannelFilter = new SynthesisFilter(0, scalefactor, factors);

            // REVIEW: allow mono output for stereo
            if (channels == 2)
            {
                m_RightChannelFilter = new SynthesisFilter(1, scalefactor, factors);
            }

            m_OutputChannels  = channels;
            m_OutputFrequency = header.frequency();

            m_IsInitialized = true;
        }
Пример #2
0
        private void Initialize(Header header)
        {
            // REVIEW: allow customizable scale factor
            float scalefactor = 32700.0f;

            int mode = header.mode();
            int layer = header.layer();
            int channels = mode == Header.SINGLE_CHANNEL ? 1 : 2;

            // set up output buffer if not set up by client.
            if (m_Output == null)
                m_Output = new SampleBuffer(header.frequency(), channels);

            float[] factors = m_Equalizer.BandFactors;
            //Console.WriteLine("NOT CREATING SYNTHESIS FILTERS");
            m_LeftChannelFilter = new SynthesisFilter(0, scalefactor, factors);

            // REVIEW: allow mono output for stereo
            if (channels == 2)
                m_RightChannelFilter = new SynthesisFilter(1, scalefactor, factors);

            m_OutputChannels = channels;
            m_OutputFrequency = header.frequency();

            m_IsInitialized = true;
        }
Пример #3
0
        private void compute_pcm_samples3(ABuffer buffer)
        {
            float[] vp = actual_v;

            float[] tmpOut = _tmpOut;
            int dvp = 0;

            for (int i = 0; i < 32; i++)
            {
                float[] dp = d16[i];
                float pcm_sample = ((vp[3 + dvp]*dp[0]) + (vp[2 + dvp]*dp[1]) + (vp[1 + dvp]*dp[2]) + (vp[0 + dvp]*dp[3]) +
                                    (vp[15 + dvp]*dp[4]) + (vp[14 + dvp]*dp[5]) + (vp[13 + dvp]*dp[6]) + (vp[12 + dvp]*dp[7]) +
                                    (vp[11 + dvp]*dp[8]) + (vp[10 + dvp]*dp[9]) + (vp[9 + dvp]*dp[10]) + (vp[8 + dvp]*dp[11]) +
                                    (vp[7 + dvp]*dp[12]) + (vp[6 + dvp]*dp[13]) + (vp[5 + dvp]*dp[14]) + (vp[4 + dvp]*dp[15]))*
                                   scalefactor;

                tmpOut[i] = pcm_sample;

                dvp += 16;
            }
        }
Пример #4
0
        private void compute_pcm_samples2(ABuffer buffer)
        {
            float[] vp = actual_v;

            //int inc = v_inc;
            float[] tmpOut = _tmpOut;
            int dvp = 0;

            // fat chance of having this loop unroll
            for (int i = 0; i < 32; i++)
            {
                float[] dp = d16[i];
                float pcm_sample;

                pcm_sample =
                    ((vp[2 + dvp]*dp[0]) + (vp[1 + dvp]*dp[1]) + (vp[0 + dvp]*dp[2]) + (vp[15 + dvp]*dp[3]) +
                     (vp[14 + dvp]*dp[4]) + (vp[13 + dvp]*dp[5]) + (vp[12 + dvp]*dp[6]) + (vp[11 + dvp]*dp[7]) +
                     (vp[10 + dvp]*dp[8]) + (vp[9 + dvp]*dp[9]) + (vp[8 + dvp]*dp[10]) + (vp[7 + dvp]*dp[11]) +
                     (vp[6 + dvp]*dp[12]) + (vp[5 + dvp]*dp[13]) + (vp[4 + dvp]*dp[14]) + (vp[3 + dvp]*dp[15]))*
                    scalefactor;

                tmpOut[i] = pcm_sample;

                dvp += 16;
            }
            // for
        }
Пример #5
0
        /// <summary>
        ///     Calculate 32 PCM samples and put the into the Obuffer-object.
        /// </summary>
        public void calculate_pcm_samples(ABuffer buffer)
        {
            compute_new_v();
            compute_pcm_samples(buffer);

            actual_write_pos = (actual_write_pos + 1) & 0xf;
            actual_v = (actual_v == v1) ? v2 : v1;

            // initialize samples[]:	
            //for (register float *floatp = samples + 32; floatp > samples; )
            // *--floatp = 0.0f;  

            // MDM: this may not be necessary. The Layer III decoder always
            // outputs 32 subband samples, but I haven't checked layer I & II.
            for (int p = 0; p < 32; p++)
                samples[p] = 0.0f;
        }
Пример #6
0
        private void compute_pcm_samples(ABuffer buffer)
        {
            switch (actual_write_pos)
            {
                case 0:
                    compute_pcm_samples0(buffer);
                    break;

                case 1:
                    compute_pcm_samples1(buffer);
                    break;

                case 2:
                    compute_pcm_samples2(buffer);
                    break;

                case 3:
                    compute_pcm_samples3(buffer);
                    break;

                case 4:
                    compute_pcm_samples4(buffer);
                    break;

                case 5:
                    compute_pcm_samples5(buffer);
                    break;

                case 6:
                    compute_pcm_samples6(buffer);
                    break;

                case 7:
                    compute_pcm_samples7(buffer);
                    break;

                case 8:
                    compute_pcm_samples8(buffer);
                    break;

                case 9:
                    compute_pcm_samples9(buffer);
                    break;

                case 10:
                    compute_pcm_samples10(buffer);
                    break;

                case 11:
                    compute_pcm_samples11(buffer);
                    break;

                case 12:
                    compute_pcm_samples12(buffer);
                    break;

                case 13:
                    compute_pcm_samples13(buffer);
                    break;

                case 14:
                    compute_pcm_samples14(buffer);
                    break;

                case 15:
                    compute_pcm_samples15(buffer);
                    break;
            }

            if (buffer != null)
            {
                buffer.AppendSamples(channel, _tmpOut);
            }
        }