Ejemplo n.º 1
0
        private void ComputeDo3Band(byte[] pkgData, long lBytesToWrite, WAVEFORMATEXTENSION _waveFormat)
        {
            if (GetAudioData(pkgData, lBytesToWrite, _waveFormat))
            {
                EQSTATE eqs = new EQSTATE();
                AudioBandsConfig.init_3band_state(eqs, LowFrequence, HighFrequence, (int)_waveFormat.NSamplesPerSec);
                //for (int i = 0; i < m_nNumSamples; i++)
                for (int i = 0; i < m_RealIn_RT.Count; i++)
                {
                    m_Band_arr.Add(AudioBandsConfig.do_3band(eqs, m_RealIn_RT[i]));
                    m_BandLow_arr.Add(AudioBandsConfig.do_3bandLow(eqs, m_RealIn_LT[i]));
                }
                double A2, dSum = 0, A2Low, dSumLow = 0;
                for (int i = 0; i < m_Band_arr.Count; i++)
                {
                    A2       = m_Band_arr[i] * m_Band_arr[i];
                    dSum    += A2;
                    A2Low    = m_BandLow_arr[i] * m_BandLow_arr[i];
                    dSumLow += A2Low;
                }
                double dAvg    = dSum / m_nNumSamples;
                double dAvgLow = dSumLow / m_nNumSamples;

                double dFinal    = Math.Sqrt(dAvg);
                double dFinalLow = Math.Sqrt(dAvgLow);

                double dOutput    = dFinal * Math.Sqrt(2) / 32768 * 100;
                double dOutputLow = dFinalLow * Math.Sqrt(2) / 32768 * 100;
                _audiopluseCallBack(dOutput, dOutputLow);
            }
        }
        /// <summary>
        /// Initialize EQ
        ///
        /// Recommended frequencies are ...
        ///  lowfreq  = 880  Hz
        ///  highfreq = 5000 Hz
        ///  Set mixfreq to whatever rate your system is using (eg 48Khz)
        /// </summary>
        public static void init_3band_state(EQSTATE es, int lowfreq, int highfreq, int mixfreq)
        {
            // Clear state

            // Set Low/Mid/High gains to unity

            es.lg = 5.0;       // updated to fine tune
            es.mg = 1.0;
            es.hg = 8.0;       // updated to fine tune output

            // Calculate filter cutoff frequencies

            es.lf = 2 * Math.Sin(Math.PI * ((double)lowfreq / (double)mixfreq));
            es.hf = 2 * Math.Sin(Math.PI * ((double)highfreq / (double)mixfreq));
        }
        const double vsa = (1.0 / 4294967295.0);   // Very small amount (Denormal Fix)
        /// <summary>
        /// Gets the high value based on a sample and a EQSTATE.
        ///
        /// sample can be any range you like :)
        /// Note that the output will depend on the gain settings for each band
        /// (especially the bass) so may require clipping before output, but you
        /// knew that anyway :)
        /// </summary>
        public static double do_3band(EQSTATE es, double sample)
        {
            // Locals

            double l, m, h;      // Low / Mid / High - Sample Values

            // Filter #1 (lowpass)

            es.f1p0 += (es.lf * (sample - es.f1p0)) + vsa;
            es.f1p1 += (es.lf * (es.f1p0 - es.f1p1));
            es.f1p2 += (es.lf * (es.f1p1 - es.f1p2));
            es.f1p3 += (es.lf * (es.f1p2 - es.f1p3));

            l = es.f1p3;

            // Filter #2 (highpass)

            es.f2p0 += (es.hf * (sample - es.f2p0)) + vsa;
            es.f2p1 += (es.hf * (es.f2p0 - es.f2p1));
            es.f2p2 += (es.hf * (es.f2p1 - es.f2p2));
            es.f2p3 += (es.hf * (es.f2p2 - es.f2p3));

            h = es.sdm3 - es.f2p3;

            // Calculate midrange (signal - (low + high))

            m = es.sdm3 - (h + l);

            // Scale, Combine and store

            l *= es.lg;
            m *= es.mg;
            h *= es.hg;

            // Shuffle history buffer

            es.sdm3 = es.sdm2;
            es.sdm2 = es.sdm1;
            es.sdm1 = sample;

            return(h);
        }
Ejemplo n.º 4
0
    float do_3band(ref EQSTATE es, float sample)
    {
        float l, m, h;

        es.f1p0 += (es.lf * (sample - es.f1p0)) + vsa;
        es.f1p1 += (es.lf * (es.f1p0 - es.f1p1));
        es.f1p2 += (es.lf * (es.f1p1 - es.f1p2));
        es.f1p3 += (es.lf * (es.f1p2 - es.f1p3));
        l        = es.f1p3;
        es.f2p0 += (es.hf * (sample - es.f2p0)) + vsa;
        es.f2p1 += (es.hf * (es.f2p0 - es.f2p1));
        es.f2p2 += (es.hf * (es.f2p1 - es.f2p2));
        es.f2p3 += (es.hf * (es.f2p2 - es.f2p3));
        h        = es.sdm3 - es.f2p3;
        m        = es.sdm3 - (h + l);
        l       *= es.lg;
        m       *= es.mg;
        h       *= es.hg;
        es.sdm3  = es.sdm2;
        es.sdm2  = es.sdm1;
        es.sdm1  = sample;
        return(l + m + h);
    }
Ejemplo n.º 5
0
 void init_3band_state(ref EQSTATE es, int lowfreq, int highfreq, int mixfreq)
 {
     es.lg = 1.0f; es.mg = 1.0f; es.hg = 1.0f;
     es.lf = 2f * Mathf.Sin(Mathf.PI * ((float)lowfreq / (float)mixfreq));
     es.hf = 2f * Mathf.Sin(Mathf.PI * ((float)highfreq / (float)mixfreq));
 }