kick drum
kickdrum · sourcesLayered stereo kick VOICE — the "shake the house" deep-bass kick (own-code). Three DECOUPLED generator layers so depth and punch live on orthogonal knobs: a pure-sine SUB (Tune 20–120 Hz, gentle slow settle, long Sub Dec ≤ 800 ms — the air-moving pulse), a band-limited BODY one octave up (fast downward P Amt/P Time pitch sweep — the 909 "dooo" chest-thump — plus Shape sine→tri→rect morph and a Tension amplitude→pitch glide), and a filtered-noise CLICK transient (Click len / Clk Tone / Clk Lvl). The summed layers run a serial bus: DRIVE saturation with a single HARD character switch (clean-warm vs aggressive, owner-decided instead of a mode menu), an own-code 3-band kick EQ (Sub/Body/Atk EQ bells + a spectral Tilt), and the TRANSLATE harmonic exciter that synthesizes the sub's 2nd/3rd/4th harmonics so a 40–50 Hz fundamental still reads deep on laptop/phone speakers. DYNAMICS: a threshold-free transient shaper (Attack/Sustain), a GLUE compressor whose detector is sidechain-HPF'd ~100 Hz so the sub never pumps it, and a CEILING soft-clip that true-peak-bounds the voice so it can sit hot. Stereo stage: everything <120 Hz is strictly MONO (phase-safe, full excursion); Width spreads only the upper body/click band (M/S) — separate audio_l/audio_r outs with stereoPairs auto-pairing. Inputs: trigger_in (edge-trigger STRIKE — phases reset, envelopes fire), accent_in (per-hit 0..1 CV latched at the strike edge, scaling sweep depth + level), pitch_cv (1V/oct, transposes the whole voice), choke_in (level-sensitive gate — damps while high through a short ramp, releases on the falling edge), PLUS a per-control CV input for every one of the 25 voice knobs (tune_cv … level_cv — each ±1 sweeps its param full-range around the live knob, cvScale matched to the knob curve). Level spans −24..+12 dB with deliberate headroom, guarded by the internal ceiling. Wide 3u banded card: SUB·BODY·CLICK / DRIVE·EQ·TRANSLATE / DYNAMICS·STEREO·OUT. Ships as a clean-deep club kick by default; later DSP phases land inside the worklet without changing this contract (Phase 1 renders SUB+BODY, L=R).
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
trigger_in | gate | The STRIKE: each rising edge fires one kick — oscillator phases reset (click-free and deterministic), every envelope retriggers, and the accent input is sampled at that instant. How long the signal stays high doesn't matter; it's a trigger, not a hold. Patch a sequencer gate, drum-seq lane, or clock here. gate / trigger; trigger — fires once per rising edge |
accent_in | cv | Per-hit intensity CV (0..1), LATCHED at the strike edge only — between hits it's ignored, so an LFO here gives each kick its own velocity. One accent macro moves three things together: the body's pitch sweep dives up to 50 % deeper, DRIVE pushes up to 30 % harder, and the hit lands up to +4 dB louder — the boost leans into the CEILING stage, so accents stay true-peak-safe. control voltage (CV) |
pitch_cv | cv | 1V/oct pitch input: transposes the whole voice — sub fundamental and body together — as a true frequency multiplier (tune × 2^volts), so melodic kick lines track across octaves. Patch a sequencer pitch output here for tuned kicks. control voltage (CV) |
choke_in | gate | Choke group input (level-sensitive gate): WHILE the level is high the voice is damped through a fast ~30 ms ramp toward silence, and on the falling edge it recovers through a short ~10 ms lag so the release is click-free — both edges matter, like an open-hat choke. Hold it high to duck the kick's tail; it does not fire hits. gate / trigger; gate — acts while the level is high (reacts to both edges) |
tune_cv | cv | CV modulation of TUNE (log): ±1 sweeps the sub fundamental across its full 20–120 Hz range centred on the knob — tuned kicks or per-step pitch. (Distinct from pitch_cv, which transposes the whole voice at 1V/oct; this sets the SUB's own base.) control voltage (CV); modulates tune (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
sub_decay_cv | cv | CV modulation of SUB DEC (log): ±1 sweeps the sub layer's decay across its full 50–800 ms range around the knob — shorten for fast patterns, lengthen to make the room breathe. control voltage (CV); modulates sub_decay (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
sub_level_cv | cv | CV modulation of SUB level (linear): ±1 sweeps the sine-sub layer across its full 0–1 range around the knob — duck or lift the low end per hit. control voltage (CV); modulates sub_level (additive offset — ±1 CV sweeps the full range, centered on the knob) |
pitch_amt_cv | cv | CV modulation of P AMT (linear): ±1 sweeps the body pitch-sweep depth across its full 0–48 st range around the knob — modulate the punch/chirp amount. control voltage (CV); modulates pitch_amt (additive offset — ±1 CV sweeps the full range, centered on the knob) |
pitch_time_cv | cv | CV modulation of P TIME (log): ±1 sweeps the sweep-settle time across its full 5–120 ms range around the knob — sharp tick to falling 'dooo'. control voltage (CV); modulates pitch_time (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
tension_cv | cv | CV modulation of TENSION (linear): ±1 sweeps the amplitude→pitch glide across its full 0–0.6 range around the knob — animate the drum-skin bend. control voltage (CV); modulates tension (additive offset — ±1 CV sweeps the full range, centered on the knob) |
body_decay_cv | cv | CV modulation of BODY DEC (log): ±1 sweeps the body layer's decay across its full 20–400 ms range around the knob. control voltage (CV); modulates body_decay (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
body_level_cv | cv | CV modulation of BODY level (linear): ±1 sweeps the body layer across its full 0–1 range around the knob — the punch-vs-depth balance. control voltage (CV); modulates body_level (additive offset — ±1 CV sweeps the full range, centered on the knob) |
body_shape_cv | cv | CV modulation of SHAPE (linear): ±1 sweeps the body waveform morph across its full 0–1 range (sine→tri→rect) around the knob — add or remove grit. control voltage (CV); modulates body_shape (additive offset — ±1 CV sweeps the full range, centered on the knob) |
click_len_cv | cv | CV modulation of CLICK len (log): ±1 sweeps the noise transient length across its full 2–60 ms range around the knob. control voltage (CV); modulates click_len (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
click_tone_cv | cv | CV modulation of CLK TONE (log): ±1 sweeps the click band-pass across its full 500–6000 Hz range around the knob — dark knock to bright snap. control voltage (CV); modulates click_tone (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
click_level_cv | cv | CV modulation of CLK LVL (linear): ±1 sweeps the click layer across its full 0–1 range around the knob. control voltage (CV); modulates click_level (additive offset — ±1 CV sweeps the full range, centered on the knob) |
drive_cv | cv | CV modulation of DRIVE (linear): ±1 sweeps the saturation amount across its full 0–1 range around the knob — pump the perceived loudness live. control voltage (CV); modulates drive (additive offset — ±1 CV sweeps the full range, centered on the knob) |
hard_cv | cv | CV modulation of HARD (discrete): the CV is bucketed straight to the switch by round-half-up, so the flip point sits exactly at CV = 0 — CV ≥ 0 (the midpoint itself included) selects the aggressive mode, and only CV < 0 selects clean-warm — the character switch under CV. control voltage (CV); modulates hard (integer buckets — CV selects a discrete step) |
translate_cv | cv | CV modulation of TRANSLATE (linear): ±1 sweeps the harmonic exciter across its full 0–1 range around the knob — reconstruct the sub for small speakers dynamically. control voltage (CV); modulates translate (additive offset — ±1 CV sweeps the full range, centered on the knob) |
sub_eq_cv | cv | CV modulation of SUB EQ (linear): ±1 sweeps the sub shelf across its full ±12 dB range around the knob. control voltage (CV); modulates sub_eq (additive offset — ±1 CV sweeps the full range, centered on the knob) |
body_eq_cv | cv | CV modulation of BODY EQ (linear): ±1 sweeps the body bell across its full ±12 dB range around the knob. control voltage (CV); modulates body_eq (additive offset — ±1 CV sweeps the full range, centered on the knob) |
attack_eq_cv | cv | CV modulation of ATK EQ (linear): ±1 sweeps the attack bell across its full ±12 dB range around the knob. control voltage (CV); modulates attack_eq (additive offset — ±1 CV sweeps the full range, centered on the knob) |
tilt_cv | cv | CV modulation of TILT (linear): ±1 sweeps the spectral tilt across its full −1..+1 range around the knob — darker to brighter. control voltage (CV); modulates tilt (additive offset — ±1 CV sweeps the full range, centered on the knob) |
attack_cv | cv | CV modulation of ATTACK (linear): ±1 sweeps the transient-shaper attack across its full −1..+1 range around the knob — round or sharpen the onset. control voltage (CV); modulates attack (additive offset — ±1 CV sweeps the full range, centered on the knob) |
sustain_cv | cv | CV modulation of SUSTAIN (linear): ±1 sweeps the transient-shaper sustain across its full −1..+1 range around the knob — tuck or fatten the tail. control voltage (CV); modulates sustain (additive offset — ±1 CV sweeps the full range, centered on the knob) |
glue_cv | cv | CV modulation of GLUE (linear): ±1 sweeps the compressor amount across its full 0–1 range around the knob. control voltage (CV); modulates glue (additive offset — ±1 CV sweeps the full range, centered on the knob) |
ceiling_cv | cv | CV modulation of CEILING (linear): ±1 sweeps the clip lean across its full 0–1 range around the knob — from near-transparent to slammed into the soft-clip. control voltage (CV); modulates ceiling (additive offset — ±1 CV sweeps the full range, centered on the knob) |
width_cv | cv | CV modulation of WIDTH (linear): ±1 sweeps the click band's stereo width across its full 0–1 range around the knob (the sub and body stay mono). control voltage (CV); modulates width (additive offset — ±1 CV sweeps the full range, centered on the knob) |
level_cv | cv | CV modulation of LEVEL (linear): ±1 sweeps the output gain across its full −24..+12 dB range around the knob — tremolo or dynamic swells. control voltage (CV); modulates level (additive offset — ±1 CV sweeps the full range, centered on the knob) |
outputs
| id | cable | what it does |
|---|---|---|
audio_l | audio | Left output of the stereo voice. The sub AND body are identical on both sides — the only stereo content is the click's decorrelated noise, high-passed at ~120 Hz and scaled by WIDTH — so a mono fold-down never thins the low end (the side term cancels to first order). Patch L alone for a mono kick — the stereo pair auto-pairs when the target accepts it. audio signal; L/R stereo pair with audio_r |
audio_r | audio | Right output — the other half of the stereo pair. Carries the same mono sub and body as the left; only the click's >120 Hz side content differs when WIDTH is up (at WIDTH 0 the channels are identical). audio signal; L/R stereo pair with audio_l |
params
| id | label | range | default | curve |
|---|---|---|---|---|
tune | Tune | 20..120Hz | 50 | log |
pitch_amt | P Amt | 0..48st | 24 | linear |
pitch_time | P Time | 5..120ms | 30 | log |
tension | Tension | 0..0.6 | 0 | linear |
sub_decay | Sub Dec | 50..800ms | 450 | log |
body_decay | Body Dec | 20..400ms | 120 | log |
click_len | Click | 2..60ms | 12 | log |
sub_level | Sub | 0..1 | 0.9 | linear |
body_level | Body | 0..1 | 0.7 | linear |
click_level | Clk Lvl | 0..1 | 0.4 | linear |
body_shape | Shape | 0..1 | 0.3 | linear |
click_tone | Clk Tone | 500..6000Hz | 2800 | log |
drive | Drive | 0..1 | 0.4 | linear |
hard | Hard | 0..1 | 0 | discrete |
translate | Translate | 0..1 | 0.3 | linear |
sub_eq | Sub EQ | -12..12dB | 0 | linear |
body_eq | Body EQ | -12..12dB | 3 | linear |
attack_eq | Atk EQ | -12..12dB | 2 | linear |
tilt | Tilt | -1..1 | 0 | linear |
attack | Attack | -1..1 | 0.2 | linear |
sustain | Sustain | -1..1 | 0 | linear |
glue | Glue | 0..1 | 0.3 | linear |
ceiling | Ceiling | 0..1 | 0.5 | linear |
width | Width | 0..1 | 0.2 | linear |
level | Level | -24..12dB | 0 | linear |
controls
| control | what it does |
|---|---|
| Attack | DYNAMICS: transient-shaper attack (−1..+1). Positive sharpens the onset slope (more crack at the same peak), negative rounds it off. Threshold-free — level-independent. |
| Atk EQ | CLICK: attack bell gain (±12 dB bell at ~2.8 kHz) — presence of the click/beater band; boost to cut through, cut to soften. |
| Body Dec | BODY: the body layer's decay to −60 dB (20–400 ms, log). Keep it shorter than Sub Dec so the punch snaps and the sub carries the tail. |
| Body EQ | BODY: body bell gain (±12 dB bell at ~150 Hz) — the chest-thump band. Default +3 dB leans the voice punchy. |
| Body | BODY: level of the swept body layer (0–1) — the punch-vs-depth balance against Sub. |
| Shape | BODY: waveform morph (0–1): 0 = pure sine, 0.5 = triangle, 1 = rectangle — band-limited throughout. Higher shapes add harmonics and grit to the punch before the drive stage even engages. |
| Ceiling | DYNAMICS: how hard the voice leans into its true-peak soft-clip (0–1). The output stage is ALWAYS tanh-bounded below digital full-scale; CEILING sets the gain into that curve — low keeps the stage nearly transparent (clean headroom), high slams the voice into the clip for a denser, louder, more saturated hit. A lean-in control, not a threshold. |
| Click | CLICK: length of the noise transient (2–60 ms, log; time to −60 dB). A few ms is a subtle tick; tens of ms becomes an audible slap. The burst is seeded-deterministic — every strike reseeds the noise, so hit N clicks bit-identically to hit 1. |
| Clk Lvl | CLICK: level of the noise transient layer (0–1). More = a harder leading edge that cuts through a dense mix. |
| Clk Tone | CLICK: band-pass center of the noise burst (500–6000 Hz, log) — dark knock at the bottom of the range, bright snap at the top. |
| Drive | DRIVE: saturation amount on the summed voice (0–1). Adds harmonics and perceived loudness at the same peak level — the 'louder without clipping' stage. Its character is set by HARD. |
| Glue | DYNAMICS: the in-voice compressor amount (0–1). Its detector high-passes at ~100 Hz, so the sub NEVER pumps the compression — glue tightens the body/click while the low end stays untouched. |
| Hard | DRIVE character switch: OFF = clean-warm tanh saturation, oversampled 2× (smooth, odd harmonics — the shipping default's deep clean kick); ON = an aggressive wavefolder + asymmetric shaper, oversampled 4× and run hotter, its fold depth riding the body envelope so the bite follows the punch — distorted, techno-leaning kicks. One switch instead of a mode menu — owner-decided. |
| Kickdrum hero {n} | The ENVELOPE + PITCH-SWEEP display, and the output meter beside it. The filled curve is the voice's summed amplitude (sub + body + click, each already scaled by its own mix level) and the dashed curve is the body's pitch as it sweeps down. Both are computed from the LIVE knob values through the worklet's own envelope and frequency laws, so the picture moves the instant you turn SUB DEC, P AMT or TUNE; it is not an illustration. The TAIL / SWEEP / SETTLES TO readouts beside it name what the picture shows — at the factory defaults the tail is 398 ms, i.e. how long the hit rings down to −60 dB of its own peak, which is SHORTER than the 450 ms SUB DEC knob because the tail is the sum of three layers at their own mix levels, not one knob read back. Two details the drawing teaches that no knob does: the faint horizontal line is where the BODY comes to rest, an octave above the fundamental (the punch never lands on the sub's pitch), and the vertical line is the tail figure's position inside the plotted window. The `600 ms` button flips to a 1200 ms window for a long tail that outruns the short view — a display setting, private to your screen: it is not shared with the rackspace and not saved with the patch. The meter shows the live level of the LEFT output; ACCENT and V·OCT report whether those jacks are patched and what the voice is therefore tracking, because both are read inside the worklet (accent is latched per hit, pitch_cv per sample) and neither has a value the host can honestly print. |
| Kickdrum strike {n} | STRIKE — the audition button: one hit, exactly as if a rising edge had arrived at trigger_in. It is the only way to HEAR an unpatched kick while you dial it in, which is most of the time you are dialling it in. Mechanically it is a host-side source summed into the same trigger input a cable feeds, fired through the shared trigger waveform, so it behaves identically to a patched sequencer gate: phases reset, every envelope retriggers, and accent_in is sampled at that instant (unpatched accent reads 0, i.e. an un-accented hit). It writes NOTHING to the patch — no param moves, nothing is shared with the rackspace, nothing is persisted or undoable — so it is safe to lean on, and a cable already patched into trigger_in keeps working while you use it (Web Audio sums the two, and the worklet edge-detects the crossing). |
| Level | OUTPUT: output level in dB (−24..+12), applied BEFORE the ceiling so hot settings lean into the clip instead of escaping it. The +12 dB makeup headroom is deliberate (vs older voices capped at 0 dB) — the ceiling keeps it true-peak-safe. |
| P Amt | BODY: depth of the per-hit downward pitch sweep in semitones (0–48). This is the 'punch' knob — the body starts up to 4 octaves above its settled pitch and dives; more depth = harder chirp. Accented hits sweep up to 50 % deeper. |
| P Time | BODY: how fast the pitch sweep settles (5–120 ms, log). Short = a sharp tick; long = an audible falling 'dooo'. The sub's own settle rides this too, ~3× slower and much gentler. |
| Sub Dec | SUB: the sub layer's decay to −60 dB (50–800 ms, log). This is the 'pulse length' — long settings make the room breathe between hits; short settings tighten the low end for fast patterns. |
| Sub EQ | SUB: sub shelf gain (±12 dB shelf at ~50 Hz) — weight control for the very bottom without touching the punch band. |
| Sub | SUB: level of the sine sub layer (0–1). The mix is headroom-normalized, so maxing sub + body together won't clip the pre-drive bus. |
| Sustain | DYNAMICS: transient-shaper sustain (−1..+1). Positive brings the tail up (longer, fuller body), negative tucks it away for a tighter, drier kick. |
| Tension | BODY: amplitude→pitch glide (0–0.6). Above zero, the body's pitch rides its own loudness envelope — loud onset bends sharp then relaxes as it decays, the drum-skin tension effect borrowed from modal drums. Subtle values (0.1–0.2) add organic movement. |
| Tilt | DRIVE: spectral tilt (−1..+1) — opposing ±4 dB shelves at 250 Hz / 2.5 kHz. Negative tips energy toward the lows (darker, deeper); positive toward the highs (brighter, clickier). |
| Translate | SUB: the TRANSLATE harmonic exciter (0–1) — the sub layer's small-speaker reconstructor, a parallel branch summed into the bus just ahead of the EQ. It saturates a copy of the sub (an asymmetric shaper, so even harmonics appear) and then low-passes the result at 300 Hz — keeping the synthesized 2nd/3rd/4th harmonics (e.g. 80/120/160 Hz for a 40 Hz fundamental) while discarding the fizz above — so speakers that can't reproduce the fundamental still read the kick as deep. Raise it when Tune is very low. |
| Tune | SUB: the kick's fundamental (20–120 Hz, log). 50 Hz default = deep club kick; below ~40 Hz you're into feel-more-than-hear territory (raise TRANSLATE so small speakers keep up); 80–120 Hz reads as a tight punchy thump. Tracks pitch_cv at 1V/oct. |
| Width | OUTPUT: stereo width of the click band ONLY (0–1, mid/side). The sub AND body are identical on both channels, and the side signal is high-passed at ~120 Hz — phase-safe, mono-fold-proof by construction. What spreads is the click's decorrelated noise; 0 = a fully mono voice (L and R identical). |
source
kickdrum.ts on GitHub.