polyseqz
polyseqz · modulation · schema v1Polyphonic chord sequencer. 32-step grid; each step holds a root note + chord quality (maj/min/maj7/min7/dom7/sus2/sus4/dim/aug) + inversion (0/1/2) + voicing (closed/open/spread). Outputs the full 5-voice chord on a polyPitchGate cable. HUMANIZE knob adds per-voice timing offsets (linear/uniform at low values, chaotic clusters at high values) for a human-pianist feel. An upper-right S&H toggle (ON by default) bakes in a gate-sampled Sample & Hold on the per-lane pitch CV: each lane's pitch is pinned to the un-jittered nominal step time (keeping only a ~1-sample lead before its gate) and latches to its own gate edge, so the pitch holds cleanly while the GATE keeps its humanize jitter. Turn S&H OFF for the legacy pre-gate-lead write where pitch can drift ahead of the gate under humanize. Tested as the chord source for DX7-style polyphonic synth voices.
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 restarts the progression. 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 |
clock | gate | External clock: each rising edge advances the playhead exactly one step (one chord). While anything is patched here the internal BPM is ignored and the incoming pulses set the pace (and run the sequencer); unpatch to fall back to the BPM clock. gate / trigger |
humanize_cv | cv | CV that modulates the Humanize amount (0..1, summed with the knob): a positive voltage adds more per-voice timing jitter so the chord's notes don't all strike on exactly the same instant. Patch an LFO or envelope here to make the looseness breathe. control voltage (CV); modulates humanize (additive offset — ±1 CV sweeps the full range, centered on the knob) |
outputs
| id | cable | what it does |
|---|---|---|
poly | polyPitchGate | The current step's chord as a 5-voice POLY cable (each lane carries its own pitch CV + gate). Patch into a poly-aware voice (RIOTGIRLS / DX7 / POLYHELM / any module with a poly input) so each chord tone gets its own voice; a mono pitch input automatically receives just lane 0, the chord's root. poly pitch+gate bus; 10-channel poly bus (5 pitch + 5 gate lanes) |
gate | gate | A convenience mono gate that goes high while ANY voice of the current chord is sounding and low between chords — drive one shared ADSR/VCA from it without unpacking the poly cable. Its high time within the step follows the gate-length control. gate / trigger |
clock | gate | A short ~10 ms pulse on every step advance, regardless of whether the step is on — chain it into another sequencer's clock in. gate / trigger |
params
| id | label | range | default | curve |
|---|---|---|---|---|
bpm | BPM | 30..300 | 90 | linear |
length | Len | 1..128 | 8 | discrete |
octave | Oct | -2..2 | 0 | discrete |
gateLength | Gate | 0.1..0.95 | 0.6 | linear |
humanize | Hum | 0..1 | 0 | linear |
isPlaying | Play | 0..1 | 0 | discrete |
snh | s&h | 0..1 | 1 | discrete |
controls
| control | what it does |
|---|---|
| BPM | Internal tempo in beats per minute (each step is an 8th note here — slower than the mono sequencer's 16th-note grid, which suits chords), used only when nothing is patched into CLOCK IN. |
| Gate | How much of each step the voices' gates stay high, from a short 10% stab to a near-legato 95% (always closing just before the next step). |
| Hum | Spreads each voice's onset slightly in time so a chord strums/loosens instead of hitting perfectly together: 0 is machine-tight, higher values add more random per-voice jitter (up to a few tens of milliseconds). Also modulatable via the humanize_cv input. |
| Play | The run/stop state: 1 plays, 0 stops and forces the gates low; starting playback snaps the playhead back to step 1. Same control as the card's PLAY button. |
| Len | How many steps (chords) the playhead walks before wrapping to step 1; raising it past 16 reveals more pages. |
| Oct | Shifts every chord up or down by whole octaves at once (-2 to +2); the chord transposes as a block so its voicing stays intact. |
| Polyseqz root {n} | Step {n}'s ROOT note — the editable pitch box that sets the bottom note of this step's chord. Type a note name (e.g. C3, F#4, Bb2) or focus it and use the arrow keys to move across the step row; Enter commits and advances 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 chord's quality, inversion and voicing badges build the rest of the chord UP from this root, which is then transposed by the OCT control and broadcast across the poly pitch lanes. |
| s&h | Sample & hold on the per-voice pitch CV, on by default (the card's S&H face button): when on, each voice's pitch is latched cleanly at its gate edge (pinned to the un-jittered step time) so the note is stable when the gate rises even while Humanize jitters the timing; off reverts to the legacy behavior where pitch can drift ahead of the gate under Humanize. |
source
polyseqz.ts on GitHub.