chowkick
chowkick · sources · schema v1Punchy synth-kick voice — hand-port of ChowKick by Jatin Chowdhury / chowdsp (github.com/Chowdhury-DSP/ChowKick, BSD-3-Clause). Gate-triggered single-voice kick: a tight pulse shaper (Width / Amp / Decay / Sustain) plus a gated transient-click noise burst (Amount / Decay / Cutoff + 4 noise types: Uniform / Gaussian / Pink / Velvet) PINGS a true 2-pole resonant BODY that rings a bipolar decaying sine at Freq (+ 1V/oct pitch CV). The body's pole RADIUS is set by Damping (the ring-time control: low = long boom, high = short thud), the pole ANGLE by Freq; Q sharpens the resonance; Tight adds symmetric tanh drive (fatter, odd harmonics) and Bounce an asymmetric skew (even harmonics). A per-trigger downward PITCH ENVELOPE (Pitch Amount / Pitch Decay — sweeps the body from ~3.5× Freq down to Freq on each gate) gives the kick its punch; a Drive stage adds weight + small-speaker translation; an internal 25 Hz DC blocker keeps the output bipolar. A first-order Tone LPF (50..2000 Hz) and dB Level (-60..0) form the output stage; Portamento (0..100 ms) smooths Freq under V/oct sweeps; LINK couples Q + Damping (midpoint blend) for a single "tightness" macro. Defaults ship punchy out of the box (short 0.5 ms pulse, ringing body @ damp 0.4, click @ N Amt 0.2, pitch sweep 0.6, drive 0.3, tone 2 kHz). All 20 knobs/toggles are CV-able with per-port cvScale hints (log/linear/discrete) per ADR-004. The card mirrors the source plugin's two-band UI (Pulse Shape + Resonant Filter, with a third PUNCH fader row) and live canvas previews of the envelope shape + body response. Mono audio_out. (NOTE: the earlier port shipped a coefficient bug — an inverted peaking-EQ that NOTCHED the body — so it emitted a pitchless unipolar DC blob; PR feat/chowkick-oomph replaced it with the ringing resonator + punch chain.)
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
gate_in | gate | The trigger: a rising edge strikes the resonator (fires the pulse + noise burst that excite the body). Each edge is one kick; the hit's length comes from the decay/damping controls, not how long the gate stays high. gate / trigger |
pitch_cv | cv | A 1V/oct pitch input applied as a multiplier on the body Freq (the worklet does freq × 2^pitch_cv), so it tracks pitch correctly across octaves — patch a sequencer here to tune kicks melodically. This is separate from the freq_cv summing input. control voltage (CV) |
width_cv | cv | CV that scales the pulse Width (log). control voltage (CV); modulates width (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
amplitude_cv | cv | CV that adds to the pulse Amp (the excitation strength). control voltage (CV); modulates amplitude (additive offset — ±1 CV sweeps the full range, centered on the knob) |
decay_cv | cv | CV that adds to the pulse Decay. control voltage (CV); modulates decay (additive offset — ±1 CV sweeps the full range, centered on the knob) |
sustain_cv | cv | CV that adds to the pulse Sustain floor. control voltage (CV); modulates sustain (additive offset — ±1 CV sweeps the full range, centered on the knob) |
noise_amount_cv | cv | CV that adds to the Noise Amount (how much transient noise is mixed into the strike). control voltage (CV); modulates noise_amount (additive offset — ±1 CV sweeps the full range, centered on the knob) |
noise_decay_cv | cv | CV that adds to the Noise Decay. control voltage (CV); modulates noise_decay (additive offset — ±1 CV sweeps the full range, centered on the knob) |
noise_cutoff_cv | cv | CV that scales the Noise Cutoff (log) — the brightness of the click. control voltage (CV); modulates noise_cutoff (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
freq_cv | cv | CV that scales the body Freq (log, summed) — for filter/pitch sweeps that aren't 1V/oct-tracked (use pitch_cv for true octave tracking). control voltage (CV); modulates freq (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
q_cv | cv | CV that scales the resonator Q (log) — the sharpness/ring of the body. control voltage (CV); modulates q (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
damping_cv | cv | CV that adds to Damping (the ring time: long boom vs short thud). control voltage (CV); modulates damping (additive offset — ±1 CV sweeps the full range, centered on the knob) |
tight_cv | cv | CV that adds to Tight (the tightness macro affecting the body's snap). control voltage (CV); modulates tight (additive offset — ±1 CV sweeps the full range, centered on the knob) |
bounce_cv | cv | CV that adds to Bounce (extra resonant feedback/saturation character). control voltage (CV); modulates bounce (additive offset — ±1 CV sweeps the full range, centered on the knob) |
tone_cv | cv | CV that scales the output Tone low-pass cutoff (log). control voltage (CV); modulates tone (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
portamento_cv | cv | CV that scales the Portamento glide time (log). control voltage (CV); modulates portamento (multiplicative ≈ octaves — ±1 CV spans the param’s log range) |
level_cv | cv | CV that adds to the output Level (dB). control voltage (CV); modulates level (additive offset — ±1 CV sweeps the full range, centered on the knob) |
pitch_amount_cv | cv | CV that adds to the Pitch Amount (depth of the per-hit downward pitch sweep — the 'punch'). control voltage (CV); modulates pitch_amount (additive offset — ±1 CV sweeps the full range, centered on the knob) |
pitch_decay_cv | cv | CV that adds to the Pitch Decay (how fast that sweep settles). control voltage (CV); modulates pitch_decay (additive offset — ±1 CV sweeps the full range, centered on the knob) |
drive_cv | cv | CV that adds to Drive (the body saturation/overdrive). control voltage (CV); modulates drive (additive offset — ±1 CV sweeps the full range, centered on the knob) |
outputs
| id | cable | what it does |
|---|---|---|
audio_out | audio | The mono kick voice — the excited resonant body, pitch-swept, driven, and tone/level-shaped. Patch to a mixer or bus. audio signal |
params
| id | label | range | default | curve |
|---|---|---|---|---|
width | Width | 0.1..50ms | 0.5 | log |
amplitude | Amp | 0..2 | 1 | linear |
decay | Decay | 0..1 | 0.3 | linear |
sustain | Sustain | 0..1 | 0 | linear |
noise_amount | N Amt | 0..1 | 0.5 | linear |
noise_decay | N Dec | 0..1 | 0.07 | linear |
noise_cutoff | N Cut | 20..8000Hz | 5500 | log |
noise_type | N Type | 0..3 | 0 | discrete |
freq | Freq | 20..500Hz | 80 | log |
q | Q | 0.1..10 | 1.6 | log |
damping | Damp | 0..1 | 0.4 | linear |
tight | Tight | 0..1 | 0.6 | linear |
bounce | Bounce | 0..1 | 0 | linear |
tone | Tone | 50..4000Hz | 3200 | log |
portamento | Porta | 0..100ms | 0.5 | log |
level | Level | -60..0dB | 0 | linear |
link | Link | 0..1 | 0 | discrete |
pitch_amount | P Amt | 0..1 | 0.9 | linear |
pitch_decay | P Dec | 0..1 | 0.28 | linear |
drive | Drive | 0..1 | 0.5 | linear |
controls
| control | what it does |
|---|---|
| Amp | PULSE SHAPE: strength of the excitation pulse (0..2) — how hard the body is struck. |
| Bounce | RESONANT FILTER: extra resonant feedback/saturation character on the body (0..1) for a livelier, springier ring. |
| Damp | RESONANT FILTER: the ring time / pole radius (0..1) — low = a long boom, high = a short thud. |
| Decay | PULSE SHAPE: how quickly the pulse falls after its hold (0..1). |
| Drive | PUNCH: body saturation/overdrive (0..1) — adds harmonics and loudness/heat to the kick. |
| Freq | RESONANT FILTER: the body's tuned frequency (20–500 Hz, log) — the kick's pitch; the resonant peak is shown in the filter preview. The pitch_cv input tracks this in 1V/oct. |
| Level | Output level in dB (-60 to 0). |
| Link | Tightness LINK toggle (0 = off, 1 = on): when on, Q and Damping move together as one 'tightness' macro, the upstream plugin's coupled behavior. |
| N Amt | PULSE SHAPE: how much filtered noise is added to the strike (0..1) — adds click/snap and grit to the attack. |
| N Cut | PULSE SHAPE: low-pass cutoff of the noise (20–8000 Hz, log) — the brightness/color of the click. |
| N Dec | PULSE SHAPE: decay time of the noise burst (0..1). |
| N Type | PULSE SHAPE: the noise color (discrete: Uniform, Gaussian, Pink, Velvet) — different textures for the strike's noise. |
| P Amt | PUNCH: depth of the fast downward pitch sweep at the start of each hit (0..1) — the chirp that gives the kick its punch. |
| P Dec | PUNCH: how fast that pitch sweep settles to the body Freq (0..1) — short for a sharp click, longer for a deeper drop. |
| Porta | Pitch glide time between consecutive notes (0–100 ms, log) — for sliding kick tunings. |
| Q | RESONANT FILTER: resonance sharpness (0.1–10, log) — higher Q rings longer and more tonally. |
| Sustain | PULSE SHAPE: the floor the pulse decays toward (0..1) — raise it to sustain the strike rather than let it die fully. |
| Tight | RESONANT FILTER: the tightness macro (0..1) tightening the body's snap; when LINK is on it moves together with Q and Damping. |
| Tone | Output low-pass tone (50–4000 Hz, log) — rolls off the top end of the whole kick. |
| Width | PULSE SHAPE: width of the excitation pulse (0.1–50 ms, log) — how long the strike pushes the body before it decays; shown in the envelope preview. |
source
chowkick.ts on GitHub.