polyhelm

polyhelm · sources · schema v1

POLYHELM — HELM with a polyphonic (poly bus) input. The full HELM polyphonic subtractive synth (algorithm port of Matt Tytel's Helm; originally GPL-3.0, this port AGPL-3.0-or-later) reusing HELM's entire DSP engine (shared packages/dsp/src/lib/helm-engine.ts) — the same 4-8 voice allocator, 2 morphing oscillators with transpose/tune/unison, sub + noise, Cytomic TPT state-variable filter (12/24dB, LP↔BP↔HP blend, drive, key-track), three ADSR envelopes (amp/filter/mod), two pre-wired LFOs, 16-step gate-clocked step sequencer, and stereo voice-spread as HELM. The difference: POLYHELM ALSO accepts the project's 10-channel polyPitchGate poly bus on its POLY input, so a chord from MIDI LANE / POLYSEQZ / a chord sequencer plays it polyphonically — lane i drives one allocator voice (the DX7 pattern). Each lane's gate rising edge is a note-on at the lane's pitch and the falling edge a note-off; the played pitch is held on the voice so the ADSR release tail sounds at the played note (not C4) — held-pitch-through-release is correct because the pitch lives on the persistent voice, not a per-block cache. While a lane stays gated its pitch is tracked live (pitch glide / bend). The mono pitch_cv (V/oct) + gate fallback path still drives a single voice when no poly/MIDI source is patched (HELM-compatible), and the gear-icon Web MIDI settings panel works identically (device picker + per-channel rx). MIDI + poly + mono-CV can coexist (MIDI/CV use a non-lane allocator slot). The shipped HELM module is unchanged; POLYHELM is HELM + poly, not a stripped variant.

POLYHELM is the HELM polyphonic subtractive synth — a faithful port of Matt Tytel's open-source Helm — with a true POLY input bus. It is a full voice: two morphable oscillators plus a sub and a noise source, a multi-mode state-variable filter, three ADSR envelopes (amp / filter / a free 'mod' env), two LFOs, and an internal step sequencer, mixed across up to 8 allocator voices into a stereo output. The whole point vs. plain HELM is the `poly` input: feed it the project's 10-channel poly bus from a real polyphonic source (MIDI LANE in poly mode, POLYSEQZ, or a chord sequencer) and each gated lane lights up its own voice so it plays genuine chords. A mono pitch+gate pair is the single-voice fallback when nothing polyphonic is patched, and a hardware MIDI keyboard can also play it via the card's Web-MIDI gear panel. Every panel knob maps to the same Helm parameter it does in the standalone module, so patches/MIDI-learn transfer.

the faceplate

polyhelmpolypolyPitchGatepitch_cvcvgategatemidi_incvseq_resetgateout_laudioout_raudioaudiocvgatepitch
5 inputs · 2 outputs · 48 params

inputs

idcablewhat it does
polypolyPitchGateThe preferred polyphonic input: the 10-channel poly bus (5 lanes of pitch + gate) from MIDI LANE / POLYSEQZ / a chord sequencer. Each gated lane drives its own Helm voice, so POLYHELM plays chords. This MUST be fed by a real poly source to hear polyphony — patch MIDI LANE → poly, or POLYSEQZ → poly. While any lane is gated this bus takes priority over the mono PITCH/GATE fallback.
poly pitch+gate bus; 10-channel poly bus (5 pitch + 5 gate lanes)
pitch_cvcvMono V/oct pitch — the single-voice fallback used when nothing is patched into POLY (and no MIDI). Sets the pitch of the one voice the GATE input articulates.
control voltage (CV)
gategateMono gate for the single-voice fallback: a rising edge starts a note (envelopes attack), and the falling edge releases it. Used together with PITCH when POLY/MIDI are not driving the synth.
gate / trigger
midi_incvA visual-only MIDI marker port. Actual MIDI flows in over the Web-MIDI API via the card's gear/settings panel (device + channel picker), not through a patch cable — this jack just shows that MIDI is a supported source.
control voltage (CV)
seq_resetgateReset trigger for the internal step sequencer: a rising edge restarts the modulation sequence from step 1, re-syncing it to your groove.
gate / trigger

outputs

idcablewhat it does
out_laudioLeft channel of the mixed polyphonic voices (after the stereo SPREAD). Pair with OUT R to keep the width.
audio signal
out_raudioRight channel of the mixed voices, the partner of OUT L.
audio signal

params

idlabelrangedefaultcurve
voiceCountVoices1..86discrete
volumeVol0..20.7linear
osc1WaveO1 Wav0..30discrete
osc1TransO1 Tr-24..24st0linear
osc1TuneO1 Tu-100..100c0linear
osc1UnisonO1 Uni1..71discrete
osc1DetuneO1 Det0..50c10linear
osc1VolO1 Vol0..10.8linear
osc2WaveO2 Wav0..31discrete
osc2TransO2 Tr-24..24st0linear
osc2TuneO2 Tu-100..100c7linear
osc2UnisonO2 Uni1..71discrete
osc2DetuneO2 Det0..50c10linear
osc2VolO2 Vol0..10.6linear
subWaveSub W0..33discrete
subVolSub V0..10.4linear
noiseVolNoise0..10linear
filterCutoffCut20..20000Hz4000log
filterResRes0.5..161linear
filterBlendMode0..20linear
filterStylePole0..10discrete
filterDriveDrv0.5..61linear
filterKeyTrackKey-1..10linear
ampAttackA A0..8s0.005linear
ampDecayA D0..8s0.2linear
ampSustainA S0..10.6linear
ampReleaseA R0..8s0.3linear
filAttackF A0..8s0.005linear
filDecayF D0..8s0.5linear
filSustainF S0..10linear
filReleaseF R0..8s0.3linear
filEnvDepthF Dpth-1..10linear
modAttackM A0..8s0.005linear
modDecayM D0..8s0.5linear
modSustainM S0..10linear
modReleaseM R0..8s0.3linear
modEnvDepthM Dpth-1..10linear
lfo1WaveL1 W0..33discrete
lfo1FreqL1 Hz0.01..30Hz1log
lfo1AmpL1 Amt0..10linear
lfo2WaveL2 W0..33discrete
lfo2FreqL2 Hz0.01..30Hz4log
lfo2AmpL2 Amt0..10linear
stepNumStepsSteps1..168discrete
stepRateSt Hz0.1..30Hz4log
stepSmoothSt Smth0..10linear
stepDepthSt Dpth-1..10linear
spreadSpr0..10.3linear

controls

controlwhat it does
A AAmp envelope ATTACK time (s) — how fast each note rises to full from note-on.
A DAmp envelope DECAY time (s) — fall from the attack peak down to the sustain level.
A RAmp envelope RELEASE time (s) — fade to silence after the gate falls.
A SAmp envelope SUSTAIN level (0..1) — the level held while the note's gate stays high.
F AFilter envelope ATTACK time (s) — how fast the filter-cutoff modulation rises on note-on.
F DFilter envelope DECAY time (s) — fall to the filter-env sustain level.
F DpthFilter envelope DEPTH (−1..+1) — how much (and which polarity) the filter envelope sweeps the cutoff; 0 = no sweep.
F RFilter envelope RELEASE time (s) — how fast the filter modulation fades after the gate falls.
F SFilter envelope SUSTAIN level (0..1) — held filter-modulation level while the gate is high.
ModeFilter mode blend (0 = low-pass, 1 = band-pass, 2 = high-pass) — morphs the state-variable filter response continuously.
CutFilter cutoff/corner frequency (20 Hz..20 kHz, log) — the main brightness control; the filter envelope and key-track add to it.
DrvFilter input drive (0.5..6) — pushes the filter harder for saturation and a fatter, dirtier tone.
KeyFilter keyboard tracking (−1..+1) — how much the played note offsets the cutoff, keeping timbre consistent across the keyboard (positive opens the filter for higher notes).
ResFilter resonance (0.5..16) — emphasises the cutoff frequency; high values self-oscillate.
PoleFilter pole/style — switches the filter slope/character (a 1-pole vs steeper response).
L1 AmtLFO 1 amount/depth (0..1) — how much LFO 1 modulates its destination.
L1 HzLFO 1 rate (0.01..30 Hz, log).
L1 WLFO 1 waveform (sine / triangle / saw / square).
L2 AmtLFO 2 amount/depth (0..1).
L2 HzLFO 2 rate (0.01..30 Hz, log).
L2 WLFO 2 waveform (sine / triangle / saw / square).
M AMod envelope ATTACK time (s) — the free assignable envelope, used as a modulation source.
M DMod envelope DECAY time (s).
M DpthMod envelope DEPTH (−1..+1) — the amount of the free mod-envelope routed to its destination.
M RMod envelope RELEASE time (s).
M SMod envelope SUSTAIN level (0..1).
NoiseWhite-noise level in the mix (0..1) — adds breath/grit, useful for percussion and texture.
O1 DetOscillator 1 unison detune spread in cents — how far apart the stacked unison copies are spread.
O1 TrOscillator 1 coarse transpose in semitones (−24..+24).
O1 TuOscillator 1 fine tune in cents (−100..+100) for detuning between semitones.
O1 UniOscillator 1 unison voice count (1..7) — stacks detuned copies for a fatter tone.
O1 VolOscillator 1 level in the per-voice mix (0..1).
O1 WavOscillator 1 waveform (sine / triangle / saw / square).
O2 DetOscillator 2 unison detune spread in cents.
O2 TrOscillator 2 coarse transpose in semitones (−24..+24).
O2 TuOscillator 2 fine tune in cents (−100..+100); default +7 c for a slight detune-beat against OSC 1.
O2 UniOscillator 2 unison voice count (1..7).
O2 VolOscillator 2 level in the per-voice mix (0..1).
O2 WavOscillator 2 waveform (sine / triangle / saw / square).
SprStereo SPREAD (0..1) — pans the voices across the field for width (0 = mono/center, up = wider).
St DpthStep-sequencer modulation DEPTH (−1..+1) — how much the step pattern modulates its destination; reset its phase with the SEQ RESET input.
StepsInternal step-sequencer length (1..16 steps) — the modulation pattern's period.
St HzStep-sequencer rate (0.1..30 Hz, log) — how fast it advances through its steps.
St SmthStep-sequencer smoothing (0..1) — glides between step values instead of stepping abruptly (0 = hard steps, up = slewed).
Sub VSub-oscillator level in the mix (0..1).
Sub WSub-oscillator waveform (sine / triangle / saw / square), one octave below — adds low-end weight.
VoicesPolyphony: the maximum number of simultaneous voices the allocator will sound (1..8). Lower it for mono/duo behavior or to save CPU; raise it for thicker chords.
VolMaster output gain across all voices (0..2; 1 = unity).

source

polyhelm.ts on GitHub.

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