kick drum

kickdrum · sources · schema v1

Layered 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).

A super-deep, pulsing stereo kick VOICE — built to shake the room, not just tick. Instead of one oscillator + envelope, KICK DRUM layers three decoupled generators so depth and punch live on separate knobs: a pure-sine SUB (the air-moving fundamental at Tune, with a long decay — the 'pulse'), a BODY an octave above with a fast downward pitch sweep (the 909-style 'dooo' that reads as punch on mid-size speakers), and a short filtered-noise CLICK (the leading-edge transient the ear locks onto). The summed layers then run a serial bus: a DRIVE saturator with a single HARD character switch (clean-warm vs aggressive), an internal 3-band kick EQ (sub shelf / body bell / attack bell, plus a spectral TILT), and the TRANSLATE harmonic exciter — it synthesizes the sub's 2nd/3rd/4th harmonics so the kick still reads deep on laptop and phone speakers that can't reproduce a 40–50 Hz fundamental. A DYNAMICS section (transient ATTACK/SUSTAIN shaper, a GLUE compressor whose detector ignores the sub so the low end never pumps, and a CEILING soft-clip that true-peak-bounds the voice) lets it sit hot safely, and the stereo stage keeps everything below ~120 Hz strictly MONO while WIDTH spreads only the upper body/click band — phase-safe sub, wide top. Strike it from any trigger/gate source; ACCENT sets per-hit intensity, PITCH CV tracks 1V/oct, and CHOKE damps the tail while held (hi-hat-style choke groups). The default patch is a clean, deep club kick; push Drive/Hard/Translate for aggression.

the faceplate

kick drumtrigger_ingateaccent_incvpitch_cvcvchoke_ingateaudio_laudioaudio_raudioaudiocvgatepitch
4 inputs · 2 outputs · 25 params

inputs

idcablewhat it does
trigger_ingateThe 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_incvPer-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_cvcv1V/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_ingateChoke 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

idcablewhat it does
audio_laudioLeft 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_raudioRight 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

idlabelrangedefaultcurve
tuneTune20..120Hz50log
pitch_amtP Amt0..48st24linear
pitch_timeP Time5..120ms30log
tensionTension0..0.60linear
sub_decaySub Dec50..800ms450log
body_decayBody Dec20..400ms120log
click_lenClick2..60ms12log
sub_levelSub0..10.9linear
body_levelBody0..10.7linear
click_levelClk Lvl0..10.4linear
body_shapeShape0..10.3linear
click_toneClk Tone500..6000Hz2800log
driveDrive0..10.4linear
hardHard0..10discrete
translateTranslate0..10.3linear
sub_eqSub EQ-12..12dB0linear
body_eqBody EQ-12..12dB3linear
attack_eqAtk EQ-12..12dB2linear
tiltTilt-1..10linear
attackAttack-1..10.2linear
sustainSustain-1..10linear
glueGlue0..10.3linear
ceilingCeiling0..10.5linear
widthWidth0..10.2linear
levelLevel-24..12dB0linear

controls

controlwhat it does
AttackDYNAMICS: 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 EQEQ: attack bell gain (±12 dB, ~2.8 kHz) — presence of the click/beater band; boost to cut through, cut to soften.
Body DecBODY: 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 EQEQ: body bell gain (±12 dB, ~150 Hz) — the chest-thump band. Default +3 dB leans the voice punchy.
BodyBODY: level of the swept body layer (0–1) — the punch-vs-depth balance against Sub.
ShapeBODY: 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.
CeilingDYNAMICS: 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.
ClickCLICK: 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 LvlCLICK: level of the noise transient layer (0–1). More = a harder leading edge that cuts through a dense mix.
Clk ToneCLICK: band-pass center of the noise burst (500–6000 Hz, log) — dark knock at the bottom of the range, bright snap at the top.
DriveDRIVE: 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.
GlueDYNAMICS: 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.
HardDRIVE 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.
LevelOUT: 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 AmtBODY: 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 TimeBODY: 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 DecSUB: 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 EQEQ: sub shelf gain (±12 dB, ~50 Hz) — weight control for the very bottom without touching the punch band.
SubSUB: 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.
SustainDYNAMICS: transient-shaper sustain (−1..+1). Positive brings the tail up (longer, fuller body), negative tucks it away for a tighter, drier kick.
TensionBODY: 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.
TiltEQ: spectral tilt (−1..+1): negative tips energy toward the lows (darker, deeper), positive toward the highs (brighter, clickier), pivoting around the body band.
TranslateTRANSLATE: 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.
TuneSUB: 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.
WidthSTEREO: 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.

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