six strum

sixstrum · sources

SIX STRUM — a 6-string guitar/bass/harp INSTRUMENT: six of our KARPLUS extended-Karplus-Strong string voices side by side, each behind its own amplitude ADSR, summed to MONO through a tuning-matched resonant BODY. Three ways to play it, all into one engine: STRUM by hand via six edge-trigger inputs NORMALLED low→high (patch only strum #1 to barre all six with one gate; patch #1 and #4 for two independent strum groups; STRUM SPREAD + DIR set the roll speed and down/up/alternate direction); play polyphonically from the POLY input (the 16-lane polyPitchGate cable — lanes 1–6 → strings 1–6, note-on plucks, note-off releases); or feed one root to the mono CHORD pitch-CV input and it voices a real guitar chord across the strings (each string takes the lowest chord-tone at/above its open pitch; the CHORD selector picks maj/min/dom7/maj7/min7/sus4/power5/octaves). Six MUTE gates model a finger laid loosely on a string — while high that string goes dead and near-unpitched (a palm-mute thunk; MUTE depth sets how dead), gate all six to choke the chord. GUITAR/BASS/HARP are NOT hidden presets: they are knob states of this ONE engine — TUNING (open-string set: guitar EADGBE / a low six-string bass / a diatonic harp), REGISTER (octave), RING (string sustain, calibrated to real plucked-string decay research — ~2.5 s guitar, long dark bass, very long harp), MATERIAL (nylon↔steel), PICK POS/TONE/GRAIN (where + how hard it is plucked), STIFF (inharmonicity toward wound/metal), plus SPREAD (per-string detune + always-distinct excitation seeds so a barre chord choruses instead of phase-combing) and BODY (the box resonance). Per-string ADSR: fast ATTACK, SUSTAIN held at 1 so the string's own physical ring IS the sustain, RELEASE bites on note-off / mute. ACCENT is a shared per-hit velocity CV (louder + brighter), plus a per-knob CV input on the voice + strum controls (tone_cv/grain_cv/spread_cv/body_cv sweep PICK TONE/GRAIN, SPREAD, BODY full-range around the knob; strum_cv sweeps the STRUM roll; the DISCRETE dir_cv/chord_cv quantize a −1..+1 CV across the DIR 0..2 and CHORD 0..7 selector indices). Mono out; no per-voice controls beyond the shared panel. Card: a STRUM audition button barres all six strings; the rear PatchPanel groups the inputs per string (strum + mute) plus POLY / CHORD / ACCENT and the PICK · STRUM CV modulators.

A six-string plucked instrument: SIX of our KARPLUS extended-Karplus-Strong string voices side by side — each with its own amplitude ADSR and its own excitation seed, so a simultaneous barre decorrelates instead of phase-combing — summed to ONE mono output, the sum scaled by 1/√(sounding strings) so a six-string chord doesn't pump against a single note, then LEVEL, then a small resonant BODY across the finished mix. Play it three ways. STRUM it by hand: six TRIGGER inputs, NORMALLED low→high, so patching only #1 barres all six (one clock strums the whole chord, staggered by STRUM and DIR). Play it POLYPHONICALLY: the POLY input's first six lanes drive strings 1–6, each lane's 1 V/oct pitch tuning its string and each note-on plucking it. Or feed one root into CHORD and SIX STRUM voices that chord across the strings as a real fretboard shape — every string takes the LOWEST chord tone at or above its own open pitch. Six MUTE gates are a finger laid loosely on a string: while a gate is high that string's ring collapses to a ~50 ms thud and the MUTE knob chokes its level on top; hold all six to choke the chord. It is deliberately a MONO-out instrument (a guitar-amp out) with one shared panel — no per-voice knobs. GUITAR, BASS and HARP are not hidden DSP branches: TUNING picks which open-string set (and which body resonances) the SAME engine uses — E A D G B E, a low six-string B E A D G C, or a C-major C D E G A C harp run — and everything else is knob state: REGISTER (transpose), RING (how long a string sustains), MATERIAL (nylon↔steel), STIFF (inharmonicity), PICK POS / TONE / GRAIN (where and how it is plucked), STRUM + DIR (how rolled the strum is, and from which end), SPREAD (string-to-string detune), BODY (box resonance), and the per-string A/D/S/R — fast ATTACK, SUSTAIN at 1.0 so the STRING's own ring is the sustain, RELEASE on note-off or mute. ACCENT is latched at each strike for per-hit dynamics: louder and brighter. The PRESET control is how you get the three modes in one move: it stamps the whole calibrated knob state — TUNING included — onto the panel, where TUNING on its own only switches the string set + body. (On the classic card that recall is the MODE knob.)

the faceplate

six strumpolypolyPitchGatechordpitchstrum1gatestrum2gatestrum3gatestrum4gatestrum5gatestrum6gatemute1gatemute2gatemute3gatemute4gatemute5gatemute6gateaccentcvtone_cvcvgrain_cvcvspread_cvcvbody_cvcvstrum_cvcvdir_cvcvchord_cvcvoutaudioaudiocvgatepitch
22 inputs · 1 outputs · 19 params

inputs

idcablewhat it does
polypolyPitchGatePOLY note source (the 16-lane polyPitchGate cable): its first six lanes drive strings 1–6 — each lane's pitch tunes its string at 1 V/oct (0 V = C4) and each note-on plucks it, note-off releasing that string's amp envelope. Wire MIDI LANE (poly mode) or a poly sequencer here to play SIX STRUM as a 6-voice instrument. While POLY is patched it OWNS pitch and plucking: the STRUM triggers and the CHORD voicer stand down (the MUTE gates still damp their strings).
poly pitch+gate bus; 10-channel poly bus (5 pitch + 5 gate lanes)
chordpitchCHORD root — a mono 1 V/oct pitch CV that picks WHICH chord: only the root's PITCH CLASS is used (its octave is ignored — REGISTER + TUNING own the octave), voiced by the CHORD-quality selector into maj / min / 7th / …. SIX STRUM lays that chord out as a real fretboard shape: each string plays the lowest chord tone at or above its open pitch, so a rising CV line RE-VOICES the chord by root rather than sliding the whole instrument upward. It is sampled once per audio block (a knob-rate root, not an audio-rate one). Unpatched, the strings ring their open tuning; patched, strum the result with the STRUM inputs — or hold notes on POLY, which overrides it.
V/oct pitch CV
strum1gateSTRUM string 1 — a TRIGGER: one pluck per rising edge, no matter how long the signal stays high. The six STRUM inputs are NORMALLED low→high: an unpatched string follows the nearest PATCHED strum at or below it, so patching ONLY strum 1 barres the whole chord (one trigger strums all six, staggered by the STRUM roll and DIR); a string with no patched strum at or below it is simply never struck. Patch strum 1 and strum 4 to strum two independent groups. (The classic card's ⟋ STRUM button fires exactly this trigger.)
gate / trigger; trigger — fires once per rising edge
strum2gateSTRUM string 2 (a trigger — one pluck per rising edge). Unpatched, it follows strum 1 (see strum1: the six are normalled low→high).
gate / trigger; trigger — fires once per rising edge
strum3gateSTRUM string 3 (a trigger — one pluck per rising edge). Unpatched, it follows the nearest patched strum below it (see strum1).
gate / trigger; trigger — fires once per rising edge
strum4gateSTRUM string 4 (a trigger — one pluck per rising edge). Patch it to lead strings 4–6 as a second strum group; unpatched it follows the nearest patched strum below it (see strum1).
gate / trigger; trigger — fires once per rising edge
strum5gateSTRUM string 5 (a trigger — one pluck per rising edge). Unpatched, it follows the nearest patched strum below it (see strum1).
gate / trigger; trigger — fires once per rising edge
strum6gateSTRUM string 6, the highest string (a trigger — one pluck per rising edge). Unpatched, it follows the nearest patched strum below it (see strum1).
gate / trigger; trigger — fires once per rising edge
mute1gateMUTE string 1 — a GATE (level-sensitive; both edges matter). WHILE it is high a finger lies on string 1: the string's decay collapses to ~50 ms — a dead palm-mute thud instead of a ring — and the MUTE knob chokes its amplitude on top through a ~8 ms smoother, so it damps without a click. In strum/chord mode the rising edge also releases that string's amp envelope; the falling edge frees the string to ring again. Hold all six MUTE inputs to choke the whole chord.
gate / trigger; gate — acts while the level is high (reacts to both edges)
mute2gateMUTE string 2 (a gate). Palm-mutes string 2 while it is held high (see mute1).
gate / trigger; gate — acts while the level is high (reacts to both edges)
mute3gateMUTE string 3 (a gate). Palm-mutes string 3 while it is held high (see mute1).
gate / trigger; gate — acts while the level is high (reacts to both edges)
mute4gateMUTE string 4 (a gate). Palm-mutes string 4 while it is held high (see mute1).
gate / trigger; gate — acts while the level is high (reacts to both edges)
mute5gateMUTE string 5 (a gate). Palm-mutes string 5 while it is held high (see mute1).
gate / trigger; gate — acts while the level is high (reacts to both edges)
mute6gateMUTE string 6 (a gate). Palm-mutes string 6 while it is held high (see mute1).
gate / trigger; gate — acts while the level is high (reacts to both edges)
accentcvACCENT — ONE per-hit velocity CV (0..1) shared by all six strings, LATCHED at each strike and ignored between hits, so an LFO or accent lane here gives every pluck its own dynamics: an accented hit is louder AND brighter (it pushes the pick's own tone up by a quarter of the accent). Unpatched it sits at a musical 0.6, so the strings sound normal without it.
control voltage (CV)
tone_cvcvCV modulation of PICK TONE (linear, centred on the LIVE knob): ±1 displaces it by half its 0..1 range in each direction (clamped), sweeping the plucking agent from soft thumb toward hard pick — from a centred knob that is the whole range. Wire an envelope or LFO for a pick that brightens over a phrase. (Distinct from ACCENT, which latches a per-hit velocity; this moves the knob itself, continuously.)
control voltage (CV); modulates pickTone (additive offset — ±1 CV sweeps the full range, centered on the knob)
grain_cvcvCV modulation of PICK GRAIN (log, centred on the knob — it MULTIPLIES rather than adds): ±1 is ×/÷ √(4 / 0.1) ≈ 6.3, enough to reach either end of the 0.1–4 period span from the default 1, morphing the attack from a near-impulse nail tick to a scraped/bowed noisy onset. Log-scaled so the sweep is even in perceived grain.
control voltage (CV); modulates pickGrain (multiplicative ≈ octaves — ±1 CV spans the param’s log range)
spread_cvcvCV modulation of SPREAD (linear): ±1 displaces the string-to-string detune by half its 0..1 range around the knob — from tight/unison toward a wide chorused barre. An LFO here animates the chorus width.
control voltage (CV); modulates spread (additive offset — ±1 CV sweeps the full range, centered on the knob)
body_cvcvCV modulation of BODY (linear): ±1 displaces the box-resonance mix by half its 0..1 range around the knob, from dry toward a fully resonant body — a wah-like body swell under an envelope.
control voltage (CV); modulates body (additive offset — ±1 CV sweeps the full range, centered on the knob)
strum_cvcvCV modulation of STRUM (the roll amount, linear): ±1 displaces the strum spread by half its 0..1 range around the knob — from a block chord (all six struck together) toward the full ~45 ms rolled strum / harp gliss. Sequence it to alternate tight and rolled strums; DIR still sets the direction.
control voltage (CV); modulates strumSpread (additive offset — ±1 CV sweeps the full range, centered on the knob)
dir_cvcvCV modulation of DIR (DISCRETE): a −1..+1 CV is bucketed across the three strum directions — −1 → 0 DOWN, 0 → 1 UP, +1 → 2 ALTERNATE — so a stepped source flips the strum direction. It only reorders the STRUM stagger; it never plucks anything itself.
control voltage (CV); modulates strumDir (integer buckets — CV selects a discrete step)
chord_cvcvCV modulation of CHORD quality (DISCRETE): a −1..+1 CV is bucketed across the eight chord qualities (−1 → 0 maj … +1 → 7 octaves, the six in between landing on the steps), so a quantizer or sequencer walks the CHORD input's voicing through maj / min / dom7 / maj7 / min7 / sus4 / power5 / octaves. Pure voicing selection — which chord tones the strings take, not the tone.
control voltage (CV); modulates quality (integer buckets — CV selects a discrete step)

outputs

idcablewhat it does
outaudioThe mono instrument output. Each string runs its own amp ADSR and mute choke first; the six are then summed, scaled by 1/√(sounding strings) so a six-string barre sits at the same level as a single note, put through LEVEL, and only THEN through the BODY resonance — the box is the last stage, a wet/dry blend of two bandpasses across the whole mix rather than a per-string filter. Feed a mixer, amp sim or reverb: it is a whole guitar / bass / harp voice on one cable.
audio signal

params

idlabelrangedefaultcurve
registerRegister-24..24st0linear
ringRing0.1..10s2.5log
materialMaterial0..10.55linear
pickPosPick Pos0.02..0.50.17linear
stiffnessStiff0..10.06linear
pickTonePick Tone0..10.6linear
pickGrainPick Grain0.1..41log
attackAttack0.0005..5s0.003log
envDecayDecay0.001..5s0.12log
sustainSustain0..11linear
releaseRelease0.001..5s0.35log
muteDepthMute0..10.5linear
strumSpreadStrum0..10.28linear
strumDirDir0..20discrete
spreadSpread0..10.25linear
bodyBody0..10.35linear
levelLevel-24..12dB0linear
tuningTuning0..20discrete
qualityChord0..70discrete

controls

controlwhat it does
AttackATTACK — the per-string amplitude envelope's attack: a linear ramp to full, 0.5 ms..5 s (log). Near-zero is an instant pluck; raise it for a bowed or harp-like swell. Retriggers are CLICK-SAFE — strumming a string that is still sounding ramps from its CURRENT level instead of resetting to zero (which shortens that one attack, never its slope).
BodyBODY — the instrument's box resonance, mixed in after the string sum (0 = dry, an exact passthrough; 1 = all resonance). Two band-pass resonances follow the TUNING — guitar box ≈ 100/215 Hz, bass cabinet ≈ 58/120 Hz, harp soundboard ≈ 175/330 Hz — adding the acoustic air a bare string lacks.
DecayDECAY — the amplitude envelope's exponential fall from the peak toward SUSTAIN (1 ms..5 s, log). At the 1.0 SUSTAIN default there is nothing to fall to, so it does nothing until you lower SUSTAIN — then it sets how fast the note ducks under its own ring.
LevelLEVEL — output gain in dB (−24..+12), applied to the active-voice-normalized string sum just before the BODY mix. The instrument is already amplitude-bounded by its own string physics and that normalization; use LEVEL to sit it in the mix.
MaterialMATERIAL — the string's loop damping (0 = dark felt/nylon, where even the 2nd partial is heavily damped; 1 = ringing steel/glass). The damping filter's cutoff TRACKS the note (f0 · 2^(0.5 + 5.5 · knob)), so the knob voices the same way on every string. The primary bright↔dark control.
MuteMUTE — how much EXTRA amplitude choke the MUTE gates apply on top of the string damping they already cause (0 = the damped string alone, which still drops to a ~50 ms decay; 1 = choked all the way to silence while the gate is held). It sets how dead the 'finger on the string' reads; the choke follows the gate through a ~8 ms smoother.
Pick GrainPICK GRAIN — the pluck's contact length in PERIODS of the note (0.1 = a near-impulse nail tick, 1 = the classic Karplus-Strong pluck, 4 = a scraped/bowed noisy onset). Measured in periods so the attack reads the same at every pitch, and energy-normalized (∝ 1/√length) so a short tick and a long scrape land at comparable loudness.
Pick PosPICK POS — where along the string it is plucked, as a fraction of the period (0.02 = right at the bridge, thin and bright … 0.5 = hollow dead-centre, where the pick-position comb cancels the even harmonics). 0.12–0.25 is the natural guitar/harp zone.
Pick TonePICK TONE — how hard the plucking agent is: it sweeps the excitation burst's low-pass from 200 Hz (soft thumb or felt, dark onset) up to 10 kHz (hard pick or fingernail, bright). It shapes the ATTACK transient only, never the string itself. ACCENT pushes it up per hit.
ChordCHORD — which chord quality the CHORD input's root is voiced into, an 8-way selector: 0 maj, 1 min, 2 dom7, 3 maj7, 4 min7, 5 sus4, 6 power(5), 7 octaves. Pure voicing: it decides which chord tones the six strings take (each takes the lowest one at or above its own open pitch), not the tone. It does nothing while CHORD is unpatched — bare strings ring their open tuning.
RegisterREGISTER — global transpose in semitones (−24..+24), added to every string at once. The one knob that moves the same tuning and the same chord between bass, guitar and harp octaves.
ReleaseRELEASE — how fast a string's amplitude fades once it is released: 1 ms..5 s (log), exponential from wherever the level currently is. A POLY note-off releases it, and so does a MUTE gate's rising edge in strum/chord mode. Short = a tight choke; long = let it ring past the note-off.
RingRING — how long an un-muted string sustains: 0.1–10 s to −60 dB (log), frequency-compensated (Jaffe–Smith) so the seconds read true at every pitch instead of low notes ringing ten times longer than high ones. Short = staccato; long = open ringing; 2.5 s (the default) is guitar-ish, and the classic card's MODE presets park it at 2.5 / 6 / 9 s for guitar / bass / harp. (In the extreme corner — darkest MATERIAL × longest RING × a high note — the loop-gain cap makes the string decay faster than the knob asks: a physically muted string.)
Sixstrum preset {n}PRESET — the guitar / bass / harp recall, and the one control that makes this the instrument you meant. Picking a mode STAMPS its whole calibrated knob state onto the panel — all fourteen values: tuning, register, ring, material, pickPos, stiffness, pickTone, pickGrain, strumSpread, strumDir, muteDepth, quality, body and spread — so GUITAR lands a ~2.5 s ring on standard tuning at concert pitch, BASS a long dark 6 s ring an octave down with a near-block strum and a power-chord voicing, HARP a 9 s bright ring seven semitones up with a wide upward gliss. Nothing is hidden: these are knob STATES of the same engine, not DSP branches, so every stamped knob stays visible and editable the moment the recall lands — a starting point, never a lock — and each write is a normal param change (undoable, shared with everyone in the rackspace). Distinct from TUNING below it, which alone only switches WHICH open strings and body resonances the engine uses and leaves the rest of the panel exactly where you left it. (On the classic card this same recall is the MODE knob.)
Sixstrum strum {n}STRUM — the audition button: one strum of all six strings, exactly as if a rising edge had arrived at strum1. Because the six STRUM inputs are normalled low→high, strum1 barres the whole chord, staggered by the STRUM roll and DIR, so this button is a complete performance gesture and not a test tone. SIX STRUM has no exciter of its own: with nothing patched into strum1..strum6 and no POLY source it is not quiet, it is MUTE — this is how you hear the instrument while you are dialling it in, which is most of the time you are dialling it in. Mechanically it is a host-side source summed into the same worklet input a cable feeds, fired through the shared trigger waveform, so it behaves identically to a patched sequencer gate: every string's burst noise is re-seeded, PICK GRAIN and the ACCENT input are latched at that instant, and — the part worth knowing — each string's PITCH is latched then too, which is why TUNING, REGISTER, CHORD and SPREAD are heard on the NEXT strum rather than on the one still ringing. It writes NOTHING to the patch: no param moves, nothing is shared with the rackspace, nothing is persisted or undoable, and a cable already patched into strum1 keeps working while you use it (Web Audio sums the two and the worklet edge-detects the crossing). On the classic card this is the ⟋ button, and it is the same implementation — one seam, two surfaces.
SpreadSPREAD — string-to-string richness (0..1): a symmetric detune across the six voices, up to ±14 cents at full, so a barre chord sounds full and chorused instead of phase-combed. (The six excitation seeds are ALWAYS distinct — that decorrelation is free; SPREAD only adds the detune.) 0 = tight and unison-ish, up = a wider chorus.
StiffSTIFF — string stiffness / inharmonicity (0 = perfectly harmonic; turning it up runs two dispersion allpasses that stretch the upper partials sharp — thick wound strings, piano wire, then bell and metal). A little thickens a bass string; a lot rings metallic.
DirDIR — strum direction: 0 DOWN (low string first), 1 UP (high string first), 2 ALTERNATE (flips on every successive strum, like real up/down picking). It only reorders the STRUM stagger — with STRUM at 0 all three sound identical.
StrumSTRUM — how ROLLED a strummed chord is: 0 strikes all six strings together (a block chord); at 1 the strike walks across the strings over ~45 ms (a rolled strum, or a harp gliss). It applies to the STRUM trigger inputs (and to the card's STRUM button); DIR chooses which end it starts from.
SustainSUSTAIN — the level the amplitude envelope holds once attack and decay finish (0..1, default 1). At 1 the amp stage is effectively flat and the STRING's own physical decay (RING) is the envelope you hear; below 1 the note ducks to that level and rings on quieter — a plucked-then-ducked shape.
TuningTUNING — which open-string set (and which body) the engine uses, a 3-way selector: 0 GUITAR (E2 A2 D3 G3 B3 E4), 1 BASS (a low six-string B0 E1 A1 D2 G2 C3), 2 HARP (a C-major run C3 D3 E3 G3 A3 C4). It sets the pitches a bare strum rings, the shape the CHORD voicer walks, and the BODY resonances. On its own it swaps ONLY that string set + body and leaves every other knob untouched — reach for the PRESET recall above it when you want the whole calibrated guitar / bass / harp knob state, and for this when you want (say) harp strings with the guitar's pick and ring.

source

sixstrum.ts on GitHub.

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