Volume slides, fades and effect memory
What it is#
The first effect most trackers learn — and, per the Modsquad, "the one effect that makes or breaks the song" (source: s-tw077-chip-off-the-block). Understanding it means understanding frames: speed Axx is frames per row, and a slide acts once per frame after the first.
How to do it (ST3 / IT command set)#
D0yslides down,Dx0up, by x or y per frame — i.e. y × (speed − 1) per row: at speed 6D01= −5,D02= −10;D03at speed 4 = −9. Plan fades exactly instead of by ear: from 34,D01reaches 39, two rows ofD02reach 59 (source: s-tw058-the-finishing-touches).- Fine slides
DFx/DxFmove by x once at the row start;Kxy/Lxycombine a slide with vibrato / portamento;Mxxsets a channel volume (0–40h) so an echo column needs oneM20instead of edited volumes (fake-echo);Vxx/Wxxset and slide the global volume for song fades — and must be reset at the start or the loop plays silent (song-init-and-looping). - Mix volume-column values with slides for shaped notes:
C#6 02 33 UC3→K20→44 H82→K01→32 H71→20 E0E… (Catspaw's drop-off). - Velocity by hand (Necros, source: s-tw012-advanced-tracking-tips): give every lead note its own volume — ramp a run up to the held note (
40 40 50 60 64), drop back after it, multiples of 10 for speed; write it in the volume column rather than as aD20so the effect column stays free; high notes sound louder than low ones at the same value, so hold the top back except on accents. His drop-off ends a big note with falling volume and an accelerating down-slide:50 E04→30 E06→10 E10→00. Hartrell's staccato:D0Fon the note and the next row (source: s-tw021-tracking-tips). See lead-articulation. - The volume tail instead of a cut (vegas, 1996): "Dont use a ^^^ to kill a note in the lead, just drop the volume to 10, 15, or 20 and volume slide the rest away. It leaves a reverb-ish effect thats really good on flutes, piano's and violins" — a volume-column value of
10–20on the release row, thenD0xdown to zero (source: s-tw062-interview-vegas; see lead-articulation). Learning the "manual volume slide in st3" was paganus's newbie milestone of 1995 (source: s-tw030-interview-paganus). - Effect memory: a parameter of
00repeats the last value —D10, D00, D00,G03, G00,Q43, Q00— smaller files (matters for chip songs) and faster typing; shared memories (Exy/Fxyin ST3/IT, others per format) can bite (source: s-tw058-the-finishing-touches).
The manuals' arithmetic (sources: s-st3-manual, s-ft2-manual, s-protracker-23d-help, s-openmpt-manual-effect-reference): ST3 Dxy moves "(speed−1) × y" per row — D04 at speed 8 drops 28 — because the slide runs on every tick but the first; the fine forms DFy/DxF move once per row regardless of speed, and ST 3.0 files slide on every tick ("Fast volslides", also IT's D0F/DF0). ProTracker Axy and FT2 Axy do the same per tick ("The slower the song, the more the volume will be changed"; in FT2 "one of the data fields must be 0"), with EAx/EBx as the fine versions and FT2's volume column +x/-x/Ux/Dx. Global volume: FT2 Gxx/Hxy (00–40), ST3 Vxx (00–40), IT Vxx (00–80) and Wxy; IT adds channel volume Mxx/Nxy, which S3M players only support as an extension.
More from the IT manual#
D0F/DF0 slide by 15 on every frame for S3M compatibility — in openmpt that behaviour is a per-song switch rather than a command trick: Fast Volume Slides applies slides on every tick "as Scream Tracker 3.0 did", so an imported S3M keeps its original slide rates (source: s-openmpt-manual-song-properties); Alt-K slides the volume column linearly between the block's ends (twice removes all volumes), Alt-X does the same for effect values (pan, offsets, global volume), Alt-J amplifies a block's volumes 0–200 %; the global volume Vxx (0–80h) affects notes already playing, unlike ST3. Keep the global volume high: at 5–8 a volume-column fade jumps instead of sliding (Nacho) (sources: s-it-manual, s-it-hints).
Chip trackers#
(unverified) SID-Wizard has no per-voice volume slide — shape volume with ADSR and the $5x sustain level; LSDj's E command and table envelope column do the job (adsr-envelope, sidechain-pump).
LSDj#
No slide command: volume is shaped per note by Exy (x = level 0–F; y = 1–7 decrease from fastest to slowest, 9–F increase from slowest to fastest, 0/8 hold), by the instrument ENV/ADSR and by the table volume column (level + ticks, looping when all 16 rows are used). Until 8.8.0 every pulse or noise volume change reset the hardware envelope with a click; since 8.8.0 a software volume makes E, the table column and K click-free, with speeds from 1 (shorter than any hardware speed) to F. Mxy moves the master volume per side (9–B up, D–F down). Global fades and ducks are therefore tables and M, not slides — and the four wave-channel steps are enough for a rhythmic one: because E02 is 50 % and E03 100 %, an 02 followed by an 03 on the next step is an audible pump locked to the 16th note, which is how pain-perdu writes the recovery half of a sidechain. On the pulse and noise channels he instead runs an envelope that starts from zero and rises once per beat, so the pump is there even in bars where the kick is not (sidechain-pump; source: s-painperdu-04-sidechaining). (adsr-envelope, sidechain-pump; sources: s-intense-tech-18-adsr-makes-life-easier, s-intense-tech-09-lets-table-this-discussion, s-lsdj-manual).
Mixing levers beyond E (source: s-intense-tech-15-lets-mix-it-up-and-down; the headroom argument behind them is on levels-and-headroom): when E03 (100 %) is too loud and E02 (50 %) too soft on the wave channel, cap the synth's LIMIT instead — at instrument VOLUME 3, LIMIT 8 gives about 50 %, 9 ≈ 56 %, E ≈ 94 % — and different LIMIT values on the synth's first and last wave, run with W (speed, length), make a wave-channel volume envelope (wavetable-programming). On pulse and noise the version-8 ADSR chains E-like stages and can fade in to a chosen lower maximum, where a rising E climbs to F or the next E; E commands and the table volume column override the ADSR (source: s-intense-tech-14-lets-appreciate-version-8). A transient beats a louder level: instrument volume around 90 with the table's E pulling it down after the first tick lets a snare cut through "without overpowering the other channels" (Pain Perdu's trick; instrument-design).
Before software volume the clicks were the topic of the LSDJ FAQ thread (source: s-chipmusic-lsdj-faq): a table fade-in 01 21 41 61 81 A1 clicks on every step because "to change the volume, the phase of the waveform needs to be restarted" (nitro2k01 — the hardware behaviour Pan Docs describes, adsr-envelope); fixes of the time were chained E commands that continue where the previous one stops, aphasia's stepped fade (a short loud 0F, then a sustain at the wanted level, repeated), or spacing the steps to the groove's ticks so the clicks fall on the beat. Infu's reading of ENV: each box is a level and the speed to the next box's level, 0 holds, lower speeds are shorter — a fade-in starts at 0: 07/88/-- (source: s-infu-getting-started-with-lsdj).
LIMIT is the wave channel's volume fader, and VOLUME is not. The two do different jobs and only one of them is safe to move: VOLUME scales the signal before CUTOFF, Q, PHASE and DIST, so turning it down also destroys the clipping or wrapping that made the sound — "what if you want to keep the same wave shape … I really like this sound, but it's too loud, and this was the bane of my existence in the early versions of LSDj, because you're just stuck — you can't get it to wrap if the volume isn't high". LIMIT (added in synth version 6) constrains the samples after all of that: F allows the full 0–F, 5 allows only 5–A, and whatever exceeds the window is handled by the DIST type. It exists precisely because the hardware's four steps leave the channel "often being too loud at 100% volume but too quiet at 25% or 50%". defense-mechanism's verdict: "LIMIT, I think, is almost more useful than anything else on this entire thing." Because the synth interpolates across its 16 waves, different start and end LIMIT values (say F → 4) are a fade — "a nice gradual fade without having to use the E commands, which only give you 100, 50, 25 or zero" (sources: s-defensemech-learning-lab-shorts, s-intense-tech-02-wave-synth-deep-dive-part-2; wavetable-programming, levels-and-headroom).
The wave channel is the exception (sources: s-chipmusic-lsdj-wav-channel-release, s-defensemech-wave-channel-ramble): E gives four steps only (0 / 25 / 50 / 100 %), and they are a bit shift, so the quiet settings also lose resolution. Three ways around it, in the order they were found — draw the fade into the waves themselves and step frames with F01 from a table (16 steps per synth, 32 across two); pan the channel alone to one side and use M, which has 8 steps and does move it; or, from LSDj 8, ramp LIMIT across the synth's waves, which is the smoothest of the three and doubles as a sidechain-pump.
Related#
fake-echo · song-init-and-looping · retrigger · tracker · sidechain-pump
Sources#
s-tw058-the-finishing-touches · s-tw077-chip-off-the-block · s-intense-tech-18-adsr-makes-life-easier · s-intense-tech-09-lets-table-this-discussion · s-lsdj-manual · s-chipmusic-lsdj-faq · s-infu-getting-started-with-lsdj · s-st3-manual · s-ft2-manual · s-protracker-23d-help · s-openmpt-manual-effect-reference · s-tw012-advanced-tracking-tips · s-tw021-tracking-tips · s-intense-tech-14-lets-appreciate-version-8 · s-intense-tech-15-lets-mix-it-up-and-down · s-tw062-interview-vegas · s-tw030-interview-paganus · s-it-manual · s-it-hints · s-chipmusic-lsdj-wav-channel-release · s-defensemech-wave-channel-ramble · s-openmpt-manual-song-properties · s-defensemech-learning-lab-shorts · s-intense-tech-02-wave-synth-deep-dive-part-2 · s-painperdu-04-sidechaining