Pitch slides and tone portamento
What it is#
Gliding into a note (tone portamento) or bending a note's pitch up/down (pitch slide) — the cheapest way to add emotion. Classic uses: slide up into the highest note of a phrase, slide down at the end of a phrase, slow bends between two notes for a lead-guitar feel. Fast slide = accent, slow slide = drama; EDM leads and basses live on this (source: s-037-lab).
How to do it#
Generic trackers#
Tone portamento is usually 3xx (slide the running note towards the new note at speed xx); pitch slides up/down 1xx/2xx. In S3M/IT the letters are Gxx to the note, Exx down, Fxx up, Lxy portamento + volume slide; ProTracker has fine slides E1x/E2x, which Vivid uses to steer a two-channel flange (sources: s-tw074-intro-to-musical-theory, s-tw077-chip-off-the-block, s-tw059-tracking-hints). In impulse-tracker tone portamento is Gxx, where xx/16 is the semitone step per tick — 037-lab converts its slide values to Gxx assuming speed 6 and tempo = BPM (source: s-037-lab).
Legato leads with Gxx (necros, source: s-tw012-advanced-tracking-tips): tone portamento "switches from note to note without re-starting the sample", which suits leads whose sample evolves over time. GF0 is practically instant — use it for every jump of more than three semitones so the lead is not "pitch bended too slowly"; smaller values (G20, G06) for one- or two-step moves; and put a GF0 on the row after a slow slide "to make sure that it makes it all the way up to the next note, since some players tend to play Gxx/3xx effects too slowly". Dan Hartrell's sax run uses G90 on every note for a "wavey" pipe-and-reed sound (source: s-tw021-tracking-tips). The whole recipe — velocity, legato, late vibrato, echo, drop-off — is on lead-articulation.
Units and limits per format (sources: s-protracker-23d-help, s-ft2-manual, s-st3-manual, s-st3-tech-doc, s-openmpt-manual-effect-reference, s-openmpt-manual-song-properties): ProTracker 1xx/2xx add to the Amiga period every tick ("called as many times as the speed of the song") and cannot pass B-3 (period 113) or C-1 (856); 3xx slides to the note (300 continues), E1x/E2x slide once ("Great for creating chorus effects"), E3x glissando snaps portamento to semitones. FT2 keeps the numbers, adds X1x/X2x extra-fine (speed ÷ 4), the volume-column Mx, and a linear frequency table that makes "all pitch bends run in constant speed, independent of the current frequency" (Amiga table = period slides). ST3's Exx/Fxx use periods four times finer than the Amiga's (hence EEx/FEx "four times more accurate"), with Gxx portamento and S1x glissando. IT/OpenMPT: with linear slides one unit = 1/16 semitone (extra-fine 1/64), otherwise a period (3,546,895 ÷ Hz; 3,579,364 in XM) — so a slide value means a different interval at every pitch; "Compatible Gxx" keeps tone-portamento memory separate from Exx/Fxx as FT2 does. Quirks: regular slides are not supposed to move at speed 1 (fine slides are); FT2 wraps a note slid too low "around at some point" into a very high note; IT plays nothing for a tone portamento with no previous note; ST3 continues a slide from the last arpeggiated note (source: s-openmpt-manual-compatible-playback).
SID-Wizard#
| command | effect |
|---|---|
$01 xx | pitch slide up |
$02 xx | pitch slide down |
$03 xx | tone portamento (auto-portamento to the new note) |
Shift+P | portamento flag directly in the note column |
$3F in the instrument column | legato / tied note: sets the pitch only, no envelope retrigger |
Slides are calculated: a slide of N semitones takes about the same time at any pitch. Practical ranges from s-037-lab: $30–$60 is the everyday portamento zone (a semitone in ~140–40 ms), $08–$20 a slow dramatic slide, $80 and up a one-frame snap; every +$18 doubles the speed. The Light and Bare players lack calculated slides / note-column portamento; an arp table entry cancels a slide; in the Extra player vibrato survives a pitch slide (source: s-sid-wizard-manual).
The book's pattern tutorial: 03 25 on a G#5 for a slow portamento, 02 20 slide down near the end, then a note-off; "when using slow portamento … you may have to adjust the note to play a bit earlier so it doesn't sound as if the note starts late" — they move it from row $10 to $0C (source: s-witchmaster-creating-chiptunes-with-sid-wizard).
What the player actually does (SW 1.97 player.asm)#
From m64's duet research (player.asm 2085–2171, 3094–3099, 1803–1816; source: s-duet-research-sidwizard-deep):
- A slide's per-frame step is
freq16(speed/2 + note − 107)through the exponential table — the "calculated" slide: equal semitones per second at any pitch. Slides$01/$02never self-terminate (no clamp; the 16-bit frequency can wrap) — they end only when something rewrites the slide state: a note start,$03/$08/$16, a$6xnote-FX or legato. - Tone portamento
$03steps FREQMOD+1 per frame (a carry quirk — plain slides step exactly FREQMOD, so$03 00still creeps 1 LSB/frame), detects overshoot by borrow and snaps to the exact target, then stays pinned re-asserting the target each frame. The note on a$03row sets the target pitch but skips the sound init, and hard-restart is suppressed for it. - The note-column portamento flag (
$78,Shift+P) uses a fixed speed of 110 (≈ note frequency / 20 per frame) with no parameter; the next real note then converts into a glide without retrigger — hard restart and note start are both suppressed. - Legato (
$3F) is implemented as a maximum-speed portamento: slide speed is forced to the ceiling so the pitch snaps within a frame or two, while envelope, tables and vibrato state are left completely untouched.
GoatTracker#
1XY / 2XY slide up / down and 3XY tone portamento all take a speedtable index holding a 16-bit pitch step per tick; 300 is a tie note (instant pitch change, no retrigger). Speedtable examples: 00 20 (old parameter $08), 01 00 (old $40), 4F FF "loops the pitch highbyte very fast so that a SEUCK-like 'space' effect is heard"; a high bit in the left byte (80 01) makes the speed note-independent (divisor 1 = half). SHIFT+H on a command precalculates a note-independent speed from the frequency difference of adjacent notes (00110 = double the C-3→C#3 difference). Portamento is a realtime command: it continues under one-shot commands and stops at 0XY (source: s-goattracker-readme).
CheeseCutter#
Slides live in the command table, not in the note column: entry 0 slides up, 1 slides down, 7 is tone portamento and 8 stops either. Two rules matter — portamento must be activated before the target notes and "works only on tied notes", and it resets an ongoing slide. The guide's known-quirks list adds that a slide or vibrato placed on a tied-note row is not executed at all (source: s-cheesecutter-guide).
defMON#
defMON has no slide command, by design: you write the bend as a sidTAB chunk and call it in a step's second sound-program column, beside the instrument in the first (instrument-tables). The pitch columns are TR and AF. AF packs finetune and bend into one byte — $00–$19 finetunes up with $19 equal to one semitone, $21–$7F continues upward (wrapping), $80–$BF sets the speed of a bend up and $C0–$FF the speed of a bend down — while TR is $00–$7F relative semitones (for arpeggios) and $80–$FF absolute pitches, so a slide's destination can be written either way (sources: s-defmon-wiki-manual, s-defmon-wiki-defmoning-101; detune).
LSDj#
Lxxslide: slides to the note in the row over a duration xx — in ticks if the instrument's PITCH is TICK, otherwise in xx/360 seconds. Manual example:C-4, thenF-4 L40, thenC-4 L10bends up to F and snaps back. In a table,Lin the left command column uses the transpose column as target relative to the base note; transposes and slides add independently.Pxxpitch bend: continuous bend at the given speed (P02up 2,PFEdown 2). Behaviour follows PITCH: DRUM = logarithmic at 360 Hz (kicks), FAST = linear at 360 Hz, TICK = per tick, STEP = instant pitch change without bend. On noise instrumentsPappliesSevery tick.- Legato: cut the instrument column with
B+Ato change the note without retriggering. Fxyon pulse instruments sets PU2 transpose and finetune in 1/32-semitone steps — micro-detune rather than a slide (detune).
(source: s-lsdj-manual)
Hardware limits (source: s-pandocs-audio-registers): pitch is an 11-bit "period value" 0–$7FF; pulse frequency = 131072 ÷ (2048 − value) Hz, wave = 65536 ÷ (2048 − value) Hz (one octave lower at the same value). The scale is not linear in pitch: one step at value $500 changes the pitch by about 2 cents, at $7D0 by about a third of a semitone, and near the top by whole semitones (computed from the formula) — high slides step audibly, low ones are smooth. Period writes only take effect when the current sample ends. PU1's hardware sweep (NR10, LSDj's SWEEP and S on pulse): every 1–7 ticks of 1/128 s the period value changes by ± value ÷ 2^step; in the upward direction a result past $7FF switches the channel off (even with the pace at 0), and a downward sweep can never underflow — a rising sweep that goes too far ends in silence rather than at the top.
PITCH modes and their history (sources: s-intense-tech-10-kicks-part-1, s-intense-tech-11-kicks-part-2, s-intense-tech-13-kotlinski-interview): the pitch engine changed in 5.1.0 (johan-kotlinski: "actually a total disaster" at first — "it took way too long until it was on par with what was there before in terms of kick crafting"), losing the old logarithmic slides until version 6 added the instrument setting P/L/V — renamed PITCH in 7.0 — which governs P, L and V: FAST (formerly "HF") at the fastest rate, TICK much slower and tempo-dependent, STEP makes P a pitch offset (fun on kit snares), DRUM emulates the pre-5.1.0 logarithmic slides through a separate frequency lookup table and is not affected by tempo. In version 6 DRUM broke transposes in phrases and tables (turn the instrument's TRANSPOSE off); 7.0 (7.0.6 in November 2019) made transpose work with DRUM. L with transpose 80 in a table slides to the lowest note and stops there without wrapping. On noise instruments the commands act on the shape instead: S adds per digit (S01 on 4F gives 40, SFF gives 3E) and accumulates, whereas a phrase or table transpose changes the whole byte (4F + 01 = 50, + FF = 4E) and reverts when its row ends; P keeps adding every tick (FF, F0, F1, F2 …), C alternates base and added shape per tick (C01: FF/F0); CMD/RATE slows both. Smooth noise sweeps therefore need hand-made S tables (source: s-intense-tech-17-the-joys-of-noise) — that description holds up to 9.0.x; see the next paragraph for 9.1.0.
Later versions (intense-tech): version 7 (7.7.4, January 2020) added the FX/SPEED setting — renamed CMD/RATE in version 8 — which stretches each step of P (in TICK pitch only, like V), a wave-instrument FINETUNE of -F…+F, and the R8x super-fast retrig that restores the old wave-channel pitch wrap: on wave the pitch becomes tunable instead of relying on P, and a pulse kick reaches "about 3 whole tones lower than the pulse channel is normally capable of" (retrigger; sources: s-intense-tech-12-scoping-out-new-features, s-intense-tech-14-lets-appreciate-version-8). In 9.1.0 the noise channel became an ordered scale (long-loop values 00–3B, then short-loop notes by octave), so P on noise now sweeps smoothly through it without a table, with a new speed scale — P01 applies S01 every 4 ticks, P04 every tick — enough for kicks, hi-hats and crashes from one instrument; the instrument FINETUNE also gained a second digit (old 01 = new 10) (source: s-intense-tech-19-new-noise-and-910-news). Contradiction: the 9.2.6 manual as read above says P on noise "applies S every tick", whereas article 19 gives P04 as the every-tick speed from 9.1.0 on (sources: s-lsdj-manual, s-intense-tech-19-new-noise-and-910-news). A beginner's pulse kick from sabrepulse: PF1 in the first command row of the instrument's table, K00 near its end (instrument-design; source: s-sabrepulse-getting-started-with-lsdj).
Forum practice for L (source: s-chipmusic-lsdj-faq): the command goes on the target note — "it bends the previous note to the new one" (A#6 … C 6 L02 down, C 5 … A#5 L02 up); L on an empty step bends the note "down to nil"; in the 2010 versions only L01/L02 sounded musical, and slides ignore the vibrato waveform (only the HF/non-HF setting matters). Without PITCH = DRUM a kick slide played on a low note wraps back to the highest octave (source: s-infu-getting-started-with-lsdj).
Slides as drum design (defense-mechanism, 2024–25; sources: s-defensemech-every-lsdj-kick, s-defensemech-noise-channel-92l):
Palone slides down and wraps if pushed too far, whileLwith transpose80always lands on the lowest note, C1 — so the two together separate the transient's speed from the body's slope, and the note written in the phrase only sets where the slide starts. That is the tuning control: "that allows me to actually tune the transient of the kick using the starting pitch in the note column", with higher octaves adding high end and the difference growing as the slide slows.- Stutters used to need an
L 00 00on the tick where the kick restarts, becauseRdid not reset the pitch; in 9.4.0Rretriggers the pitch too, so a plainRin the table is enough (retrigger). (The version is read off screen in an auto-transcribed video; the wiki's LSDj version history otherwise stops at 9.2.6 — (unverified).) - Why PITCH SAFE exists, in hardware terms: the noise channel is a linear-feedback shift register that "sometimes … creates zeros, and that results in silence", so on real hardware — "especially like the original brick DMG", old CGBs and some Game Boy Advance units — a pitch slide on noise can simply cut out with no
K. SAFE re-initialises the channel at every pitch change so it never drops out, at the price of texture: "it creates a harsher sound, it's just a totally different texture". Slowing the rate of change, or lowering COMMAND RATE with PITCH set to TICK, buys some smoothness back — and on a kick the restart is the sound, giving "almost a tonal aspect" where FREE "just completely loses its impact" (game-boy-apu, instrument-design). Pon noise keeps running after the note ends, so stop it deliberately.
Impulse Tracker details#
Exx/Fxx slide down/up (values up to DF); EFx/FFx are fine slides and EEx/FEx extra-fine (a quarter of fine); Gxx may target a different sample, which then starts from its beginning; E, F and G share one effect memory. Linear slides (F12) make a value mean the same interval at any pitch — F08 at speed 5 raises a whole tone whether from C-4 or C-5 — because the frequency is multiplied by 2^(value/768): 64 units per semitone, Exx steps 4 units per frame, EEx 1 unit. With Amiga slides you must experiment per octave (sources: s-it-manual, s-ittech).
In the classic drivers (1986–1988)#
- soundmonitor: portamento speed in registers 10 (lo) and 11 (hi), enabled per note by the portamento bit in the sound options; register 9 selects a pitch effect instead — pull the tone up (bit 0) or down (bit 1) between the struck note and the target in register 3, once (bit 2) or constantly — which is how its bass drum is made (source: s-64er-soundmonitor-article).
- matt-gray-player: pattern commands
$FB mm(down) and$FC pp(up) slide the next note by that amount per frame, e.g.$FC,$37,$45then$FB,$7F,$47; an instrument can also carry a fixed portamento, on the low byte ($01down,$02up) or the high byte ($03down, else up) of the frequency (sources: s-sidin02-matt-gray-driller, s-matt-gray-dominator-source). Tognon's 1990 Dominator disassembly reads the same pair as portamento — "you can ever see this as a portamento" — and adds the persistence rules that decide how it behaves in a pattern: a slide "lies only for the next note to play" and cancels an active plex (chord) and vibrato, while a plex cancels a slide and stays until a new instrument is chosen. The instrument-level version has five settings (0 none, 1 down, 2 up, 3 down on the high byte, 4 up on the high byte) and is, in his words, "more capable in comparison with pattern slide" (source: s-sidin14-dominator-player). - musicfile: "Tone glide" (with
glidedelayandglideset) and "Tonesweep up" routines, plus anoisehitone = $faconstant for noise pitch (source: s-realdmx-sid-players).
- hubbard-player: a per-note second byte with bit 7 set — bits 1–6 the amount added to the 16-bit frequency every frame, bit 0 the direction (
$90= up 16/frame,$99= down 24,$e8= up 104) — Monty's "new pitch bend code"; and the skydive flag$02: every second frame the frequency high byte decrements until 0 (source: s-realdmx-hubbard-player). - galway-player: a slide is the frequency program's adder 4 applied during the initial delay (flag bit 1), or a one-stage program (
$c4,$00 … times $ff= +196 per tick for 255 ticks); Arkanoid's title turns a sounding note into a 128-tick slide by poking the running instrument (SET2CI $0C,$80,$07 / SET2CI $06,$3C,$00) (sources: s-realdmx-galway-rambo-player, s-realdmx-galway-arkanoid-player). - ocean-music-driver:
BEND dir,step,length,offset16is written before the destination note and pre-offsets the frequency bystep × length, so the composer writes where the slide lands — the loader'sBEND,UP,$10,48 / !wo $10*48 / C2,192;EFFECT nmakes each note start atn(or note +n) until its release point, a pluck (source: s-realdmx-ocean-dunn-hughes-driver). - bjerregaard-player: pattern bytes
$A0–$BF= glide speed, next byte the target note, the step being$0Fshifted left by the speed (source: s-realdmx-bjerregaard-player). - whittaker-player:
$84/$85 lo,hi,delay— after the delay the step is accumulated every frame, a quadratic sweep;$86/$87bend a semitone per tick; Fred Gray's Mutants glides in quarter-semitone steps per frame; Red's player glides at a nibble's speed from the instrument (source: s-realdmx-fredgray-kimmel-whittaker).
- Tognon's portamento recipe for the galway-player: a one-phase frequency program —
$01,$00added for$35cycles, no delay, flag$08— "a long up portamento with little frequency increment" that climbs 53 units and then holds, because a flag with neither bit 7 nor bit 0 set ends the effect at the current pitch (source: s-sidin04-galway-arkanoid).
Heard in#
rob-hubbard's "skydive" — an instrument flag for "a slower frequency down, that I think sounds like somebody yelling as they fall out of a plane" — combined with an octave arpeggio in monty-on-the-run and Crazy Comets; Monty's middle section "was an excuse to use the new pitch bend code" (source: s-newman-driving-the-sid-chip).
From SIDin #6–#7 (2004–05)#
- The modules driver (1988):
$8C step delay(up) and$8F step delay(down) add or subtractstepto the 16-bit frequency everydelayticks until$92stops the effect — an open-ended slide rather than a portamento to a target:pat0d: $8C,$80,$01 / $41,$B4 / $92 / $00,$B0 / $8F,$80,$01 / $00,$B4 / $92rises by$80per tick through a note, rests, then falls (source: s-sidin07-inside-modules). - asterion-sid-tracker (2004):
3xin the pattern is a portamento to the target note at speedx, and2xwith bit1ties the note (source: s-sidin06-asterion-sid-tracker).
JITT64 (2010)#
06 xx / 07 xx add or subtract xx twice per tick ("the amount (*2)") to the 16-bit frequency until 00 (bits 1–2) stops them; 08 xx is a tone portamento entered on the same row as the target note: the player takes the new note's frequency as the target, restores the previous frequency as the start, chooses the direction by a 16-bit compare, moves xx × 2 per tick and snaps to the target when it is passed, then clears the command. Portamento at instrument level uses the frequency column's relative-frequency entries; a note-independent "hifi portamento" was planned (sources: s-sidin13-inside-jitt64, s-sidin13-jitt64-tracker).
Tips & pitfalls#
- Never slide on the first note after a rest (nothing to slide from) or on 16ths — 037-lab's generator follows exactly this rule.
- Slide speeds are tempo-relative: a value that feels right at 125 BPM is too slow at 160.
- Tone portamento without retrigger keeps the adsr-envelope running — that is the legato sound; retriggered slides are a different, punchier effect.
- Learn the gesture away from the tracker: the-zapper credits playing a real instrument for teaching him "the technique to apply to your tracker … how to make it feel", slides and vibrato on bass above all — necros complimented the result for sounding real (source: s-tw027-interview-zapper).
- On the SID a pitch-up attack can be a wave-table effect rather than a portamento: 4mat, reading a Gallefoss tune from a register dump — "It's just pitching up from a lower note over a few frames. (you could use an un-looped arpeggio to do the same thing)" (wavetable-programming; source: s-chipmusic-sid-music-hints-n-tips).
Related#
vibrato · melody-writing · octave-bass · 037-lab
Sources#
s-037-lab · s-sid-wizard-manual · s-lsdj-manual · s-tw074-intro-to-musical-theory · s-tw077-chip-off-the-block · s-tw059-tracking-hints · s-it-manual · s-ittech · s-goattracker-readme · s-witchmaster-creating-chiptunes-with-sid-wizard · s-newman-driving-the-sid-chip · s-pandocs-audio-registers · s-intense-tech-10-kicks-part-1 · s-intense-tech-11-kicks-part-2 · s-intense-tech-13-kotlinski-interview · s-intense-tech-17-the-joys-of-noise · s-chipmusic-lsdj-faq · s-infu-getting-started-with-lsdj · s-protracker-23d-help · s-ft2-manual · s-st3-manual · s-st3-tech-doc · s-openmpt-manual-effect-reference · s-openmpt-manual-song-properties · s-openmpt-manual-compatible-playback · s-tw012-advanced-tracking-tips · s-tw021-tracking-tips · s-intense-tech-12-scoping-out-new-features · s-intense-tech-14-lets-appreciate-version-8 · s-intense-tech-19-new-noise-and-910-news · s-sabrepulse-getting-started-with-lsdj · s-chipmusic-sid-music-hints-n-tips · s-64er-soundmonitor-article · s-sidin02-matt-gray-driller · s-matt-gray-dominator-source · s-realdmx-sid-players · s-realdmx-hubbard-player · s-realdmx-galway-rambo-player · s-realdmx-galway-arkanoid-player · s-realdmx-ocean-dunn-hughes-driver · s-realdmx-bjerregaard-player · s-realdmx-fredgray-kimmel-whittaker · s-sidin04-galway-arkanoid · s-sidin06-asterion-sid-tracker · s-sidin07-inside-modules · s-sidin13-inside-jitt64 · s-sidin13-jitt64-tracker · s-duet-research-sidwizard-deep · s-duet-research-sidwizard · s-cheesecutter-guide · s-defmon-wiki-manual · s-defmon-wiki-defmoning-101 · s-defensemech-every-lsdj-kick · s-defensemech-noise-channel-92l · s-sidin14-dominator-player · s-tw027-interview-zapper