MultiPhaser is a Kurkesmurfer phase-shifting laboratory built around two independent chains of ninety-nine first-order all-pass stages. It exposes the stereo chain in three ways:
- MultiPhaser is the stereo audio engine, internal/external sweep controller, and conventional dry/wet output. Each channel has a 1–99 stage offset, bipolar CV amount, stage-CV input, and effective-stage display. LINK makes the left stage controls drive both channels; SPLIT makes the two sides independent.
- Tap Out provides sixteen stereo tap slots. Every slot has its own 1–99 stage encoder, two-digit display, and L/R output pair.
- Tap Scanner continuously crossfades across any selected span of stages. It accepts 0–10 V position control or advances forward, backward, and ping-pong from a clock.
- MultiPhaser Meta is a self-contained hardware companion with twelve CV/audio inputs, two gate inputs, sixteen outputs, integrated scanning, and five selectable stereo tap pairs. It is compiled both for VCV patch authoring and as a MetaModule plug-in.
- PhaseQ is a compact 6 HP second-order all-pass voice. Frequency, Q, dry/wet mix, and bipolar feedback each have a CV input and attenuverter. Its separate wet and mixed outputs support chains, stereo pairs, and delayed-LFO modulation experiments without requiring the expander bus.
Place the modules directly adjacent in this order:
MultiPhaser -> Tap Out -> Tap Scanner
Tap Scanner may also sit directly to the right of MultiPhaser. Tap Out relays the tap bus so both expanders can be used together.
The VCV Rack build expects the Rack 2 SDK at
~/Development/Rack-SDK unless RACK_DIR is overridden.
make test
make
make dist
make hardwareThe portable DSP tests have no Rack dependency and require only a C++11 compiler.
metamodule/builds the MultiPhaser Meta companion for MetaModule SDK 2.3. Its first twelve parameters, twelve CV/audio inputs, two gates, and sixteen outputs deliberately match MetaModule plus MetaAIO.daisy/builds dedicated firmware for the original four-channel Daisy Patch, using audio 3/4 as feedback returns and outputs 3/4 as a selectable wet/scanner/tap/feedback-send pair. Its OLED, encoder, gates, and MIDI are part of the instrument.distingnt/builds a native C++ algorithm for the disting NT API. It uses twelve routable inputs and eight routable outputs for main, wet, scanner, and fixed-tap stereo pairs.
These editions share the portable 99-stage engine but intentionally expose different control surfaces appropriate to their hardware.
- The all-pass coefficient uses the bilinear-transform relation for a named frequency rather than MSM's normalized-delay approximation.
- LOW/HIGH interpolation is logarithmic, giving useful resolution across the audio spectrum.
- All ninety-nine stages are always evaluated. Their wet outputs belong to one coherent network.
- Each stage address is
offset + CV amount × CV × 9.8 stages/V, clamped to 1–99. A 0–10 V signal therefore traverses the complete chain from offset 1 at full positive amount. - Fractional stage addresses linearly crossfade adjacent wet taps. The same continuous signal feeds the wet output, dry/wet mix, and feedback loop, so stage modulation does not zipper between integer taps.
- The main output uses a constant-amplitude linear dry/wet interpolation.
- Tap outputs contain wet signals only. Stage 1 is the first all-pass output; the dry input is not counted as a stage.
- Linear tap interpolation is the default because adjacent all-pass outputs are strongly correlated. Equal-power interpolation is available as a tonal alternative.
PhaseQ is one second-order all-pass section with a 20 Hz–20 kHz center-frequency range and Q from 0.25–20. Frequency and Q CV use exponential scaling at one octave per volt when their attenuverters are fully clockwise. Mix and feedback CV traverse their full bipolar control range with ±5 V. Feedback is limited to ±0.95; at zero feedback, the WET output retains the ideal all-pass magnitude response.
Patch WET into the next PhaseQ for cascaded phase/group-delay shaping. Patch MIX for the corresponding dry/wet notch response. For animated stereo, use two instances and feed related or delayed LFOs to their frequency or Q inputs.
The initial investigation was prompted by the open-source MSM Phaser and Ross Bencina's classic MusicDSP phaser example. MultiPhaser is a new implementation with a different coefficient calculation, iterative ninety-nine-stage stereo engine, portable DSP boundary, expander protocol, and scanning system. No MSM source code is included.
MultiPhaser is licensed under GPL-3.0-or-later. The Kurkesmurfer panel fonts are Fraunces and Barlow Condensed, distributed under their bundled SIL Open Font License notices.