TT-KICKSHAPE — User Manual

JSFX plug-in for REAPER // Version 0.5.0 // TimTechlor

TT-KICKSHAPE draws the volume. A curve you edit with the mouse is played back on every trigger — by the host beat, a MIDI note, an audio transient or a free clock — and multiplies the signal. That is sidechain pumping without a compressor, a trance gate, a tremolo or a swell, sample-accurate for beat and MIDI triggers, with a separate depth per frequency band and the curve available as MIDI CC.

01The concept

A compressor-based sidechain reacts to a signal and needs threshold, ratio, attack and release to approximate the shape you actually want. TT-KICKSHAPE skips the approximation: you draw the volume curve, and the plug-in plays it back every time it is triggered. The result is the same as a perfectly tuned kick sidechain — or a trance gate, an offbeat duck, a swell, a tremolo — with exact timing and no detector in the way.

trigger  →  curve phase 0..1  →  c = curve(phase)
gain = max( 1 − DEPTH · (1 − c'), floor )     c' = c, or 1 − c with INVERT
gain → 1-pole SMOOTH → multiplies the signal (or one band, or a low-pass cutoff)
TT-KICKSHAPE front panel — curve editor with playhead, trigger modes, curve slots A to H, preset bar, timing, shape and target panels
FRONTThe TT-KICKSHAPE front. Header with trigger mode, curve slots A–H, COPY/PASTE, the preset bar and OPTIONS; the curve editor with playhead and the white line of the effective curve; the three panels TRIGGER (changes with the mode), SHAPE / STEREO and TARGET / BANDS / CC OUT.

02Quick start

  1. Insert TT-KICKSHAPE on the track that should pump (bass, pad, bus). A new instance starts in BEAT mode with the preset Classic Pump on a quarter-note grid: press play and the track ducks on every beat.
  2. Pick another shape in the preset bar in the header (arrows, or click the name for the list) or draw your own: click on the curve to add a point, drag points, right-click a point to delete it, Alt-drag or double-click a segment for its tension.
  3. Set the length with RATE (1/32 … 8 bars, triplets and dotted values). DEPTH scales the effect, SMOOTH rounds sharp edges against clicks.
  4. For a sidechain from a kick track instead of the beat grid: switch to MIDI (a note-on restarts the curve) or AUDIO (a transient does).

03Trigger modes

ModeThe curve restarts …Timing
BEATcontinuously, locked to the host position; one period = RATEsample-accurate, drift-free (phase re-derived from beat_position every block)
MIDIon every note-on that passes the channel / note filtersample-accurate (measured: 0 samples offset)
AUDIOwhen the transient detector firesfollows the transient; LOOKAHEAD makes the curve start before it
FREEcontinuously, at a free rate in Hz (0.05–20)restarts on transport play; runs while stopped

BEAT

RATE is the length of the curve: 1/32T … 1/2 dotted and 1, 2, 4, 8 bars (bars follow the project time signature). OFFSET shifts the grid in sixteenth notes, PHASE shifts the start inside the curve. Changing RATE while playing keeps the phase continuous (measured jump < 1e-13); the grid re-locks at the next play or seek. When the transport stops the phase freezes (so the gain stays where it was); RUN WHILE STOPPED keeps the clock running at the host tempo instead.

MIDI

A note-on restarts the curve at exactly its sample. MIDI CH and NOTE filter which notes count (ALL = any). Note-offs are ignored: the curve runs out to its end value and stays there until the next trigger. The curve length is LENGTH — a note value (SYNC) or milliseconds (MS). THRU decides whether notes are passed on; controllers, pitch bend and clock always pass. WAIT chooses what a trigger during a running curve does: off = restart at once, on = it is remembered and starts exactly when the running curve ends. Only one trigger is remembered.

AUDIO

A peak at or above THRESH (−60…0 dB) starts the curve. After a trigger the detector is locked for HOLD ms and until its 10 ms envelope has fallen 6 dB below the threshold, so a decaying kick cannot retrigger itself. DETECT ON selects the source: the sidechain pins 3/4, the main input, or AUTO (pins 3/4 as soon as they carry signal). An audio trigger can only fire when the transient has arrived — use LOOKAHEAD (0–10 ms) to delay the audio and start the curve earlier; it reports the delay to REAPER (PDC). Without lookahead the plug-in adds no latency.

FREE

A free-running clock at RATE Hz. The phase restarts at transport play.

TRIGGER panels of the MIDI, AUDIO and FREE modes: channel, note, thru, threshold, hold, lookahead, length, retrigger and rate controls
TRIGGERThe TRIGGER panel follows the mode. Left: MIDI (channel, note, THRU, LENGTH, WAIT). Middle: AUDIO (THRESH, HOLD, LOOKAHEAD, DETECT ON). Right: FREE (rate in Hz).

04Curve, slots & presets

The editor holds up to 32 points; each segment has its own tension (Alt-drag it up or down, double-click resets). The grid snaps points in time (X GRID: off, 1/4 … 1/32 of the length) and level (Y GRID); hold Shift to place a point without snapping. The vertical line is the playhead. A thin white line shows the effective curve after TENSION, INVERT, DEPTH and MIN LEVEL. The number under the editor is the real gain in dB right now.

Slots A–H each hold a complete curve and are saved with the project (they are part of the plug-in state, so presets you save in REAPER carry all eight). COPY / PASTE move a curve between slots. A preset is a built-in curve that is loaded into the active slot; a star after its name marks a curve you edited since.

The 19 preset curves are the factory list of the preset bar (next chapter); a new instance fills the slots as listed below the table.

PresetMade forShape
Classic Pumpany RATEsteep dive to 6 %, exponential recovery
Hard Gateanyopen for the first half, closed for the second
Trance Gate 1/161 bar16 alternating steps
Triplet Gate1 bar12 alternating triplet-eighth steps
Offbeat Duck1/4dip on the “and” of every beat
Half-Time Swell1–2 barsslow swell, sudden cut
Reverse Sawanycurved swell
Sine Wobbleanycosine, 17 points
Fast Pump1/4very short dive, recovery within 60 %
Long Breathe1 barsoft dip and rise
Stutter 8ths1 bar8 short dips
Trap Chop1 barirregular 16-step gate
Ramp Up / Ramp Downanylinear ramps
Pluckanyinstant rise, curved decay
Saw x21/2two falling ramps per period
Sidechain Kick 4/41 barfour dips, one per beat
Flat / Triangleanyconstant 1 / up and down

Factory presets are code, not saved data: they never overwrite anything you did not load yourself. A new instance fills the slots with Classic Pump, Trance Gate, Sine Wobble, Offbeat Duck, Fast Pump, Reverse Saw, Trap Chop and Sidechain Kick.

Curve editor showing the Trance Gate preset with the playhead
CURVETrance Gate 1/16 on a one-bar period. The playhead runs left to right; the readout below shows the gain in dB.

05Preset bar & user bank

Header of TT-KICKSHAPE with the preset bar: previous, preset name with drop-down, next, SAVE and a menu button, left of the OPTIONS button, and the open preset list with FACTORY and USER sections
PRESETSThe preset bar sits in the header, directly left of OPTIONS: < name > SAVE .... The name opens the list with the FACTORY and USER sections.

The bar loads and saves the whole sound of the instance in one step: all timing, shape, stereo, target, band and detector settings plus all eight curve slots with their preset names. Not part of a preset: the colour scheme (OPTIONS), the grid snapping of the editor, the MIDI channel / note filter and THRU, the CC number and channel, RUN WHILE STOPPED and the hidden test parameters.

ControlFunction
< / >Previous / next preset: first the 19 factory presets, then the used user slots; wraps around and loads immediately.
Name fieldOpens the list: FACTORY (19 curves) and USER (32 slots, empty ones show - empty -). Mouse wheel scrolls, click loads. A * behind the name means the state differs from the loaded preset.
SAVESaves the current state into the selected user slot; with a factory preset (or none) selected, into the first free slot. A name box opens (up to 24 characters, default User 07): type, Enter or OK saves, CANCEL or a click outside cancels.
...RENAME, COPY (into the next free slot), DELETE (a second click confirms) for the selected user preset, and INIT (factory settings of all preset parameters and the default slot curves).

A factory preset loads a curve into the active slot and leaves every other setting alone (exactly like the old preset selector). A user preset restores everything, including which slot is active and all eight slot curves.

Where the user bank lives. Plug-ins cannot write files, so the 32 user slots are part of the plug-in state: they are saved with the project, with FX-chain and track-template copies, and in every REAPER preset of this plug-in (the + button in the FX window toolbar). To take your bank to another project or computer, save a REAPER preset once (+ → Save preset) and load it there: the whole bank comes with it. Projects saved with earlier versions load unchanged with an empty bank.

Typing names. REAPER keeps Space for the transport, so type Shift+Space for a blank. Depending on your REAPER settings Esc closes the whole FX window; use CANCEL instead. (The + menu of the FX window also has Send all keyboard input to plug-in.)

06Shaping the gain

ControlRangeFunction
DEPTH0–100 %, def. 100gain = 1 − DEPTH · (1 − c). 0 % is bit-exact transparent (tested on noise, with every target).
SMOOTH0–50 ms, def. 2One-pole smoothing of the gain, applied last. At 2 ms the gain never jumps more than 0.0104 per sample (48 kHz).
INVERToff / onMirrors the curve (c' = 1 − c) before the depth, so DEPTH 0 stays transparent.
PHASE0–100 %Start offset inside the curve (BEAT / FREE: shifts the phase; MIDI / AUDIO: the curve starts this far in).
TENSION−1 … +1Added to the tension of every segment (result limited to ±1).
MIN LEVEL−96 dB (= −inf) … 0 dBFloor of the gain, applied after the depth: max(gain, floor). 0 dB switches the effect off.

07Stereo & 3-band split

LINK (default on) gives both channels the same curve. With LINK off, L/R OFFSET delays the right channel’s curve by that share of the length — a ping-pong pump; in MIDI/AUDIO mode the run is extended by the offset so the right channel finishes its curve.

3-BAND SPLIT divides the signal at X1 (40–400 Hz) and X2 (400 Hz–8 kHz) with 4th-order Linkwitz-Riley filters. Each band has its own DEPTH (multiplied by the global DEPTH) plus M (mute) and S (solo). The typical use: duck only the bass region under a kick and leave the top untouched. The low band passes an all-pass at X2, so the three bands add up to a flat magnitude response (measured ±0.013 dB from 60 Hz to 16 kHz; the null test against the input passed through the same two all-passes is −135 dB).

A linear-phase-free split cannot be phase-transparent: with the split on, even at DEPTH 0 the signal leaves through two all-passes (amplitude identical, phase rotated around X1 and X2). The bit-exact bypass applies with the split off. Also mind the skirts: a sine 80 Hz with X1 = 150 Hz lies only 0.9 octaves below the crossover, so 75 % low-band depth gives −10.3 dB instead of −12 dB there (−11.9 dB with X1 = 300 Hz).
TARGET / BANDS / CC OUT panel with the 3-band split enabled, crossover knobs and per-band depth with mute and solo
BANDS3-band split. Crossovers X1/X2, per-band depth with M/S, the low-pass target (RANGE / FREQ) and the CC output.

08Low-pass target

TARGET chooses what the curve controls: VOLUME (default), LP FILTER or BOTH. The low-pass is a 12 dB/oct state-variable filter whose cutoff follows the gain: cutoff = FREQ · 2^(−RANGE · (1 − gain)). At gain 1 the cutoff is FREQ; a full dip lowers it by RANGE octaves. At gain 1 the filter is blended out exactly (bit-exact). Beta: the target is verified against the analytic filter response (within 0.1 dB at 1 kHz cutoff), but not yet tuned by ear. With the split on, the low-pass acts on the summed output.

09MIDI CC output

CC OUT sends the current curve value (after DEPTH, INVERT, MIN LEVEL, before SMOOTH) as a controller, 0–127, on CC # / CH. A value is sent only when it changes (at most one per block), so a constant curve sends nothing after the first message. Use it to modulate a synth filter or a send from the same curve that ducks the volume — the LFOTool principle. Measured: value = round(127 · curve) exactly, position and value identical at the receiver. MIDI that enters the plug-in still passes through.

10Latency, routing & lookahead

11Controls

All sliders are hidden by design; the drawn front (1000×700, scales with the window) is the interface. Knobs: drag vertically, Shift = fine, mouse wheel, right-click / double-click / Ctrl-click = default. Hover any control for a tooltip.

AreaControls
HeaderTrigger mode BEAT / MIDI / AUDIO / FREE · slots A–H · COPY / PASTE · preset bar (< name > SAVE ...) · OPTIONS (COLOR)
Editor stripX GRID, Y GRID · TRIG LED · GAIN readout · IN / OUT meters (L, R) · latency in samples
TRIGGERBEAT: RATE, OFFSET, RUN WHILE STOPPED · MIDI: MIDI CH, NOTE, THRU, SYNC/MS + LENGTH, WAIT · AUDIO: THRESH, HOLD, LOOKAHEAD, DETECT ON, LENGTH, WAIT · FREE: RATE (Hz)
SHAPE / STEREODEPTH, SMOOTH, PHASE, TENSION, MIN LEVEL, INVERT, LINK, L/R OFFSET
TARGET / BANDS / CC OUTTARGET, 3-BAND SPLIT, RANGE, FREQ, X1, X2, LOW / MID / HIGH depth with M and S, CC OUT, CC #, CH
TT-KICKSHAPE header with the OPTIONS box open: ten colour swatches, the factory scheme CYAN is marked
OPTIONSOptions / Color. Click OPTIONS in the header, then a swatch. A click outside the box closes it.

Options / Color. The OPTIONS button at the right end of the header (right of the preset bar) opens the box; COLOR offers ten schemes: ACID, CYAN, ORANGE, MAGENTA, YELLOW, RED, BLUE, VIOLET, MINT and ICE. A scheme changes the accent colour (curve, knob rings, active buttons, LEDs, meters), the second colour and, for RED to ICE, the slightly tinted panel background of the whole front at once. The choice applies per plug-in instance, is saved with the project and with FX-chain copies, and is not touched by preset or slot changes (it is not part of a preset). The factory colour is CYAN. The colour is stored in the hidden parameter 58 (UI Color, 0–9).

12Hidden readouts

Sliders 46–56 (Q IDX … Q CMD) are a test interface used by the regression suite (phase, gain, trigger and CC logs, slot checksums); PRESET LOAD (slider 44) is a momentary parameter that loads a factory curve into the active slot and jumps back to 0 (for automation). Slider 58 (UI Color) stores the colour scheme of the OPTIONS box. None of the other sliders are needed in normal use.

13In practice

14Troubleshooting