overdub

schwung-munchi-delay

charlesvestal/schwung-munchi-delay · ★ 2

CHOMPI TEMPO's dual delay (Magic Wand) as a Schwung audio effect

README from GitHub, MIT

Munchi Delay

CHOMPI TEMPO's Magic Wand effect, as a Schwung audio effect. On the CHOMPI running TEMPO, the Magic Wand knob drives a dual delay: turned left it is an echo locked to the clock; turned right the same echo melts into a diffusion reverb. It throws in random octave, reverse and pan events, can freeze its buffer into a loop, and once the feedback is high new material ducks the repeats out of its way. This is that effect, on the firmware's own code, locked to Move's tempo.

It is a Schwung audio FX: put it in any slot's FX chain, a bus, or Master FX. Its siblings are the Munchi ports of the CHOMPI firmwares: Tape, Wave and Tempo. It is a port of code CHOMPI Club released as open source (CHOMPI-Club/CHOMPI, MIT), not an official CHOMPI Club release; see Credits.

What it is

A clock-synced glitch delay. Chase Bliss's guide calls it TEMPO's "Dual Delay" and the firmware file is granularDelay.h, but it is not a cloud of tiny grains:

  • The base is one stereo delay line whose interval is a clock division of Move's tempo. Left and right read about 20 ms and 10 ms apart, for width. With Random at 0 it is a plain tempo-synced echo (plus reverb on the up side).
  • The "granular" part is two read heads that crossfade. On every ⅛-note clock step, Random is the chance that the delay jumps to a fresh head playing the buffer back differently: retriggered, reversed, an octave up (double speed) or an octave down (half speed). Each "grain" is a whole echo long, with ~20 ms crossfades: closer to a stutter delay than to Clouds.
  • Shimmer, sort of. The repeats are fed back into the buffer, so an octave-up repeat is pitched up again on the next pass, and on the up side the reverb smears it. With Random and Feedback up, that is a clock-synced shimmer.

The Wand

Centre is off, and the effect passes audio untouched. Off centre the echo fades in at its longest interval; the further you turn, the shorter it gets.

WandInterval (at Move's tempo)
just off centre1 bar
½ note
dotted ¼
¼
dotted ⅛
¼ triplet
⅛
⅛ triplet
fully down / up1/16
  • Down (left): a clean delay. Random here makes the echo jump an octave up or down, play backwards, or retrigger: a fill.
  • Up (right): the same intervals melting into reverb. Just past centre the diffusion reverb comes in; the further up, the more the echo becomes wash. Random here gives octave-up echoes panned at random: a shimmer or smear.

The other knobs

KnobWhat it does
RandomThe chance of a random event on each ⅛ note (see above)
FeedbackRepeats. Past about 60 % the input starts ducking the repeats: play and they step aside, stop and they swell back
MixDry to wet. Centre is both at full
FreezeStops recording and loops what is in the buffer, cut to the current interval; the Wand still moves it through the intervals. Needs the Wand off centre. Down: a crisp loop. Up: a blurred one
ClockRuns the intervals at half, normal or double Move's tempo

The clock. The intervals follow Move's tempo. While Move's transport runs, the random events land on its beat; while it is stopped the effect runs free at the set tempo. Below 40 BPM the effect holds 40 (its buffer is 10 seconds).

One quirk, kept from the CHOMPI: the delay keeps recording even with the Wand at centre, so turning it on brings back the last few seconds of what went through rather than starting from silence.

Try this:

  • Turn Random up on the down side with a long interval: an echo that occasionally answers an octave down or backwards, like a drum fill.
  • Up side, Random and Feedback both high on a sustained sound: the octave-up repeats climb and smear.
  • Find a loop you like, Freeze it, then sweep the Wand through the intervals: the frozen buffer restarts at each one.
  • Feedback past 60 % on a pad: the repeats only come up in the gaps.

Install

Download munchi-delay-module.tar.gz from the latest release and install it with the Schwung web manager's custom-module upload, or paste this repository's URL into its custom install. From a build:

./scripts/build.sh      # cross-compiles in Docker
./scripts/install.sh    # copies dist/munchi-delay to the Move

How it is built

PathWhat
src/dsp/tempo/TEMPO's granularDelay.h, reverb.h, fx_engine.h, SimpleCompressor.h, SimpleCrossfade.h. tempo/upstream/ has the firmware's FxEngine.h (the wiring) and the original granularDelay.h; tempo/shim/ answers what the code asked of the CHOMPI's clock
src/dsp/munchi_delay.cppthe audio FX: FxEngine's signal path for one input, the clock from Move's tempo, parameters and state
tests/delay_test.cppoffline: transparent at centre, echo at the clocked interval, freeze, state

The effect runs at its native 48 kHz. Only the wet path is resampled; the dry signal passes at 44.1 kHz untouched.

c++ -std=c++17 -O2 -Isrc/dsp -Isrc/dsp/tempo/shim -Isrc/dsp/tempo \
    tests/delay_test.cpp -o build-host/delay_test && ./build-host/delay_test out.wav

Credits

  • CHOMPI TEMPO 1.0: CHOMPI Club / Chase Bliss. MIT. The CHOMPI name, logo and character are CHOMPI Club's trademarks and are not licensed; this port is named Munchi Delay for that reason.
  • Reverb, FX engine: Émilie Gillet, Mutable Instruments. MIT.
  • DaisySP (dsp utilities): Electrosmith. MIT.

See THIRD_PARTY.md. Munchi Delay itself is MIT (LICENSE).