Splits the input into low/mid/high with a Linkwitz-Riley 24 dB/oct crossover,
compresses each band, sums them, then runs the sum through a fourth 'All'
compressor. Bypassing the three bands collapses the plugin to a simple full-band
comp driven by 'All' (the crossover sums flat in magnitude).
- src/dsp/biquad.rs: generic RBJ biquad (Transposed Direct Form II), LP/HP/AP
- src/dsp/crossover.rs: 3-band LR4 filterbank; lower band all-pass-compensated at
the higher crossover so the bands sum to flat magnitude (an all-pass, not a
bit-exact null — that only holds for linear-phase FIR). Mirrors nih-plug's
crossover plugin design.
- src/lib.rs: 4 Compressor instances (low/mid/high/all) + Crossover; params
restructured to 4 nested CompressorParams (id_prefix low/mid/high/all) plus
global crossover_low_hz/crossover_high_hz/look_ahead_ms; 4-column lo|mid|hi|all
egui UI; latency = two series stages (bands + all), constant, reported once
- 10 unit tests (adds biquad LP/AP magnitude, crossover flat-magnitude
reconstruction, band-split sanity)
- README: Stage 3 marked done; corrected the 'sum flat' expectation to flat
magnitude (IIR LR sums to an all-pass, not a time-domain null)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>