ringback

ringback · effects · schema v1

Stereo crush effect — the TWOTRACKS record-time artifact, extracted and made intentional. While TWOTRACKS fresh-records it writes the live input into INTEGER ring-buffer cells (sample-quantized) at a fractional, varispeed write/read cursor, then reads those same cells back with LINEAR INTERPOLATION at the fractional cursor; the integer-cell write versus the interpolated read makes the read-back a decimated, aliased copy of the input — a metallic "bitcrushed" tone. (That read-back used to leak into TWOTRACKS' monitor while recording, which was a bug; RINGBACK packages the EXACT same mechanism as a deliberate effect.) Stereo in (L IN / R IN) → stereo out (L OUT / R OUT); a mono input is mirrored to both channels. Two independent ring channels (L + R) run the per-sample loop: read = interp(buf, cursor); write buf cells [cursor, cursor+RATE) = input + FEEDBACK·read; cursor += RATE (wrapping the small ring); out = (1−MIX)·input + MIX·read. Four knobs expose the character, all derived directly from the mechanism: RATE (0.05..4, default 0.5) is the write/read cursor advance per sample and the "amount" of the artifact — 1 is the mildest, below 1 the read-back stair-steps and aliases hardest; SIZE (2..4096 samples, default 64, log) is the ring length — a few samples ring like a comb/short metallic resonance, larger sizes become a grainy short-delay smear; FEEDBACK (0..0.98, default 0.3) re-injects the read-back into the ring (the regen "ring" tail), clamped strictly below 1 so it can never self-amplify to infinity; MIX (0..1, default 1) is the dry/wet blend between the clean input and the crushed read-back (0 passes the input through unchanged). The DSP is pure and deterministic (no RNG, no time dependence) so it is stable for VRT/ART; the worklet runs the shared RingChannel core in ringback-core.ts (unit-tested), the same no-mirror discipline as the TWOTRACKS engine. Patch any stereo (or mono) source through it for lo-fi grit, comb-ring resonance, or — at high feedback and small size — a self-oscillating metallic drone.

A stereo crush effect built from the exact glitch that used to make TWOTRACKS' monitor sound bitcrushed while recording, turned into a deliberate instrument. Each channel writes the input into a short ring buffer at an integer-cell varispeed (set by RATE) and reads it back with fractional interpolation at the same moving cursor, with FEEDBACK re-injecting the read-back into the ring. The mismatch between the stair-stepped write and the smooth read produces a crushed, comb-filtered, grainy texture whose character ranges from subtle aliasing to harsh digital smear. RATE sets the crush hardness, SIZE the ring length (comb pitch ↔ grainy smear), FEEDBACK the regenerating tail, and MIX the dry/wet. All four are a-rate, so every knob is CV-patchable.

the faceplate

ringbackin_laudioin_raudioratecvsizecvfeedbackcvmixcvout_laudioout_raudioaudiocvgatepitch
6 inputs · 2 outputs · 4 params

inputs

idcablewhat it does
in_laudioLeft-channel audio into the crush ring buffer. (A mono source is mirrored to both channels.)
audio signal
in_raudioRight-channel audio into the crush ring buffer.
audio signal
ratecvCV that displaces the RATE knob (linear), modulating the varispeed write rate — sweep it for shifting crush intensity and pitched-comb artifacts.
control voltage (CV); modulates rate (additive offset — ±1 CV sweeps the full range, centered on the knob)
sizecvCV that displaces the SIZE knob (log-scaled), modulating the ring length live (comb-filter pitch ↔ grain size).
control voltage (CV); modulates size (multiplicative ≈ octaves — ±1 CV spans the param’s log range)
feedbackcvCV that displaces the FEEDBACK knob, modulating how much read-back re-injects (the regenerating tail amount).
control voltage (CV); modulates feedback (additive offset — ±1 CV sweeps the full range, centered on the knob)
mixcvCV that displaces the MIX knob, modulating the dry/wet crush balance.
control voltage (CV); modulates mix (additive offset — ±1 CV sweeps the full range, centered on the knob)

outputs

idcablewhat it does
out_laudioLeft channel of the crushed stereo output (dry blended with the crushed ring read-back per MIX).
audio signal
out_raudioRight channel of the crushed stereo output.
audio signal

params

idlabelrangedefaultcurve
rateRate0.05..40.5linear
sizeSize2..4096smp64log
feedbackFeedback0..0.980.3linear
mixMix0..11linear

controls

controlwhat it does
FeedbackHow much of the read-back is re-injected into the ring (0..0.98). 0 is a single pass; higher values build a regenerating, resonant crushed tail; near 0.98 it rings for a long time.
MixDry / wet balance (0..1): 0 is the clean input, 1 is full crush, between blends the two.
RateCrush amount via the varispeed write rate (0.05..4). 1 is the mildest (write and read nearly aligned); values below 1 stair-step the write hardest for the coarsest crush; higher values speed the cursor for brighter, pitched artifacts.
SizeRing buffer length in samples, log-scaled 2..4096. Tiny sizes give a high-pitched comb-filter tone; larger sizes spread into a grainy, smeared echo-like texture.

source

ringback.ts on GitHub.

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