SSPACEAGEDOCUMENTATION/
DSP and Instruments

Robust Channel EQ Research And Plan

Updated Aug 27, 2026   |   5.7 KB   |   docs/Robust_Channel_EQ_Research_And_Plan.md

Robust Channel EQ Research And Plan

Decision

Build the next SpaceAge channel EQ as a first-party six-band parametric EQ on the filter core already present in the project. Do not import another EQ library for this phase.

The target band layout is:

  1. High-pass filter
  2. Low shelf
  3. Parametric bell 1
  4. Parametric bell 2
  5. High shelf
  6. Low-pass filter

The drum mixer already has a tested implementation of this topology. The next step is to promote that implementation into a shared channel-EQ processor and give both the regular Mixer and Drum Mixer the same complete controls.

License Research

Candidate License Finding Decision
JUCE DSP Commercial JUCE license or AGPL alternative Already pinned, linked, fingerprinted, and covered by the project's commercial JUCE licensing boundary. It includes the primitives needed for IIR EQ work. Suitable, but no new JUCE DSP dependency is needed because the current first-party biquad bank already supplies the required topology.
DSPFilters by Vinnie Falco MIT Capable IIR library with Butterworth, Chebyshev, elliptic, Legendre, shelving, and related designs. Compatible with proprietary use when its notice is retained. Best external fallback if SpaceAge later needs higher-order crossover or unusual IIR designs. Do not import it merely to replace the working six-band core.
iir1 by Bernd Porr MIT Maintained realtime-oriented continuation of DSPFilters with sample-by-sample processing and documented filter families. Viable external fallback. Its exception behavior and integration surface would need a realtime audit before use.
Signalsmith DSP MIT High-quality header-only DSP collection with measured tests, but its published module list is focused on delay, interpolation, envelopes, FFT, and spectral processing rather than a complete channel EQ. Keep as a candidate for future spectral/analyzer work, not the channel-EQ filter bank.
chowdsp_eq / chowdsp_filters GPLv3 Strong JUCE-oriented EQ and filter modules, but the relevant modules are GPLv3 even though some other ChowDSP modules use BSD licenses. Reject for the proprietary product unless a separate commercial license is obtained and audited.

Primary sources:

Product Scope

Each bell and shelf band needs frequency, gain, Q, and enable controls. The pass filters need frequency, resonance/Q, slope, and enable controls. The default state must be neutral and must not alter existing projects until the user enables the new EQ.

Per-band enable controls are now complete for both mixers. Enabling an empty EQ rack leaves all six bands bypassed, so the default rack is genuinely neutral. The high-pass and low-pass filters provide stable 12 and 24 dB-per-octave choices, with 12 dB as the continuity-safe default.

The EQ detail panel should use consistent band-selection buttons rather than trying to display every parameter in one cramped channel strip. A compact curve display may be added after the controls and automation contract are stable.

Performance Contract

  • A fully bypassed EQ performs no per-sample filter work and clears stale state.
  • A neutral or individually disabled band is skipped.
  • Coefficients are recalculated only after a parameter or sample-rate change.
  • Parameter reads and coefficient preparation must not allocate, lock, or perform file/UI work on the audio thread.
  • Coefficient transitions must be smoothed or safely staged so automation does not produce zipper noise or unstable intermediate filters.
  • A spectrum analyzer must use a bounded lock-free handoff and a decimated background/UI analysis rate. Hidden EQ panels must not analyze or repaint.
  • Regression tests must cover finite output, bypass neutrality, distinct band responses, automation safety, state persistence, and a representative multi-channel CPU budget.

Implementation Order

  1. Complete: use the existing six-band topology in both mixer domains while retaining separate fixed-capacity state for independent channels.

  2. Complete: add equivalent regular-mixer parameters. Legacy musical-EQ parameters remain readable in older project state but are no longer the visible instrument-channel processor.

  3. Complete: replace the four-control EQ detail with band selection plus frequency, gain, and Q controls. Pass bands suppress the irrelevant gain control.

  4. Complete: add response-curve rendering from message-thread parameter snapshots, using the same six biquad equations and no FFT or timer.

  5. Complete: add a bounded realtime analyzer. One 2,048-sample atomic capture ring serves the visible EQ panels in round-robin order; FFT work is performed only on the message thread. Capture is disabled on bus, non-mixer, and hidden EQ views, avoiding sixteen simultaneous analyzer streams. Each graph is also an accessible LIVE/STATIC control, so users can suspend individual analyzers; capture stops when no visible graph requests it.

  6. Complete: add selectable 12/24 dB-per-octave slopes to the high-pass and low-pass bands. The 24 dB mode cascades a second instance of the existing biquad with independent state. The default remains 12 dB for project and preset continuity, and disabled pass bands clear both stages.

  7. Complete: stage live EQ automation with a fixed 64-sample dual-bank crossfade. Frequency, gain, Q, slope, and band-enable changes preserve the previous coefficients and filter state while the new bank is prepared. Settled channels process one bank; only an active transition temporarily processes both, with no coefficient interpolation, allocation, or lock.