kick drum

kickdrum · sources

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

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 GENERATOR LAYERS 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 one octave above with a fast downward pitch sweep (the 909-style 'dooo' that reads as punch on mid-size speakers), and a short band-passed noise CLICK (the leading-edge transient the ear locks onto — seeded-deterministic, so every hit is bit-identical). The summed layers then hit the BUS: first a DRIVE saturator with a single HARD character switch (clean-warm tanh vs an aggressive wavefolder whose bite rides the body envelope); then the TRANSLATE harmonic exciter joins as a PARALLEL branch — it taps a copy of the raw sub layer (pre-drive), synthesizes the sub's 2nd/3rd/4th harmonics, and sums them into the bus just ahead of the EQ, so the kick still reads deep on laptop and phone speakers that can't reproduce a 40–50 Hz fundamental; finally the combined signal runs the internal 3-band kick EQ (sub shelf ~50 Hz / body bell ~150 Hz / attack bell ~2.8 kHz, plus a spectral TILT). A DYNAMICS section (threshold-free ATTACK/SUSTAIN transient shaper, a GLUE compressor whose detector ignores everything under ~100 Hz so the sub never pumps, and a CEILING lean-in stage that keeps the voice true-peak-bounded however hot it runs) lets it sit hot safely, and the stereo stage is mono-safe by construction: the sub AND body are identical on both channels — WIDTH spreads only the click's decorrelated noise above ~120 Hz. Phase-safe low end, wide top. Strike it from any trigger/gate source; ACCENT is latched per hit and deepens the pitch sweep, drive, and level together; PITCH CV tracks 1V/oct; CHOKE damps the tail while held (drum-machine choke groups). The default patch is a clean, deep club kick; push Drive/Hard/Translate for aggression. The dock faceplate's right-hand column draws that chain in DSP order (with TRANSLATE marked as the parallel branch it is), shows the 120 Hz stereo crossover, and lists five PRESETS: DEEP CLUB, TECHNO PUNCH, 909 CLASSIC, SUB BOOM and LO-FI THUMP. Recalling one stamps a COMPLETE voice — all 25 params — through the ordinary commit path, so it is undoable, shared with everyone in the rackspace, and immediately editable; the row stays lit afterwards as a record of what you recalled, and picks up a MODIFIED marker the moment any of those values is edited away from it.

the faceplate

kick drumtrigger_ingateaccent_incvpitch_cvcvchoke_ingatetune_cvcvsub_decay_cvcvsub_level_cvcvpitch_amt_cvcvpitch_time_cvcvtension_cvcvbody_decay_cvcvbody_level_cvcvbody_shape_cvcvclick_len_cvcvclick_tone_cvcvclick_level_cvcvdrive_cvcvhard_cvcvtranslate_cvcvsub_eq_cvcvbody_eq_cvcvattack_eq_cvcvtilt_cvcvattack_cvcvsustain_cvcvglue_cvcvceiling_cvcvwidth_cvcvlevel_cvcvaudio_laudioaudio_raudioaudiocvgatepitch
29 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. 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_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 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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_cvcvCV 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

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

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 EQCLICK: attack bell gain (±12 dB bell at ~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 EQBODY: body bell gain (±12 dB bell at ~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: 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.
ClickCLICK: 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 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 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).
LevelOUTPUT: 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 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 EQSUB: sub shelf gain (±12 dB shelf at ~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.
TiltDRIVE: 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).
TranslateSUB: 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.
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.
WidthOUTPUT: 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.

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