kick drum
kickdrum · sources · schema v1Layered stereo kick VOICE — the "shake the house" deep-bass kick (own-code; build plan .myrobots/plans/kick-drum-voice-2026-07-01.md). 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). Level spans −24..+12 dB (the deliberate headroom fix vs chowkick's −60..0), 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. Accented hits sweep the pitch envelope deeper and land louder (the plan's accent macro: pitch-depth + level move together). 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 short ~30 ms ramp toward silence, and on the falling edge it releases and recovers — 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) |
outputs
| id | cable | what it does |
|---|---|---|
audio_l | audio | Left output of the stereo voice. Everything below ~120 Hz is identical on both sides (mono-safe sub — full speaker excursion, no phase cancellation on a mono fold-down); WIDTH only decorrelates the upper body/click band. 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 as the left; only the >120 Hz band differs when WIDTH is up. 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 | EQ: attack bell gain (±12 dB, ~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 | EQ: body bell gain (±12 dB, ~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: soft-knee output clip (0–1) that true-peak-bounds the voice — lets you run Level hot into the rack safely. Lower = earlier, more audible clipping; higher = cleaner headroom. |
| Click | CLICK: length of the noise transient (2–60 ms, log). A few ms is a subtle tick; tens of ms becomes an audible slap. (Click layer lands in the next DSP phase — the knob is live and wired through.) |
| 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 saturation (smooth, odd harmonics — the shipping default's deep clean kick); ON = the aggressive mode (harder folding/edge for distorted, techno-leaning kicks). One switch instead of a mode menu — owner-decided. |
| Level | OUT: output level in dB (−24..+12). The +12 dB makeup headroom is deliberate (vs older voices capped at 0 dB) — the ceiling stage keeps a hot setting 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 | EQ: sub shelf gain (±12 dB, ~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 | EQ: spectral tilt (−1..+1): negative tips energy toward the lows (darker, deeper), positive toward the highs (brighter, clickier), pivoting around the body band. |
| Translate | TRANSLATE: the harmonic exciter (0–1). Synthesizes the sub's 2nd/3rd/4th harmonics (e.g. 80/120/160 Hz for a 40 Hz fundamental) so small speakers reconstruct the missing fundamental — the kick stays 'deep' on a phone. 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 | STEREO: width of the upper band ONLY (0–1, M/S). Everything under ~120 Hz stays strictly mono (phase-safe, mono-fold-proof); width spreads the body/click above it. 0 = fully mono voice. |
source
kickdrum.ts on GitHub.