private void DrawFilterCurve(
        Rect r,
        float[] coeffs,
        float lowGain, float midGain, float highGain,
        Color color,
        bool filled,
        double samplerate,
        double magScale)
    {
        double wm = -2.0 * 3.1415926 / samplerate;

        AudioCurveRendering.AudioCurveEvaluator d = delegate(float x) {
            MathHelpers.ComplexD w    = MathHelpers.ComplexD.Exp(wm * GUIHelpers.MapNormalizedFrequency((double)x, samplerate, useLogScale, true));
            MathHelpers.ComplexD lpf  = MathHelpers.ComplexD.Pow((w * (w * coeffs[0] + coeffs[1]) + coeffs[2]) / (w * (w * coeffs[3] + coeffs[4]) + 1.0f), filterOrder);
            MathHelpers.ComplexD bpf1 = MathHelpers.ComplexD.Pow((w * (w * coeffs[5] + coeffs[6]) + coeffs[7]) / (w * (w * coeffs[8] + coeffs[9]) + 1.0f), filterOrder);
            MathHelpers.ComplexD bpf2 = MathHelpers.ComplexD.Pow((w * (w * coeffs[10] + coeffs[11]) + coeffs[12]) / (w * (w * coeffs[13] + coeffs[14]) + 1.0f), filterOrder);
            MathHelpers.ComplexD hpf  = MathHelpers.ComplexD.Pow((w * (w * coeffs[15] + coeffs[16]) + coeffs[17]) / (w * (w * coeffs[18] + coeffs[19]) + 1.0f), filterOrder);
            double h   = (lpf * lowGain).Mag2() + (bpf1 * bpf2 * midGain).Mag2() + (hpf * highGain).Mag2();
            double mag = masterGain + 10.0 * Math.Log10(h);
            return((float)(mag * magScale));
        };

        if (filled)
        {
            AudioCurveRendering.DrawFilledCurve(r, d, color);
        }
        else
        {
            AudioCurveRendering.DrawCurve(r, d, color);
        }
    }
Exemple #2
0
        static public ComplexD Div(ComplexD a, double b)
        {
            double s = 1.0 / b;

            return(new ComplexD(
                       a.real * s,
                       a.imag * s));
        }
Exemple #3
0
        static public ComplexD Div(double a, ComplexD b)
        {
            double d = b.real * b.real + b.imag * b.imag;
            double s = a / d;

            return(new ComplexD(
                       s * b.real,
                       -s * b.imag));
        }
Exemple #4
0
        static public ComplexD Div(ComplexD a, ComplexD b)
        {
            double d = b.real * b.real + b.imag * b.imag;
            double s = 1.0 / d;

            return(new ComplexD(
                       (a.real * b.real + a.imag * b.imag) * s,
                       (a.imag * b.real - a.real * b.imag) * s));
        }
Exemple #5
0
        static public ComplexD Pow(ComplexD a, double b)
        {
            double p = Math.Atan2(a.imag, a.real);
            double m = Math.Pow(a.Mag2(), b * 0.5f);

            return(new ComplexD(
                       m * Math.Cos(p * b),
                       m * Math.Sin(p * b)
                       ));
        }
Exemple #6
0
 static public ComplexD Mul(double a, ComplexD b)
 {
     return(new ComplexD(
                a * b.real,
                a * b.imag));
 }
Exemple #7
0
 static public ComplexD Mul(ComplexD a, double b)
 {
     return(new ComplexD(
                a.real * b,
                a.imag * b));
 }
Exemple #8
0
 static public ComplexD Mul(ComplexD a, ComplexD b)
 {
     return(new ComplexD(
                a.real * b.real - a.imag * b.imag,
                a.real * b.imag + a.imag * b.real));
 }
Exemple #9
0
 static public ComplexD Sub(double a, ComplexD b)
 {
     return(new ComplexD(
                a - b.real,
                -b.imag));
 }
Exemple #10
0
 static public ComplexD Sub(ComplexD a, double b)
 {
     return(new ComplexD(
                a.real - b,
                a.imag));
 }
Exemple #11
0
 static public ComplexD Sub(ComplexD a, ComplexD b)
 {
     return(new ComplexD(
                a.real - b.real,
                a.imag - b.imag));
 }
Exemple #12
0
 static public ComplexD Add(double a, ComplexD b)
 {
     return(new ComplexD(
                a + b.real,
                b.imag));
 }
Exemple #13
0
 static public ComplexD Add(ComplexD a, double b)
 {
     return(new ComplexD(
                a.real + b,
                a.imag));
 }
Exemple #14
0
 static public ComplexD Add(ComplexD a, ComplexD b)
 {
     return(new ComplexD(
                a.real + b.real,
                a.imag + b.imag));
 }