cofefve delay

cofefve · effects · schema v1

Analog BBD/tape-style stereo delay — a clean-room, OWN-CODE engine (the replacement for the retired Cocoa Delay; its own DSP, no GPL lineage). A 10-second stereo delay line read at a fractional position with 4-point Catmull-Rom cubic interpolation; the read time is modulated two ways: a WOW LFO (AMOUNT × sin at FREQUENCY) and a slow random FLUTTER drift walk (AMOUNT × random, SPEED) on a fixed-seed PRNG (deterministic). Feedback is bipolar (−1..+1), clamped just below unity for stability, with a STEREO offset that skews the L/R read times apart and a PAN with three modes (STATIC rotation, PING-PONG feedback cross, CIRCULAR rotating the wet image). DUCKING sidechains the wet level by an envelope follower on the dry input (AMOUNT, ATTACK, RELEASE). A multi-mode TONE filter (1/2/4-pole cascade or state-variable) low-cuts + high-cuts inside the feedback path, and a stateful tanh DRIVE saturator (GAIN / MIX / FILTER, run 1–16 ITERATIONS) dirties the loop. DRY + WET set the output mix. The read pointer eases toward its target so TIME changes glide like a tape motor. TEMPO SYNC locks the delay time to a musical division (1/4, 1/8, dotted, triplet…) of a clock period measured from pulses on the CLOCK gate input; the CLK SRC dropdown labels whether that clock is the rack SYSTEM clock (TIMELORDE) or external MIDI (MIDICLOCK). When sync is Off the TIME knob is free-running seconds. CV inputs cover the musical params: time, feedback, mix, drive, WOW amount, FLUTTER, pan, ducking.

A clean-room, own-code analog BBD/tape-style stereo delay (the replacement for the retired Cocoa Delay — its own DSP, no GPL lineage). Audio is written into a 10-second stereo delay line and read back at a fractional, modulated position with 4-point Catmull-Rom cubic interpolation. The read time is the base delay (free-running TIME, or a musical division of a clock beat when SYNC is on), warped per-sample by a WOW sine LFO and a slow random FLUTTER drift, with bipolar feedback feeding the echoes back through an in-loop multi-mode TONE filter and a stateful tanh DRIVE saturator; a STEREO offset skews the L/R read times to widen the image, PAN modes spread the wet signal, DUCKING sidechains the wet level off the dry input, and DRY/WET set the final mix. Mental model: one tape/bucket-brigade echo where almost every knob is also voltage-controllable, and where a patched CLK pulse or the rack/MIDI tempo can lock the delay to the beat. The read pointer eases toward its target so TIME changes glide like a tape motor rather than clicking.

the faceplate

cofefve delayinLaudioinRaudioclockgatetime_cvcvfeedback_cvcvmix_cvcvdrive_cvcvlfo_cvcvdrift_cvcvpan_cvcvduck_cvcvoutLaudiooutRaudioaudiocvgatepitch
11 inputs · 2 outputs · 24 params

inputs

idcablewhat it does
inLaudioLeft audio into the delay — together with inR this is the dry signal that is written to the delay line, tapped through the wet path, and summed back into the output.
audio signal; L/R stereo pair with inR — L-only auto-duplicates to R
inRaudioRight audio into the delay; an independent channel that normals to inL when left unpatched (a mono source into inL alone feeds both channels). Patch both inL and inR for a true stereo input, or use the module's stereo auto-wire.
audio signal; L/R stereo pair with inL
clockgateExternal clock/trigger: when SYNC is on, the delay measures the samples between rising edges (level crossing up through ~0.5) of pulses here and locks the delay time to that measured period times the chosen division — it takes two rising edges to establish a period, so the lock engages on the second pulse. A patched clock ALWAYS wins over both the rack SYSTEM tempo and MIDI clock; when SYNC is Off this input has no audible effect and TIME is free-running.
gate / trigger; trigger — fires once per rising edge
time_cvcvCV modulation of the TIME knob (delayTime), summed into it with a log-scaled response so a -1..+1 CV sweeps the base delay across its full log range; sweeping it gives classic tape pitch-bend / smear on the echoes.
control voltage (CV); modulates delayTime (multiplicative ≈ octaves — ±1 CV spans the param’s log range)
feedback_cvcvCV modulation of FEEDBACK, summed into the knob (linear). Pushes the regeneration amount up or down per-sample; since feedback is bipolar (-1..+1), CV can drive it negative to flip the polarity of each repeat.
control voltage (CV); modulates feedback (additive offset — ±1 CV sweeps the full range, centered on the knob)
mix_cvcvCV modulation of the WET output level (targets wetVolume, linear). Use it to fade the echoes in and out under control voltage; the dry level is unaffected.
control voltage (CV); modulates wetVolume (additive offset — ±1 CV sweeps the full range, centered on the knob)
drive_cvcvCV modulation of the in-loop saturation amount (targets driveGain, linear). Raises or lowers how hard the feedback path is pushed into the stateful tanh saturator per-sample.
control voltage (CV); modulates driveGain (additive offset — ±1 CV sweeps the full range, centered on the knob)
lfo_cvcvCV modulation of the LFO (WOW) AMOUNT (lfoAmount, linear) — the depth with which the internal time LFO wobbles the delay read position. It does not change the LFO rate, only how much it warps the time.
control voltage (CV); modulates lfoAmount (additive offset — ±1 CV sweeps the full range, centered on the knob)
drift_cvcvCV modulation of DRIFT (FLUTTER) AMOUNT (driftAmount, linear), the depth of the slow random tape-drift walk applied to the read time. More CV = more wow/flutter wander.
control voltage (CV); modulates driftAmount (additive offset — ±1 CV sweeps the full range, centered on the knob)
pan_cvcvCV modulation of the PAN angle (pan, linear). Its audible effect depends on PAN MODE: it rotates the static placement, biases the ping-pong, or drives the circular wet-image rotation.
control voltage (CV); modulates pan (additive offset — ±1 CV sweeps the full range, centered on the knob)
duck_cvcvCV modulation of DUCK AMOUNT (duckAmount, linear) — how strongly the wet level is pulled down by the envelope follower riding the dry input. More CV = the echoes get out of the way harder when dry signal is present.
control voltage (CV); modulates duckAmount (additive offset — ±1 CV sweeps the full range, centered on the knob)

outputs

idcablewhat it does
outLaudioLeft of the stereo output: dry × DRY level + ducked/panned wet × WET level, the left half of the combined dry+echo signal.
audio signal; L/R stereo pair with outR
outRaudioRight of the stereo output: dry × DRY level + ducked/panned wet × WET level, the right half of the combined dry+echo signal.
audio signal; L/R stereo pair with outL

params

idlabelrangedefaultcurve
delayTimeTime0.001..2s0.2log
tempoSyncSync0..190discrete
clockSourceClk Src0..10discrete
syncPeriodSyncPer0..30s0linear
lfoAmountLFO Amt0..0.50linear
lfoFrequencyLFO Freq0.1..10hz2log
driftAmountDrift Amt0..0.050.001linear
driftSpeedDrift Spd0.1..101log
feedbackFeedback-1..10.5linear
stereoOffsetStereo-0.5..0.50linear
panPan?..?0linear
panModePan Mode0..20discrete
duckAmountDuck Amt0..100linear
duckAttackAttack0.1..10010log
duckReleaseRelease0.1..10010log
filterModeFilt Mode0..30discrete
lowCutLow Cut0.01..10.75linear
highCutHigh Cut0.001..0.990.001linear
driveGainGain0..100.1linear
driveMixD.Mix0..11linear
driveCutoffD.Filt0.01..11linear
driveIterationsIters1..161discrete
dryVolumeDry0..21linear
wetVolumeWet0..20.5linear

controls

controlwhat it does
Clk SrcCLK SRC — picks which tempo reference SYNC follows when no clock cable is patched: SYSTEM reads the rack's TIMELORDE BPM, MIDI follows incoming MIDI clock (0xF8). Selecting MIDI is what first requests browser MIDI access; SYSTEM never prompts. A patched CLK input overrides either.
TimeTIME — the base delay length in seconds (0.001–2.0 s, log). Used directly when SYNC is Off; when SYNC is on it is only the fallback if no clock/tempo is available. WOW, FLUTTER and STEREO offset all warp this value before the line is read, and the read pointer eases toward it so changes glide.
Drift AmtFLUTTER (DRIFT AMOUNT) — depth of a slow random walk on the delay time (0–0.05), the tape wow/flutter character. Higher = more wandering, less stable pitch on the echoes. The walk is a fixed-seed PRNG so renders are deterministic.
Drift SpdFLUTTER SPEED (DRIFT SPEED) — how quickly the random drift walk picks new targets (0.1–10, log). Faster gives jittery flutter, slower gives long lazy pitch drift.
D.FiltDRIVE FILTER — post-saturator low-pass cutoff (0.01–1.0, normalized; default 1.0 = open) that tames the harshness the drive adds.
GainDRIVE GAIN — how hard the feedback path is pushed into the stateful tanh saturator (0–10). 0 bypasses drive entirely (clean loop); higher adds progressively dirtier saturation that builds up over repeats.
ItersDRIVE ITERATIONS — how many times the saturate-then-filter stage runs in series per sample (1–16). More iterations stack more saturation and filtering for a thicker, more compressed drive.
D.MixDRIVE MIX — wet/dry blend across the saturator (0–1), how much of the saturated signal replaces the clean one inside the loop.
DryDRY — level of the unprocessed input passed straight to the output (0–2.0, default 1.0). Set to 0 for a fully wet send/return.
Duck AmtDUCK AMOUNT — how strongly the wet level is ducked by an envelope follower on the dry input sum (0–10). At 0 there is no ducking; higher values make the echoes recede whenever dry signal is playing.
AttackDUCK ATTACK — how fast the ducking envelope clamps the wet down when dry signal arrives (0.1–100 ms, log).
ReleaseDUCK RELEASE — how fast the wet level recovers after the dry signal falls away (0.1–100 ms, log).
FeedbackFEEDBACK — bipolar regeneration amount (-1..+1, default 0.5). Higher magnitude = more/longer repeats; negative values invert the polarity of each fed-back repeat for a hollower tone. Internally clamped just below unity so the loop stays stable.
Filt ModeFILTER MODE — the topology of the in-feedback-loop tone filter: 1-pole, 2-pole, 4-pole (cascaded one-poles), or State-variable. Steeper poles darken the repeats more; the state-variable mode adds a mild resonant character.
High CutHIGH CUT — the in-loop high-pass cutoff applied to each repeat (0.001–0.99, normalized; default 0.001 ≈ off). Raising it thins out the lows of successive echoes. (Label/role: this is the HP stage in the loop.)
LFO AmtWOW (LFO AMOUNT) — depth of the internal sine LFO that warps the delay read time (0–0.5). At 0 the LFO does nothing; higher values give pitch wobble / chorus-like movement on the echoes.
LFO FreqWOW RATE (LFO FREQUENCY) — rate of the time-warp LFO (0.1–10 Hz, log). Sets how fast the delay-time wobble cycles.
Low CutLOW CUT — the in-loop low-pass cutoff applied to each repeat (0.01–1.0, normalized; default 0.75, where 1.0 is wide open). Lower values darken successive echoes as they regenerate. (Despite the 'low cut' label it is the LP stage in the loop, matching the classic tape-echo tone control.)
PanPAN — wet-image rotation angle (-π/2..+π/2). What it does depends on PAN MODE: static placement, ping-pong bias, or the amount of circular rotation applied to the wet signal.
Pan ModePAN MODE — Static (a fixed rotation by PAN), Ping-Pong (crosses the feedback so repeats bounce side to side), or Circular (continuously rotates the wet stereo image at a rate set by PAN).
StereoSTEREO — skews the left and right read times apart (-0.5..+0.5) by shortening one channel's delay and lengthening the other, widening the stereo image of the echoes. 0 keeps both channels at the same delay (L and R identical).
SyncPerInternal, not on the card: the seconds-per-beat the main thread bridges in for the selected CLK SRC (SYSTEM/MIDI), since the audio worklet can't read those sources directly. 0 means none available, in which case it falls back to the free-running TIME.
SyncSYNC — Off (index 0) means TIME is free-running; any other setting locks the delay to a musical division of one beat (1, dotted/triplet variants… down to 1/64T). The beat comes from a patched clock pulse, else the chosen CLK SRC tempo.
WetWET — level of the delayed/echo signal in the output (0–2.0, default 0.5), the amount ducking pulls down and what mix_cv modulates.

source

cofefve.ts on GitHub.

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