writeseq
writeseq · modulation · schema v1RECORDING step-sequencer: the app's usual step sequencer PLUS live recording from a CV/gate source (e.g. MIDI CV BUDDY / a mini-keyboard via MIDI→CV). The incoming CV (pitch, 0V = C4) + GATE pass through to the outputs at all times (live monitoring) ALONGSIDE sequenced playback — a held live gate WINS over the sequenced step. Arm RECORD (the rec gate input also toggles arm) and each incoming gate writes its sampled pitch+gate to the step nearest the press (snap-to-nearest quantization); recording starts by jumping to step 1. If the sequencer is STOPPED but armed, a gate event STARTS the sequencer + recording (internal clock only — an external clock that is stopped emits no pulses, so a gate there only passes through). NOT overdubbing: record runs one pass up to LENGTH steps then stops recording (auto-disarms) and loops to play through. OVERDUB: keep looping, layering new events on top. STEP CLOCK: an external clock patched into CLOCK IN drives one step per rising edge (respecting its timing); unpatched, WRITESEQ runs its own internal BPM. RUN/RECORD state is INDEPENDENT of TIMELORDE — it is armed + started by the user, never auto-started/stopped with the system clock. Outputs PITCH (V/oct) + GATE (the sequenced outputs, with live pass-through) + CLOCK (a 10 ms pulse per advance). Sharing one clock with a drum module (e.g. DRUMSEQZ / DRUMMERGIRL) records a key in time with the beat onto the SAME step the drum hits — no off-by-one in either direction. The data model reserves a per-step shift field for a future swing-to-1/4-step feature (not yet implemented).
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
play_cv | gate | A rising edge toggles play/stop (each pulse flips the run state). gate / trigger |
reset_cv | gate | A rising edge snaps the playhead back to step 1 and resets the record position. gate / trigger |
queue1_cv | gate | A rising edge queues pattern slot 1 — applied at the end of the current loop, then plays it from step 1 (no-op if empty). gate / trigger |
queue2_cv | gate | A rising edge queues pattern slot 2 — applied at the end of the current loop (no-op if empty). gate / trigger |
queue3_cv | gate | A rising edge queues pattern slot 3 — applied at the end of the current loop (no-op if empty). gate / trigger |
queue4_cv | gate | A rising edge queues pattern slot 4 — applied at the end of the current loop (no-op if empty). gate / trigger |
cv | pitch | Pitch CV in (V/oct, 0V = C4). While recording, it's sampled at each incoming gate edge and written to the nearest step; whenever a live gate is held it also passes straight through to the pitch output. V/oct pitch CV |
gate | gate | Gate in. A rising edge while recording writes the sampled pitch+gate to the nearest step; a rising edge while stopped and record-armed starts the sequencer and recording; and whenever the gate is held high it passes through live and overrides the sequenced output (so you can play over playback). gate / trigger |
clock | gate | External step clock: each rising edge advances the playhead one step. While patched it sets the pace (and runs the sequencer); unpatch to fall back to the internal BPM. Recording quantizes to the same step the clock is hitting. gate / trigger |
rec | gate | Record arm: a rising edge toggles the record-arm state on/off (the same latch as the card's REC button), so you can drop in and out of recording hands-free from a footswitch or gate. gate / trigger |
outputs
| id | cable | what it does |
|---|---|---|
pitch | pitch | The current step's note as pitch CV (V/oct), transposed by the octave control — unless a live gate is held in, in which case the live pitch passes straight through and wins. V/oct pitch CV |
gate | gate | Goes high on each ON step (its width set by the gate-length control) — unless a live gate is held in, which passes through and overrides the sequenced gate. gate / trigger |
clock | gate | A short ~10 ms pulse on every step advance — chain it into another sequencer's clock in. gate / trigger |
params
| id | label | range | default | curve |
|---|---|---|---|---|
bpm | BPM | 30..300 | 120 | linear |
length | Len | 1..128 | 16 | discrete |
octave | Oct | -2..2 | 0 | discrete |
gateLength | Gate | 0.1..0.95 | 0.5 | linear |
isPlaying | Play | 0..1 | 0 | discrete |
recArm | Rec | 0..1 | 0 | discrete |
overdub | Ovd | 0..1 | 0 | discrete |
controls
| control | what it does |
|---|---|
| BPM | Internal tempo in beats per minute (each step is a 16th note, so the step rate is 4× the BPM), used only when nothing is patched into CLOCK IN. |
| Gate | How much of each step the gate stays high, from a short 10% stab to a near-legato 95% (it always closes just before the next step). |
| Play | The run/stop state: 1 plays, 0 stops and forces the gate low; starting playback snaps the playhead back to step 1. Same control as the card's PLAY button. |
| Len | How many steps the playhead walks before wrapping to step 1; raising it past 16 reveals more pages. A one-shot recording captures exactly this many steps before stopping. |
| Oct | Shifts every step's pitch up or down by whole octaves at once (-2 to +2). |
| Ovd | Recording mode (the card's OVD button): off = one-shot, which clears the pattern and records exactly one pass of `length` steps then auto-stops; on = overdub, which layers newly played notes on top of the existing pattern without clearing and keeps looping until you disarm. |
| Rec | Arms recording (1) or disarms it (0); the card's REC button. While armed, incoming gates write the sampled pitch onto the nearest step. Also togglable via the rec input. |
| Writeseq pitch {n} | Step {n}'s note — the editable pitch box for this step. As well as being filled in by RECORD (a played CV/gate writes the sampled pitch onto the nearest step), you can type a note name here directly (e.g. C3, F#4, Bb2) or focus it and use the arrow keys to fly across the grid; Enter commits and jumps to the next step's box. The box shows the canonical note name, glows green while valid and red while not, and clearing it (empty) makes the step a rest even if its gate is lit. The note is emitted as V/oct on the PITCH output, shifted by the OCT control. |
source
writeseq.ts on GitHub.