M MEDIA AUDIO / INTERFACE DESIGN

22 processors.
A wider visual vocabulary.

A catalog of working audio interfaces spanning dynamics, EQ, saturation, channel strips, spatial effects, and mastering. Each design gives the sound its own visual identity.

Product definition · Visual design · Interaction · DeliveryRead the audio design case study ↗
Lake Ontario audio plugin interface

Vari-Mu Bus Compressor + EQ

Lake Ontario

A 2-channel Vari-Mu bus compressor with a full 4-band EQ per channel - glue and tone-shaping in the same signal path.

Leadfoot audio plugin interface

Kick Drum Channel Strip

Leadfoot

A complete kick drum channel strip - gate, EQ, transient shaping, compression, saturation, and a blendable sub generator.

Dualtronix audio plugin interface

Opto Leveling Amplifier

Dualtronix

A dual-channel opto leveling amplifier - two fully independent channels, Auto Level, and a genuine Comp/Limit switch.

Studio 351 audio plugin interface

Class A Tape Preamp

Studio 351

Dual-channel Class A tape-preamp character that sounds better than bypass before you touch a knob. Character EQ recolors the whole plugin at once.

Leveler Control audio plugin interface

Opto Leveling Amplifier

Leveler Control

An opto-style leveler with Auto Gain Match - flip it on and the output holds steady while you dial in Peak Reduction, so you hear the compression, not the volume.

Anaheim audio plugin interface

Mic Pre, Compressor, EQ

Anaheim

A dual-channel tube mic pre and compressor with a beefy Vari-Mu gain stage and a built-in 2-band EQ. Push the Input, feel the tube stage wake up.

Third Rail audio plugin interface

31-Band Tube Graphic EQ

Third Rail

A tube-driven stereo 31-band 1/3-octave graphic EQ with ±24 dB per band and a COLOR knob that recolors the whole plugin live.

The New Yorker audio plugin interface

Vari-Mu Compressor

The New Yorker

The gluiest mix glue you've ever heard. Dual-channel Vari-Mu compression with Stereo, Dual, and Mid-Side modes, built-in saturation, and real VU ballistics.

Broadcast Foundry audio plugin interface

American Tube Preamp

Broadcast Foundry

Flip it on. It already sounds better. Two independent channels of American tube preamp character. Grit on the drums. Teeth in the low end.

Iron Deck audio plugin interface

Tape Machine Strip

Iron Deck

Let's Rock. Two independent tape machine channels. REC hits the iron, REP brings it back. The glue your tracks have been missing - free.

Monster Factory audio plugin interface

Channel Strip

Monster Factory

Gate, compressor, grind, doubler, delay, reverb, limiter - complete chain in one insert.

Orbit audio plugin interface

3D Autopanner

Orbit

Circular autopanner with ITD, front-back EQ, and volume shaping. Real depth, not just left-right.

Curve Control audio plugin interface

Mix & Mastering EQ

Curve Control

Dual-channel mastering EQ. Twelve bands, M/S mode, hardware weight, and Delta monitoring.

Sugar Engine audio plugin interface

Vocal Channel Strip

Sugar Engine

Opto comp, parametric EQ, dual de-esser, and doubler - one insert, every stage.

Magic Buss audio plugin interface

Bus Compressor

Magic Buss

Three compressors. One chain. FET punch, VCA glue, Vari-Mu warmth - in any order.

The Mad Scientist audio plugin interface

Parallel Compressor

The Mad Scientist

Parallel RMS compression. Input-driven saturation. Steamdriven dynamics.

Volume Dealer audio plugin interface

Mastering Limiter

Volume Dealer

Measure. Target. Deliver. True-peak limiting with one-click loudness targeting.

SIGNAL PROCESSING

The DSP behind the faceplate.

A screenshot proves visual design. It does not prove the plugin actually processes audio correctly. Below is real, unedited C++ from Magic Buss’s six-band parametric EQ: production source, currently shipping, not a demo written for this portfolio.

RBJ Cookbook formsDirect-form-I biquad, standard peaking/shelf/highpass/lowpass derivations
Six-band routingConfigurable HP/LP slopes, per-band bypass, stereo dual-mono
Real-time safeNo allocation in the audio callback, coefficients recomputed only on parameter change
Biquad coefficient mathDSP/ParametricEQ.h

Peaking, shelf, highpass, and lowpass coefficient derivations, plus the direct-form-I process step.

struct Biquad
{
    float b0 = 1.f, b1 = 0.f, b2 = 0.f, a1 = 0.f, a2 = 0.f;
    float z1 = 0.f, z2 = 0.f;

    void reset() { z1 = z2 = 0.f; }

    inline float process(float x)
    {
        const float y = b0 * x + z1;
        z1 = b1 * x + z2 - a1 * y;
        z2 = b2 * x - a2 * y;
        return y;
    }

    void setBypass() { b0 = 1.f; b1 = b2 = a1 = a2 = 0.f; }

    void setPeaking(double sr, float freq, float q, float gainDb)
    {
        const double A = std::pow(10.0, gainDb / 40.0);
        const double w0 = 2.0 * juce::MathConstants<double>::pi * freq / sr;
        const double alpha = std::sin(w0) / (2.0 * juce::jmax(0.05, (double)q));
        const double cosw0 = std::cos(w0);

        const double a0 =  1.0 + alpha / A;
        b0 = (float)((1.0 + alpha * A) / a0);
        b1 = (float)((-2.0 * cosw0)     / a0);
        b2 = (float)((1.0 - alpha * A)  / a0);
        a1 = (float)((-2.0 * cosw0)     / a0);
        a2 = (float)((1.0 - alpha / A)  / a0);
    }

    void setLowShelf(double sr, float freq, float q, float gainDb)
    {
        const double A = std::pow(10.0, gainDb / 40.0);
        const double w0 = 2.0 * juce::MathConstants<double>::pi * freq / sr;
        const double cosw0 = std::cos(w0);
        const double sinw0 = std::sin(w0);
        const double alpha = sinw0 / 2.0 * (1.0 / juce::jmax(0.05, (double)q));
        const double twoSqrtAalpha = 2.0 * std::sqrt(A) * alpha;

        const double a0 =        (A + 1.0) + (A - 1.0) * cosw0 + twoSqrtAalpha;
        b0 = (float)(A * ((A + 1.0) - (A - 1.0) * cosw0 + twoSqrtAalpha) / a0);
        b1 = (float)(2.0 * A * ((A - 1.0) - (A + 1.0) * cosw0) / a0);
        b2 = (float)(A * ((A + 1.0) - (A - 1.0) * cosw0 - twoSqrtAalpha) / a0);
        a1 = (float)(-2.0 * ((A - 1.0) + (A + 1.0) * cosw0) / a0);
        a2 = (float)(((A + 1.0) + (A - 1.0) * cosw0 - twoSqrtAalpha) / a0);
    }

    void setHighShelf(double sr, float freq, float q, float gainDb)
    {
        const double A = std::pow(10.0, gainDb / 40.0);
        const double w0 = 2.0 * juce::MathConstants<double>::pi * freq / sr;
        const double cosw0 = std::cos(w0);
        const double sinw0 = std::sin(w0);
        const double alpha = sinw0 / 2.0 * (1.0 / juce::jmax(0.05, (double)q));
        const double twoSqrtAalpha = 2.0 * std::sqrt(A) * alpha;

        const double a0 =        (A + 1.0) - (A - 1.0) * cosw0 + twoSqrtAalpha;
        b0 = (float)(A * ((A + 1.0) + (A - 1.0) * cosw0 + twoSqrtAalpha) / a0);
        b1 = (float)(-2.0 * A * ((A - 1.0) + (A + 1.0) * cosw0) / a0);
        b2 = (float)(A * ((A + 1.0) + (A - 1.0) * cosw0 - twoSqrtAalpha) / a0);
        a1 = (float)(2.0 * ((A - 1.0) - (A + 1.0) * cosw0) / a0);
        a2 = (float)(((A + 1.0) - (A - 1.0) * cosw0 - twoSqrtAalpha) / a0);
    }

    void setHighpass(double sr, float freq, float q)
    {
        const double w0 = 2.0 * juce::MathConstants<double>::pi * freq / sr;
        const double cosw0 = std::cos(w0);
        const double alpha = std::sin(w0) / (2.0 * juce::jmax(0.05, (double)q));
        const double a0 = 1.0 + alpha;
        b0 = (float)(((1.0 + cosw0) / 2.0) / a0);
        b1 = (float)((-(1.0 + cosw0))      / a0);
        b2 = (float)(((1.0 + cosw0) / 2.0) / a0);
        a1 = (float)((-2.0 * cosw0)        / a0);
        a2 = (float)((1.0 - alpha)         / a0);
    }

    void setLowpass(double sr, float freq, float q)
    {
        const double w0 = 2.0 * juce::MathConstants<double>::pi * freq / sr;
        const double cosw0 = std::cos(w0);
        const double alpha = std::sin(w0) / (2.0 * juce::jmax(0.05, (double)q));
        const double a0 = 1.0 + alpha;
        b0 = (float)(((1.0 - cosw0) / 2.0) / a0);
        b1 = (float)((1.0 - cosw0)         / a0);
        b2 = (float)(((1.0 - cosw0) / 2.0) / a0);
        a1 = (float)((-2.0 * cosw0)        / a0);
        a2 = (float)((1.0 - alpha)         / a0);
    }

    // One-pole, used for the 6dB/oct slope option.
    void setOnePoleHighpass(double sr, float freq)
    {
        const double w0 = 2.0 * juce::MathConstants<double>::pi * freq / sr;
        const double k = std::tan(w0 / 2.0);
        const double a0 = 1.0 + k;
        b0 = (float)( 1.0 / a0);
        b1 = (float)(-1.0 / a0);
        b2 = 0.f;
        a1 = (float)(-(1.0 - k) / a0);
        a2 = 0.f;
    }

    void setOnePoleLowpass(double sr, float freq)
    {
        const double w0 = 2.0 * juce::MathConstants<double>::pi * freq / sr;
        const double k = std::tan(w0 / 2.0);
        const double a0 = 1.0 + k;
        b0 = (float)(k / a0);
        b1 = (float)(k / a0);
        b2 = 0.f;
        a1 = (float)(-(1.0 - k) / a0);
        a2 = 0.f;
    }
};
Six-band routing and slope-stackingDSP/ParametricEQ.h

Configurable HP/LP slopes (6/12/18/24 dB per octave via cascaded one-pole and biquad sections), per-band enable, and the per-sample signal path.

class StereoChannelEQ
{
public:
    void prepare(double sampleRate) { sr = sampleRate; reset(); }

    void reset()
    {
        for (auto* f : { &hp1, &hp2, &lp1, &lp2, &low, &loMid, &hiMid, &high })
            f->reset();
    }

    struct Settings
    {
        int   hpSlope = 0;  float hpFreq = 20.f;
        int   lpSlope = 0;  float lpFreq = 20000.f;
        bool  lowShelf = true;  float lowFreq = 100.f;  float lowGain = 0.f;  float lowQ = 0.7f;  bool lowEnabled = true;
        float loMidFreq = 300.f;  float loMidGain = 0.f;  float loMidQ = 0.7f;  bool loMidEnabled = true;
        float hiMidFreq = 3000.f; float hiMidGain = 0.f;  float hiMidQ = 0.7f;  bool hiMidEnabled = true;
        bool  highShelf = true; float highFreq = 8000.f; float highGain = 0.f; float highQ = 0.7f; bool highEnabled = true;
    };

    void update(const Settings& s)
    {
        hpSlope = s.hpSlope;
        lpSlope = s.lpSlope;

        if (s.hpSlope >= 1) hp1.setOnePoleHighpass(sr, s.hpFreq); else hp1.setBypass();
        if (s.hpSlope >= 2) hp2.setHighpass(sr, s.hpFreq, 0.7071f); else hp2.setBypass();
        // slopes 3 and 4 reuse hp2 as a second 2nd-order section for steeper roll-off
        hp2b.setBypass();
        if (s.hpSlope == 3) hp2b.setOnePoleHighpass(sr, s.hpFreq);
        if (s.hpSlope == 4) hp2b.setHighpass(sr, s.hpFreq, 1.3066f);

        if (s.lpSlope >= 1) lp1.setOnePoleLowpass(sr, s.lpFreq); else lp1.setBypass();
        if (s.lpSlope >= 2) lp2.setLowpass(sr, s.lpFreq, 0.7071f); else lp2.setBypass();
        lp2b.setBypass();
        if (s.lpSlope == 3) lp2b.setOnePoleLowpass(sr, s.lpFreq);
        if (s.lpSlope == 4) lp2b.setLowpass(sr, s.lpFreq, 1.3066f);

        if (!s.lowEnabled) low.setBypass();
        else if (s.lowShelf) low.setLowShelf(sr, s.lowFreq, s.lowQ, s.lowGain);
        else low.setPeaking(sr, s.lowFreq, s.lowQ, s.lowGain);

        if (!s.loMidEnabled) loMid.setBypass();
        else loMid.setPeaking(sr, s.loMidFreq, s.loMidQ, s.loMidGain);

        if (!s.hiMidEnabled) hiMid.setBypass();
        else hiMid.setPeaking(sr, s.hiMidFreq, s.hiMidQ, s.hiMidGain);

        if (!s.highEnabled) high.setBypass();
        else if (s.highShelf) high.setHighShelf(sr, s.highFreq, s.highQ, s.highGain);
        else high.setPeaking(sr, s.highFreq, s.highQ, s.highGain);
    }

    inline float process(float x)
    {
        if (hpSlope >= 1) x = hp1.process(x);
        if (hpSlope >= 2) x = hp2.process(x);
        if (hpSlope >= 3) x = hp2b.process(x);

        x = low.process(x);
        x = loMid.process(x);
        x = hiMid.process(x);
        x = high.process(x);

        if (lpSlope >= 1) x = lp1.process(x);
        if (lpSlope >= 2) x = lp2.process(x);
        if (lpSlope >= 3) x = lp2b.process(x);

        return x;
    }

private:
    double sr = 44100.0;
    int hpSlope = 0, lpSlope = 0;
    Biquad hp1, hp2, hp2b, lp1, lp2, lp2b;
    Biquad low, loMid, hiMid, high;
};

Magic Buss · channel-independent opto, VCA, and tube compressors with a six-band parametric EQ. This EQ stage runs identically regardless of which compressor character is selected.