charlotte's echos

charlottesEchos · effects

Destructive multi-head stereo delay. Pitch-shifted feedback with decay.

A destructive multi-head stereo delay — a four-stage cascade of echoes that colour and degrade the source rather than repeating it cleanly. Each of the four stages tap the delayed signal in turn; FEEDBACK is fed to every stage so repeats compound across the chain into smeared, endless tails, DECAY progressively tapers each later stage's level and adds in-loop drive and high-frequency loss for a darkening, dub-like decay, and PITCHUP shifts each stage up by a compounding ratio so the cascaded echoes climb in pitch — the classic ascending-shimmer effect. It is the audio sibling of the video-domain VDELAY, and roughly the sound of four COFEFVE analog delays stacked in serial. Reach for it when you want the wet path to abuse the signal.

the faceplate

charlotte's echosLaudioRaudiodelaycvLaudioRaudioaudiocvgatepitch
3 inputs · 2 outputs · 0 params

inputs

idcablewhat it does
LaudioLeft-channel input feeding the multi-head delay cascade.
audio signal; L/R stereo pair with R — L-only auto-duplicates to R
RaudioRight-channel input feeding the cascade. If unpatched it is normalled from L, so a mono source into L alone drives both channels of the cascade and the echoes come back centred rather than hard-left.
audio signal; L/R stereo pair with L
delaycvCV that scales the DELAY-time knob (log-scaled), shifting all tap times together — sweep it for tape-warble and pitch-bend smears on the echoes.
control voltage (CV); modulates delay (multiplicative ≈ octaves — ±1 CV spans the param’s log range)

outputs

idcablewhat it does
LaudioLeft-channel output: the dry signal blended with the four-stage wet cascade per MIX. ⚠ The two channels are INDEPENDENT CASCADES sharing one control set — there is no width, no ping-pong and no stereo offset here (the DSP pins all three to 0), so silence into L with signal into R measures a bit-exact 0.0000 on this output. "Stereo" means two mono paths, not an image.
audio signal; L/R stereo pair with R
RaudioRight-channel output: the dry signal blended with the wet cascade per MIX. Independent of L in both directions — measured max|L−R| = 0.000e+0 for a mono source and zero cross-talk for two different sources.
audio signal; L/R stereo pair with L

controls

controlwhat it does
DecayPer-tap colour-decay (0..1): progressively tapers each later stage's wet level and adds in-loop tanh drive plus high-frequency loss, so the repeats darken and degrade as they fade — the 'destructive', dub-delay character. ⚠ IT IS THREE CONTROLS AT ONCE AND ITS NAME SAYS ONE. Measured wet-only: a LEVEL control (peak 2.0000 at 0 down to 0.0381 at 1, ~22 dB), a TONE control (spectral centroid 1040 Hz → 125 Hz), and — because the drive it adds sits INSIDE each feedback loop with small-signal gain 1 + DECAY × (1+stage) × 0.8, up to 4.2 at the last stage — the other half of the stability boundary. At the shipped FEEDBACK of 0.5 the boundary is DECAY 0.29: turning a 'darkening' dial from 0.2 to 0.35 is what makes the module a drone.
DelayBase tap time in seconds, log-scaled 1 ms..1.5 s — the spacing of the first echo (the cascade stages derive from it, each running at a quarter of it). Measured first-echo time / knob = 1.000 from 3 ms up. Summed with the DELAY CV input. ⚠ THE BOTTOM OF THE DIAL IS A FLOOR: each stage clamps at 0.5 ms, so the cascade cannot go below 2 ms and every setting from the 1 ms minimum up to 2 ms renders BIT-IDENTICALLY — about 9 % of the log travel. It also sets how FAST a tail fades rather than whether it does: at a fixed FEEDBACK and DECAY the same loop gain loses 47 dB/s at 0.15 s and 7 dB/s at 1.0 s, because the round trip is DELAY/4.
FeedbackFeedback amount fed to EVERY stage (0..1) — the largest authority on the module (25.6 dB of RMS span across its travel). ⚠ IT IS HALF OF A STABILITY BOUNDARY, not an amount control. Each stage multiplies it by 0.995 and by its own in-loop drive (see DECAY), so the loop gain is FEEDBACK × 0.995 × (1 + DECAY × 4 × 0.8); when that reaches 1 the echoes NEVER DECAY. At the shipped DECAY of 0.2 the boundary is FEEDBACK 0.59 — inside the normal working range of the dial. It never self-oscillates from nothing (feedback 1 with no input renders bit-exact silence): it needs a seed, and once seeded it keeps it.
MixDry / wet balance (0..1): 0 is the clean input, 1 is the cascade only, between crossfades the two. It is the only control provably OUTSIDE every feedback loop — measured, it moves the level 9.8 dB and the tail length 0.00 s. ⚠ It is also what turns the wet path's internal ±2 clamp into an output clip: at DECAY 0 / FEEDBACK 0.9 / MIX 1 a sustained source measures peak 2.0000 with 84 % of samples past full scale, where the same patch at the shipped MIX 0.5 measures 1.30.
PitchUpPer-stage upward pitch shift (0..0.2). At 0 the internal varispeed grain shifter is bypassed entirely and the echoes repeat at pitch; above 0 each successive stage is transposed up by a compounding ratio, so content that traverses stages 1-3 climbs by (1+PITCH)^6 — at 0.1 that is +990 cents, most of an octave, which no 0..0.2 linear dial hints at. ⚠ IT IS ALSO A TIME CONTROL, AND IT IS DISCONTINUOUS AT ZERO: each engaged shifter seeds its read lag at half of a 30 ms grain window, so the instant PITCH leaves 0 the three engaged stages insert 45.000 ms between the hit and the first echo (measured to the sample at PITCH = 1e-9), after which the offset wanders anywhere in 16.6-25.2 ms with the grain phase. ⚠ AND IT COSTS 15-28 dB of wet level: the two grain taps sum with unity GAIN but read content 15 ms apart, so their POWER sum is at best 3 dB down per engaged stage. Set it, do not ride it.

source

charlottes-echos.ts on GitHub.

Generated from packages/web/src/lib/{audio,video}/module-registry.ts · repo