twotracks

twotracks · effects · schema v6

Two-reel tape loop emulator with record, overdub, scrub and Lofi character. Phase 1 ships reel A: patch stereo audio into L/R inputs, arm with the ARM gate or REC gate, and the tape records destructively (REC mode) or additively (OVERDUB mode, with a DECAY knob that fades previous passes by 0.50–0.90× per loop). A draggable blue playhead scrubs the cursor within the current window (START/END markers); rate is varispeed (1.0 = forward unity, negative = reverse, 0 = frozen). Mode toggle selects TAPE (one-shot: record one pass then play, play once then stop) or LOOP TAPE (loops continuously). Transport state is reflected by REC/ARM/PLAY/OVERDUB LEDs. Gate inputs for all transport events so gates or sequencers can drive the transport via cable. Save tape exports the current buffer as a stereo 48 kHz 16-bit WAV. Phase 2 adds reel B, EQ, and filter; Phase 3 adds Lofi saturation; Phase 4 adds CV ins and persistence polish.

A two-reel tape-loop emulator — two independent tape decks (reel A and reel B) in one box, mixed to a stereo output. Each reel records the stereo audio at its inputs onto a fixed-length 'blank tape', then plays the captured take back: you set a loop window (START / END) within the tape, a tape RATE (which slows, speeds, or reverses playback and pitch like a varispeed reel), an ECHOES feedback amount for tape-echo-style repeats, and per-reel 3-band EQ + a multimode filter to colour the playback. Recording is driven hands-free by the per-reel REC START / REC ARM / OVERDUB gate inputs (or the on-card transport), and OVERDUB layers new input onto the existing loop sound-on-sound. The two reels are blended by the global A/B crossfader, can cross-feed into each other (A→B and B→A) for runaway tape-loop textures, and a global LOFI option degrades the sound; MONITOR passes the live input through. The card draws each reel's live waveform + playhead and can export a take to WAV.

the faceplate

twotracksaudio_l_in_aaudioaudio_r_in_aaudiorec_start_agaterec_arm_agateoverdub_agateaudio_l_in_baudioaudio_r_in_baudiorec_start_bgaterec_arm_bgateoverdub_bgateout_laudioout_raudioaudiocvgatepitch
10 inputs · 2 outputs · 31 params

inputs

idcablewhat it does
audio_l_in_aaudioLeft audio into reel A's record path. While reel A is recording or overdubbing, this is what gets written to the tape; pairs with the right input.
audio signal
audio_r_in_aaudioRight audio into reel A's record path, partnering the left input.
audio signal
rec_start_agateReel A record START gate: a rising edge starts (or restarts) recording onto reel A from the head of the tape. Drive it from a clock/button to capture a take hands-free.
gate / trigger
rec_arm_agateReel A record ARM gate: a rising edge arms reel A so the next pass (or the next REC START) drops into record — the "ready to record" toggle.
gate / trigger
overdub_agateReel A OVERDUB gate: a rising edge toggles overdub (sound-on-sound) mode, layering new input onto the existing loop instead of erasing it.
gate / trigger
audio_l_in_baudioLeft audio into reel B's record path. While reel B is recording or overdubbing, this is what gets written to the tape; pairs with the right input.
audio signal
audio_r_in_baudioRight audio into reel B's record path, partnering the left input.
audio signal
rec_start_bgateReel B record START gate: a rising edge starts (or restarts) recording onto reel B from the head of the tape. Drive it from a clock/button to capture a take hands-free.
gate / trigger
rec_arm_bgateReel B record ARM gate: a rising edge arms reel B so the next pass (or the next REC START) drops into record — the "ready to record" toggle.
gate / trigger
overdub_bgateReel B OVERDUB gate: a rising edge toggles overdub (sound-on-sound) mode, layering new input onto the existing loop instead of erasing it.
gate / trigger

outputs

idcablewhat it does
out_laudioLeft channel of the mixed stereo output — reels A and B summed per the A/B crossfader (and any cross-feed), post per-reel EQ/filter and the global LOFI stage.
audio signal
out_raudioRight channel of the mixed stereo output, the partner of OUT L.
audio signal

params

idlabelrangedefaultcurve
rate_aRate A-3..31linear
mode_aMode A0..11discrete
echoes_aEchoes A1..53discrete
start_aStart A0..10linear
end_aEnd A0..11linear
overdub_flag_aOverdub A0..10discrete
playhead_aPlayhead A0..10linear
eqLow_aEQ Low A-12..12dB0linear
eqMid_aEQ Mid A-12..12dB0linear
eqHigh_aEQ Hi A-12..12dB0linear
filterMode_aFlt Mode A0..30discrete
cutoff_aCutoff A20..20000Hz20000log
reso_aReso A0..10linear
rate_bRate B-3..31linear
mode_bMode B0..11discrete
echoes_bEchoes B1..53discrete
start_bStart B0..10linear
end_bEnd B0..11linear
overdub_flag_bOverdub B0..10discrete
playhead_bPlayhead B0..10linear
eqLow_bEQ Low B-12..12dB0linear
eqMid_bEQ Mid B-12..12dB0linear
eqHigh_bEQ Hi B-12..12dB0linear
filterMode_bFlt Mode B0..30discrete
cutoff_bCutoff B20..20000Hz20000log
reso_bReso B0..10linear
abA/B0..10linear
a2bA→B0..10linear
b2aB→A0..10linear
lofiLofi0..30discrete
monitorMonitor0..10discrete

controls

controlwhat it does
A→BCross-feed A→B (0..1) — routes reel A's playback into reel B's input/record path; with overdub this builds layered, evolving tape loops (raise carefully — it can run away).
A/BA/B crossfade (0..1) — blends the two reels in the output: 0 = reel A only, 0.5 = both at unity, 1 = reel B only.
B→ACross-feed B→A (0..1) — routes reel B's playback into reel A's input/record path (the mirror of A→B).
Cutoff AReel A filter CUTOFF (20 Hz..20 kHz, log) — the corner of reel A's playback filter (active per FILTER MODE).
Cutoff BReel B filter CUTOFF (20 Hz..20 kHz, log) — the corner of reel B's playback filter (active per FILTER MODE).
Echoes AReel A ECHOES (1..5) — sets the feedback/repeat behavior: how many times the recorded loop re-circulates (and decays) like a tape echo.
Echoes BReel B ECHOES (1..5) — sets the feedback/repeat behavior: how many times the recorded loop re-circulates (and decays) like a tape echo.
End AReel A loop END (0..1) — the right edge of the playback window within the recorded tape.
End BReel B loop END (0..1) — the right edge of the playback window within the recorded tape.
EQ Hi AReel A EQ HIGH (±12 dB) — high-band shelf on reel A's playback.
EQ Hi BReel B EQ HIGH (±12 dB) — high-band shelf on reel B's playback.
EQ Low AReel A EQ LOW (±12 dB) — low-band shelf on reel A's playback.
EQ Low BReel B EQ LOW (±12 dB) — low-band shelf on reel B's playback.
EQ Mid AReel A EQ MID (±12 dB) — mid-band on reel A's playback.
EQ Mid BReel B EQ MID (±12 dB) — mid-band on reel B's playback.
Flt Mode AReel A FILTER MODE — off / low-pass / high-pass / band-pass selector for reel A's playback filter.
Flt Mode BReel B FILTER MODE — off / low-pass / high-pass / band-pass selector for reel B's playback filter.
LofiLOFI degradation (0..3) — a global tape-degradation amount that adds wow/flutter/bit-grit character; 0 = clean.
Mode AReel A MODE (LOOP vs ONE-SHOT) — whether the reel loops continuously or plays its take once.
Mode BReel B MODE (LOOP vs ONE-SHOT) — whether the reel loops continuously or plays its take once.
MonitorMONITOR (on/off) — passes the live input signal through to the output so you can hear what you're about to record (input monitoring), independent of playback.
Overdub AReel A overdub state flag (0/1) — the persisted on/off of overdub mode (the button form of the OVERDUB gate); when on, new input layers onto the existing loop.
Overdub BReel B overdub state flag (0/1) — the persisted on/off of overdub mode (the button form of the OVERDUB gate); when on, new input layers onto the existing loop.
Playhead AReel A playhead position (0..1) — the live read position on the tape; scrub it to jump within the take (the card draws it on the waveform).
Playhead BReel B playhead position (0..1) — the live read position on the tape; scrub it to jump within the take (the card draws it on the waveform).
Rate AReel A tape RATE (−3..+3) — playback/record speed and direction; 1 = normal, fractions slow it down and pitch it lower, negatives play the tape backwards.
Rate BReel B tape RATE (−3..+3) — playback/record speed and direction; 1 = normal, fractions slow it down and pitch it lower, negatives play the tape backwards.
Reso AReel A filter RESONANCE (0..1) — emphasis at reel A's filter cutoff.
Reso BReel B filter RESONANCE (0..1) — emphasis at reel B's filter cutoff.
Start AReel A loop START (0..1) — the left edge of the playback window within the recorded tape (you can't drag it past the playhead while rolling).
Start BReel B loop START (0..1) — the left edge of the playback window within the recorded tape (you can't drag it past the playhead while rolling).

source

twotracks.ts on GitHub.

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