Sidechain pump
What it is#
Duck the volume of chords and bass at every beat, then let it swell back before the next one. It creates the breathing, pumping motion of modern dance music — even with no kick drum playing at all (source: s-037-lab).
Why it works#
Two things, and only one of them is about the kick. It clears room for the transient — "it helps the kick stand out" — and, once the ear has learned the period, the dip is the beat: "even if you have no kick playing you still have the feel of the song" (source: s-painperdu-04-sidechaining). That second half is why it is worth doing on chips, where the real thing (a compressor keyed off the kick, see reverb-and-compression) does not exist and every channel is already spoken for.
How to do it#
Impulse Tracker / OpenMPT#
Three levers, in increasing order of tidiness (source: s-it-manual):
Dxyvolume slides typed per row, the crude version (volume-slides).Mxxchannel volume (0–40h) withNxychannel volume slide — one command per channel per beat, no per-note volumes to edit, and it survives copy-paste of the notes. This is the closest thing a tracker has to a sidechain bus: putM20on the beat row andN0xafter it on every channel that should duck. S3M players only supportM/Nas an extension, so a song that needs them should stay.it.Vxxglobal volume withWxyglobal volume slide ducks everything including the kick, so it is a mastering lever rather than a pump — and IT'sVxxaffects notes already playing, unlike ST3's.
Or bake it into the instrument: a volume envelope that starts low and rises, retriggered every beat, pumps without a single command in the pattern (instrument-envelopes; source: s-037-lab). Keep the global volume high while doing any of this — at V05–V08 a volume-column fade jumps instead of sliding (source: s-it-hints).
LSDj#
The table envelope column is a custom amplitude envelope (amplitude digit + duration in ticks, loop with H in the second digit — the manual's tremolo example); a table that starts low and rises over a beat, run with a groove of the beat length, pumps any instrument that uses it. Exy on pulse/noise sets amplitude x with release y per row for hand-drawn ducks (source for the mechanics: s-lsdj-manual).
In a full arrangement it comes out as an envelope on every chord instrument: each arp note triggers a rising envelope so the chords give way on the beat — "kind of your poor man's sidechain compression emulation in LSDj, with just volume" — timed so the kick lands in the dip (source: s-painperdu-03-isometric-sav-walkthrough).
pain-perdu builds the whole effect out of those pieces (source: s-painperdu-04-sidechaining). Half of it is free: kick and bass share the wave channel anyway, so they cannot sound together — what has to be written is the recovery. Put E02 (50 %) and then E03 (100 %) on the steps after the kick and the bass swells back in on the 16th-note grid. Then halve the groove: at groove 3 each step is a 32nd, the same two commands recover twice as fast, and the pump stops announcing itself — "it's almost as if you hear the bass being triggered at the same time as the kick, but this is an illusion being made possible by the fast groove" (shuffle-funktempo). Duck the channels the kick never touches as well: an envelope command rising from 0 at speed A once per beat on the pulse channel "gives a little bit more of a four-to-the-floor groove … and it helps the kick stand out", and it carries the feel through bars with no kick at all — "even if you have no kick playing you still have the feel of the song". The same command on the noise channel gives the house-record hat that pumps instead of hitting. Two kick patches with different kill points and pitch-drop speeds (his verse kills at 4, his chorus at 6 with more low end) turn the same trick into a section contrast.
On the wave channel E is too coarse to pump with — E01/E02/E03 are 25 / 50 / 100 %, and "there's nothing between fifty and a hundred percent … sometimes 2 is too soft for an instrument and 3 is too loud in the context of your mix". Ramp LIMIT instead: 0 on the synth's first wave, F on its last, PLAY LOOP with the loop point at the end so the instrument sustains once it has recovered — "now we can have this going from zero to F and have this kind of naturally do its own sidechaining". SPEED and LENGTH set how fast the duck recovers, and a start value above 0 keeps it from ducking to silence; VOLUME and Q can ride the same ramp for a filter-and-volume pump (source: s-defensemech-wave-channel-ramble). Before LSDj 7's silky wave this was impractical — every frame change clicked (wavetable-programming).
SID / C64#
The sid has no per-voice volume register. The datasheet's "master volume" is the low nibble of $D418, one global 4-bit level for all three voices (source: s-mos-6581-datasheet) — defMON's player states the consequence plainly: "4 bit precision = 16 steps" (source: s-defmon-wiki-calling-the-player). So there are two routes, and they are not equivalent.
Global, with the main-volume command. sid-wizard exposes it twice: small effect $Ax sets the main volume for a row, and orderlist values $A0–$AF set it for a whole stretch of the song (sources: s-sid-wizard-manual, s-sid-wizard-charts-and-tables). goattracker's equivalent is DXY master volume (source: s-goattracker-readme). A $Ax ramp — low on the beat row, back up over the next two or three rows — is a real pump, but it ducks the drums with everything else, so it only works when the beat is a gap rather than a hit (compare channel-interleaving, where the bass channel is the drum channel).
Per voice, with the envelope. The per-voice level lives in the ADSR sustain nibble, so ducking one voice means re-entering its note at a lower sustain and back up: instrument-column $5x (sustain) and $6x (release), or the small effects of the same numbers, give a per-row sustain level in SID-Wizard (source: s-sid-wizard-charts-and-tables); GoatTracker writes the registers directly with 5XY/6XY (source: s-goattracker-readme). This is the honest per-channel duck, and it costs a note retrigger — plan the hard-restart accordingly.
Beyond the chip#
Airon's 1998 columns describe the studio version the chips are imitating: a compressor with a fast attack and a release timed to the tempo, and — for the drum sound the pump is usually protecting — the gated-reverb recipe with a 1 ms attack and 12:1 ratio (source: s-tw118-reverb-and-compression; the numbers are on reverb-and-compression). In a modern tracker the lever can be built in: duet gives every effect return a DUCK control that "bows the return under the dry while the dry is loud" (source: s-duet-docs-sounds-mixer-bounce) — the effect send ducked by the dry signal, which is the sidechain in its original studio sense.
Tips & pitfalls#
- On a 6581, do not pump
$D418fast. Rapid writes to the global volume register are exactly the mechanism of the C64's digi trick: the register leaks a DC offset, so each write clicks, and a stream of them is 4-bit PCM (sources: s-newman-driving-the-sid-chip, s-furnace-c64-docs). A slow ramp over several frames is fine; a per-frame envelope will buzz. The 8580 removed the offset, which makes the ducking clean and kills the digi channel (chip-samples). - Duck what the kick does not already mask. Where kick and bass share a channel the mute is free and only the recovery has to be written (source: s-painperdu-04-sidechaining).
- Fast recovery hides the trick; slow recovery advertises it. Halving the groove is the cheapest way to move between the two without rewriting any commands (source: s-painperdu-04-sidechaining).
- A 4-bit ladder is coarse. On both the SID's
$D418and LSDj'sEcommand the smallest step is large enough to hear as a step; where a finer curve is needed, ride a parameter that has more resolution instead — LSDj's synth LIMIT (source: s-defensemech-wave-channel-ramble), IT'sNxychannel-volume slide (source: s-it-manual).
Related#
rhythm-and-groove · adsr-envelope · chord-arpeggio · volume-slides · instrument-envelopes · reverb-and-compression · channel-interleaving · shuffle-funktempo
Sources#
s-037-lab · s-lsdj-manual · s-defensemech-wave-channel-ramble · s-painperdu-04-sidechaining · s-painperdu-03-isometric-sav-walkthrough · s-it-manual · s-it-hints · s-sid-wizard-manual · s-sid-wizard-charts-and-tables · s-goattracker-readme · s-mos-6581-datasheet · s-defmon-wiki-calling-the-player · s-furnace-c64-docs · s-newman-driving-the-sid-chip · s-tw118-reverb-and-compression · s-duet-docs-sounds-mixer-bounce