Vibrato and delayed vibrato

aliases delayed vibrato, 4xy
sources 0 3 7 lab — techniques & theory (summary) · SID-Wizard 1.8 User Manual (summary) · Little Sound Dj v9.2.6 Operating Manual (summary) · TW #74–86 — Introduction to Musical Theory, vols 1–5 (Greg Heo) · TW #77–81 — A Chip Off the Block / Chiptune Seminar, parts 1–4 (The Modsquad) · Impulse Tracker User's Manual — IT.TXT (summary) · Impulse Tracker ITTECH.TXT — technical reference (summary) · GoatTracker v2.72 readme (summary) · Creating Chiptunes with SID-Wizard, Second Edition (summary) · chipmusic.org — LSDJ Chord Cheat Sheet / Advice on Learning Tables threads (2015) · chipmusic.org — LSDJ Advanced Tricks thread (2012) · Intense Tech #09 — Let's Table This Discussion! (Defense Mechanism) · ProTracker 2.3d help file (edited by echolevel) · FastTracker v2.08 Manual (Urban Jonsson, 1996) · Scream Tracker 3.2 User's Manual (ST3.DOC) · OpenMPT manual — Effect Reference · OpenMPT manual — Samples · OpenMPT manual — Compatible Playback · TW #12 — Advanced Tracking Tips (Necros) · TW #98 — Impulse Tracker MIDI (Airon) · MOS 6581 Sound Interface Device (SID) datasheet — the text behind Appendix O · C64 Programmer's Reference Guide, ch. 4 — Programming Sound and Music on Your Commodore 64 (1982) · Walleij — A SID player routine (MIDI-driven player design, note tables, hard restart) · Intense Tech #03 — Don't Sleep on Z (Defense Mechanism, after Hypnogram) · Intense Tech #12 — Scoping Out New Features (Defense Mechanism) · Intense Tech #14 — Let's Appreciate Version 8 (Defense Mechanism) · Intense Tech #19 — New Noise and 9.1.0 News (Defense Mechanism) · 64'er 10/1986 — Musik wie noch nie: the Soundmonitor article and manual · SIDin #2 — Matt Gray's Driller music routine (Stefano Tognon, 2002) · C64.COM interview #36: Matt Gray (2014) · GitHub realdmx/c64_6581_sid_players — Cybernoid II in Deenen's MUSICFILE, the MoN SFX player, the Driller listing · realdmx: Rob Hubbard's driver — McSweeney's Monty on the Run disassembly and the Commando title · realdmx: Martin Galway's Rambo II loader — the macro-language player, reverse-engineered by dmx87 · realdmx: Martin Galway's Arkanoid — Tognon's SIDin #4 reverse-engineering, with the 'sample' synthesis through $D418 · realdmx: Jonathan Dunn's Daley Thompson '88 and Ocean Loader 5 in Paul Hughes's Ocean music driver · realdmx: Johannes Bjerregaard's own player — the James Bond 3 demo (a Maniacs of Noise commission) and Myth · realdmx: three smaller drivers — Fred Gray's Mutants (song as code), Jeroen Kimmel's 'Red's music player' (1989) and David Whittaker's Panther driver · realdmx: two scene players with their own sources — Francois Prijt's Audial Arts 'zong player' v1/v2 (1991) and Adam Bulka's FAME 'Sound Routine f 4.1.0' (1988) · realdmx: Charles Deenen's two test tunes — an undated MUSICFILE build and the 'Scoop designs' Maniacs of Noise player · SIDin #1 — Iseq music composition program: the comp.sys.cbm threads and Steve Judd's Commando cover (2002) · SIDin #4 — Martin Galway's Arkanoid music routine, the explanation (Stefano Tognon, 2003) · SIDin #6 — Asterion Sid Tracker v1.0 reviewed (Stefano Tognon, 2004) · SIDin #7 — Inside Modules: Ivan Del Duca's music engine (Stefano Tognon, 2005) · SIDin #13 — Inside JITT64: the player routine (Stefano Tognon, 2010) · SIDin #13 — JITT64 Tracker: Tognon's Java Ice Team Tracker from the user's side (2010) · SIDin #14 — Inside Matt Gray's Dominator player (Tognon's commented PLAYER V4.2 and the musician's guide to composing in it, 2015) · SIDin #15 — Matt Gray interview (technical questions during Reformation, 2015) · DUET research: SID-Wizard player.asm deep dive (summary) · DUET research: SID-Wizard 1.97 formats and player (summary) · Pain Perdu — Hidden LSDJ Tricks EP2: In-depth WAV channel walkthrough (video, 2016) · Pain Perdu — Hidden LSDJ Tricks EP3: \"Isometric\" save-file walkthrough (video, 2016) · Defense Mechanism — LSDj Learning Lab shorts: Limit and Vshift, Long Filter Sweeps, Self-Resonating Bass (videos, 2020) · The CheeseCutter Guide — the recovered site manual (Wayback) · defMON wiki — features, interface overview, seqED key map · RVG Interviews: Matt Gray (2016) · Matt Gray's Dominator subtune 6 source (PLAYER V4.2, 1987) and the Reformation driver competition · realdmx: Reyn Ouwehand's Armada (MUSICFILE, 'Special version for Reyn Ouwehand', 1989) and Dutch Breeze (the 1990 MoN player) · My Computer Chronicles — Jens-Christian Huus / JCH (2017) · ProTracker 2.3A ReadMe, 2.0A effect and format docs, version table · TW #27 — Interview with Zapper (The Finn) · Defense Mechanism — LSDj Noise Channel Tutorial (v9.2.L) (video, 2022) · chipmusic.org — Wav Instrument Tutorials for LSDJ (2014)
created 2026-08-30 · updated 2026-08-31

What it is#

A periodic pitch wobble on a held note. The important variant is delayed vibrato: the note lands straight, then the vibrato fades in — real singers and lead synths don't wobble immediately. Straight attack + late vibrato instantly makes long notes sound intentional instead of static (source: s-037-lab).

How to do it#

Generic trackers#

Most trackers have a vibrato command, often 4xy (x = speed, y = depth): place it a few rows after the note starts, or use an instrument envelope with a delay (source: s-037-lab). In impulse-tracker / S3M the command is Hxy (4xy in protracker) and Kxy combines it with a volume slide; the Modsquad's chip lead uses H81/HA4 and puts an HFF vibrato on percussion instead of an arpeggio (sources: s-tw074-intro-to-musical-theory, s-tw077-chip-off-the-block).

Necros's rule for leads (source: s-tw012-advanced-tracking-tips): "Realistic vibrato, in a medium-tempo lead, starts out very soft and gradually fades in" — HA1 a row or two into a held note, then HA2, speeds 1–2 so the vibrato "doesn't become the main focus"; only "very up-tempo hard-hitting tunes" tolerate wild vibrato; and on a long sustain either bring it back to zero or fade the note, because "nothing sounds worse than a heavily oscillating note which just refuses to die" (lead-articulation). Over MIDI the modulation wheel (controller 01) usually sets vibrato depth only, the synth decides the rate (midi-in-trackers; source: s-tw098-impulse-tracker-midi).

Numbers from the manuals (sources: s-protracker-23d-help, s-ft2-manual, s-st3-manual, s-openmpt-manual-effect-reference, s-openmpt-manual-samples): ProTracker 4xy (400 continues; ProTracker 1.1A doubled the depth scale "to be compatible with NT2.0"), waveform E4x 0 sine, 1 ramp down, 2 square, 3 random, +4 = do not retrigger the waveform on a new note; FT2 the same plus a volume-column Vx and Sx (speed only); ST3 Hxy with Uxy four times finer "if a note is played very high", waveform S3x; IT/OpenMPT the same letters. Every LFO waveform is 64 points long and the speed is points per tick, so speed 2 completes a cycle in 32 ticks; "random" is unsupported by ProTracker and FastTracker. Sample-level auto-vibrato exists in XM (per instrument) and IT/MPTM (per sample): waveform, depth in 1/64 semitones, a sweep-in (IT: depth × 256 ÷ sweep ticks; XM: sweep ticks) and a rate of 256 ÷ rate ticks per cycle — it adds to pattern vibrato and cannot be changed from the pattern. FT2's ramp-down tremolo is a known bug ("even influenced by vibrato") (source: s-openmpt-manual-compatible-playback).

LSDj#

Vxy: x = speed, y = depth in semitones — 0 0.125, 1 0.25, 2 0.375, 3 0.5, 4 0.75, 5 1, 6 1.5, 7 2, 8 2.5, 9 3, A 3.5, B 4, C 5, D 6, E 7, F 8; V00 resets. Shape and speed depend on the instrument's PITCH setting: with PITCH = TICK the vibrato is synced to the music (assuming 6 ticks/step) and CMD/RATE slows it; A+LEFT/RIGHT on PITCH chooses the shape (triangle, saw or square, upward or downward). Delayed vibrato: put V a few steps after the note, or in the instrument's table on a later row so every note gets it automatically. The manual also suggests V (and P) on noise snares to liven them up (source: s-lsdj-manual).

Dire Hit's account of the digits: the first is the modulation speed (0 slow … F "so fast it almost becomes audible as a tone"), the second the depth; VFF is FM in all but name — Monodeer's pulse-channel cymbals are a single V command, "if you ever need noise percussion out of a pulse channel" (source: s-chipmusic-tables-and-chords-threads). SketchMan3: "High frequency V effects can give you a more complex raspy sound" (source: s-chipmusic-lsdj-advanced-tricks); a fast V on a table's first tick, cancelled by V00 on the second, sharpens an attack (source: s-intense-tech-09-lets-table-this-discussion).

More from intense-tech: random vibrato is V00 on the note and Z03 on each repeat of it, so every repeat acts as V00V03 (randomization-and-probability; source: s-intense-tech-03-dont-sleep-on-z). The slowing setting was introduced as FX/SPEED in version 7 (7.7.4) — it lengthens each step of C, P, R and V, the V only when PITCH is TICK — and renamed CMD/RATE in version 8 (sources: s-intense-tech-12-scoping-out-new-features, s-intense-tech-14-lets-appreciate-version-8). Since 9.1.0 the TICK vibrato rates are rhythmic at the default groove — one cycle per V0x 16 steps, V1x 12, V2x 32/3, V3x 8, V4x 6, V5x 16/3 … VFx 1/2 step — and V also works on noise instruments, always tick-based (source: s-intense-tech-19-new-noise-and-910-news).

Pushed far enough, a V on the wave channel stops being vibrato: with the right combination of speed and depth a bass note "kind of self-resonates with itself", a sound defense-mechanism rates highly and uses rarely — "I honestly don't use enough V commands on the wave channel". It belongs to one note, so a different pitch needs the values retuned, and silky wave may have softened it (source: s-defensemech-learning-lab-shorts).

Two wave-channel notes from pain-perdu (source: s-painperdu-02-wav-channel-walkthrough): in the instrument screen, LEFT/RIGHT cycles the vibrato type while A+UP/DOWN inverts the vibrato's phase; and a fast V on a wave instrument — normally a pulse-channel trick, since wave instruments are raspy already — turns a raspy hand-drawn wave into "a kind of flanger filtery modulation effect" with no synth movement at all. It costs CPU, and because the modulation interacts with the note's pitch the value that works on one note will not work on the next, so it belongs on the note rather than in the table. A slow vibrato does the opposite job: it detunes a held pulse note enough to "fight off the really robotic feel" (source: s-painperdu-03-isometric-sav-walkthrough).

Two more places V earns its keep. On the noise channel it has worked since 9.1.0, alongside C and P, and combines with P — a bend and a wobble on the same hit; the pitched (short-loop) noise shapes make that read as a tonal snare rather than as noise (source: s-defensemech-noise-channel-92l). And on a wave instrument imitating an acoustic one, V is most of the imitation: "using a variety of vibrato speeds (Vxx commands) will also help make a flutey tone sound more convincing. It's all about articulation, really. LSDJ is really good for flutey articulation though!" — varied speeds across a phrase, not one setting held (Victory Road, source: s-chipmusic-lsdj-wav-instrument-tutorials; lead-articulation).

SID-Wizard#

  • Per instrument: four hex digits — amplitude, frequency (speed), and a two-digit delay (or increment speed); the four vibrato types are delayed up-down, delayed downwards, delayed upwards and incremental "violin style" (source: s-witchmaster-creating-chiptunes-with-sid-wizard; note the traced 1.97 player arithmetic runs $20/$30 the other way round — see "What the player actually does" below). Vibrato is "calculated", i.e. its depth is pitch-independent. The book's bass uses 3720 with delayed up-down.
  • In the note column: Shift+V puts a vibrato flag on the note (amplitude 1..F), shown as a tiny graph symbol.
  • Effects: $08 xy set amplitude and rate; $8x amplitude only; $9x rate only; $16 xx select vibrato type (00/10/20/30).
  • Caveats: an arp entry in the instrument's table cancels vibrato; a pitch slide cancels it too except in the Extra player; the Light player has no calculated vibrato; Bare and Demo drop the vibrato-rate/frequency effects (sid-player-routine).

(source: s-sid-wizard-manual)

What the player actually does (SW 1.97 player.asm)#

The "calculated" arithmetic, from m64's duet research (VIBSLIDE/SETVIB0, player.asm 2085–2171, 2890–2941; source: s-duet-research-sidwizard-deep):

  • Vibrato is a triangle added directly to the 16-bit frequency accumulator: period = 2×rate frames, per-frame step FREQMOD = freq16(4×amplitude + note − 107) looked up through the exponential table — which is why the depth is a constant musical interval at any pitch.
  • The four types differ only in phase seed and the role of instrument byte 6: type $00 "increasing" has no delay — byte 6 is a per-frame amplitude increment, and the ramp is unbounded (it never clamps); type $10 "normal" waits byte 6+1 frames then oscillates symmetrically; type $20 seeds at the full rate and, as traced, oscillates above the note; type $30 seeds at zero and oscillates below. The source comments name $20 "down-oriented" and $30 "up-oriented" — the opposite of the traced arithmetic (open question in the research; the traced behaviour is what DUET implements).
  • Note-column $6x and small-FX $8x set the amplitude only — the rate stays the instrument's, the phase resets, and the delay counter is not reloaded; they also cancel a running slide/portamento by restoring the instrument's vibrato type. $9x sets the rate only, touching nothing else; big-FX $16 the type only.
  • "Arp cancels vibrato" is an overwrite, not a flag: a pitch-yielding WF-table step writes a fresh table lookup over the accumulator, discarding the displacement; on hold/end ticks the displacement survives and keeps accumulating. On ticks 0/1 before a new note the vibrato stage is skipped altogether (Normal player).

CheeseCutter#

Vibrato is a command-table entry, not an instrument setting: in the command table (JCH called it "the Super Table") 2 is vibrato — "the usual delta vibrato as found in JCH's players from 20.G4 upwards; try $21 $05" — and 5 is a second vibrato taking speed and depth. One player quirk to know: a slide or vibrato on a tied-note row is not executed, and a portamento resets an ongoing slide (source: s-cheesecutter-guide; pitch-slide-and-portamento).

defMON: no vibrato at all#

defMON has no vibrato command, on purpose. The sidTAB is the whole effect language — "you would create a vibrato the way you like it, rather than calling a pre-programmed vibrato" — so a vibrato is a few sidTAB rows that step the pitch up and down, and a step can run two sidTAB chunks at once, one holding the note and one running the wobble. The design argument is the same one frantic makes about hard-restart: fewer built-ins, more flexibility, and no CPU spent on a routine a given tune may not want (source: s-defmon-wiki-manual; sid-player-routine).

GoatTracker#

4XY and the instrument's vibrato parameter both index the speedtable: left byte = how many ticks until the direction changes (speed), right byte = pitch added each tick (depth). 03 40 equals the old one-byte parameter $34; 05 04 is "slow shallow vibrato, suitable for bass notes. Not possible to achieve with old parameters"; 83 04 (high bit set) makes the depth note-independent with a divisor of 4 right-shifts. The instrument's vibrato delay is the tick count before it starts (00 = off) — a delayed vibrato without any pattern command, which also packs smaller. Realtime commands are skipped on tick 0 of each row unless -R0; a one-shot command (5XYFXY) between vibrato rows leaves the vibrato running, but 0XY stops it; SHIFT+H precalculates "hifi" note-independent depths from the frequency difference of adjacent notes (source: s-goattracker-readme).

On the SID without a player: oscillator 3 (datasheet and Programmer's Reference Guide)#

The chip has a built-in modulation source: register $1B returns oscillator 3's output, and the datasheet's recipe for vibrato is "setting Oscillator 3 to a frequency around 7 Hz and adding the OSC 3 Triangle output (with proper scaling) to the Frequency control of another oscillator", with voice 3 muted by the 3 OFF bit (source: s-mos-6581-datasheet). The PRG's Example 6 does exactly that in BASIC: voice 3 on a triangle at a very low frequency (POKE S+14,117 : POKE S+18,16), POKE S+24,143 for volume 15 + voice 3 off, and inside the note loop FQ = FR + PEEK(S+27)/2 before splitting the result into high and low bytes; with ×3.5 and a longer loop the same program becomes a siren (source: s-c64-prg-chapter-4-sound).

In a player routine (Walleij)#

linus-walleij's design: each instrument has a delay before vibrato, a default amplitude and a default period (or takes them from a MIDI wheel); after the delay counts down, vibrate_channel adds an LFO curve over $D400/$D401 every process step, taking the pitch wheel into account; an arpeggio macro and vibrato on the same voice are "only interesting if you don't use vibrato on this voice really" — the arpeggio step is skipped while vibrato runs. The same mechanism with "larger amplitude" over $D402/$D403 is pulse-width vibrato (pulse-width-modulation) (source: s-walleij-sid-player-routine).

Impulse Tracker details#

Hxy speed x depth y; Uxy is four times finer; S3x picks the waveform (0 sine, 1 square, 2 ramp down, 3 random); Kxy adds a volume slide; H00/U00 reuse the last vibrato of either kind. IT's vibrato is updated every tick and is "two times finer" than ST3's — with Old Effects on it reverts to ST3 depth and timing. Samples also carry their own vibrato (speed 0–64, best 24–48; depth; rate = how quickly it sets in — a built-in delayed vibrato) (sources: s-it-manual, s-ittech).

In the classic drivers (1986–1988)#

  • soundmonitor: three sound registers — 12 depth, 13 speed (00 very fast … 7F very slow, bit 7 = start downward or upward), 14 delay after key-on (source: s-64er-soundmonitor-article).
  • matt-gray-player: with step V and length L, the frequency value goes down by V for L frames, up for 2L, down for 2L … — "V=10 and L=2 with an A4 note (440Hz)" gives 430, 420, 430, 440, 450, 460, 450, 440 … A constant step on the raw register value is more cents at low pitch, which is exactly what Gray describes: "my vibrato routines didn't use the correct algorithm, as say Rob's or Martin's did. Mine was just a simple up-and-down pitch change … the higher the notes you played, the less vibrato you got, and the lower you went, the deeper it got" — and he counts it as part of his "sound" (sources: s-sidin02-matt-gray-driller, s-c64com-matt-gray-interview).
  • musicfile: a "Vibrato routine" with a per-instrument delay table (vibtabwait: $0c, $18 …) and a tune-wide vibtotzover = $30 constant (source: s-realdmx-sid-players).
  • hubbard-player: the frame counter and #7, mirrored above 3, gives 0,1,2,3,3,2,1,0; the step is the frequency difference to the next semitone shifted right depth+1 times (depth $02 = ⅛ semitone), added to the note — an 8-frame triangle that bends upward only, and only on notes of 8+ ticks (6+ in Commando) — "A clever little trick to create an oscillating value" (source: s-realdmx-hubbard-player).
  • galway-player: no vibrato routine — three of the instrument's four signed frequency adders with durations, looping: !wo 30, !wo -30, !wo 30, !wo 0 / $03,$06,$03,$00 / delay $16 (Rambo), $14,$00 / $EC,$FF / $14,$00 / $00,$00 / $03,$06 / $03,$00 / $1E (Arkanoid) — a ±90 or ±60 unit triangle with a 12-frame period after a delay (sources: s-realdmx-galway-rambo-player, s-realdmx-galway-arkanoid-player).
  • ocean-music-driver: VIBON delay,rate,depth inline in the voice program — add/subtract rate to the 16-bit frequency, reversing every depth frames (first leg half); VIBON,0,7,6, VIBON,6,$20,6, the loader lead's VIBON,0,$FF,4; an active arpeggio suppresses it (source: s-realdmx-ocean-dunn-hughes-driver).
  • bjerregaard-player: depth = the semitone distance at the current note, read from the frequency table and shifted by the rate nibble, ramped in over N frames — constant in cents across octaves, the opposite of Matt Gray's raw-value wobble (source: s-realdmx-bjerregaard-player).
  • Others: Deenen's MUSICFILE shifts the semitone difference right by the depth nibble too, with an optional growing depth (fx1 bit 7) later capped by vibtotzover (source: s-realdmx-deenen-test-tunes); Whittaker's Panther doubles the depth once per two octaves the note lies below $60; Red's player adds a 12-entry table ($00,$30,$60,$90,$c0,$f0,$f0,$c0 …) to the frequency low byte after 26 frames; Fred Gray's Mutants uses rows of its quarter-semitone arpeggio table ($01,$01,$01,$01,$ff,$fe,$fe,$ff …) as vibrato (source: s-realdmx-fredgray-kimmel-whittaker); the Scoop MoN player has a 128-byte sine table and delay, length, amplitude, speed programs (source: s-realdmx-deenen-test-tunes); FAME's vibrato is 2-byte segments in the same table engine as its arpeggios (source: s-realdmx-audial-arts-fame-players).

Iseq (2002): vibrato as an additive list#

Steve Judd's iseq has no vibrato command; an instrument's frq+ list is added to the current frequency on every player call, so a vibrato is frq+ 0100 0200 0100 0000 ff00 fe00 ff00 0000 looped — Judd's own example, with the caveat that it is "not 'proportional' — you wouldn't use the same modulations at low and high frequencies" and the upside that one list can also carry a rising frequency, an ornament or an "asymmetric" vibrato. His Commando lead uses frq+=0000 0040 0080 00c0 00c0 0080 (source: s-sidin01-iseq).

  • Why Galway's middle phase is twice as long: Tognon's figure for the Arkanoid vibrato (+$14 × 3, −$14 × 6, +$14 × 3 after $1E cycles) shows the first phase climbing from the note's pitch to the top, the double-length second phase crossing to the bottom, the third returning to the centre — "necessary for having the correct up/down sequence" — before flag $05 restarts the phases from the current frequency (source: s-sidin04-galway-arkanoid).

From SIDin #6–#7 (2004–05)#

  • The modules driver (Ivan Del Duca, 1988): vibrato is one case of a generic pattern command, $9B $02 type limit step delaystep is added to or subtracted from the register every delay ticks, limit decides where the direction turns, and type 2 selects the frequency high byte (0 = filter cutoff, 1 = pulse width high byte); pat00 opens with $9B,$02,$02,$04,$01,$06, i.e. one step of the high byte every six ticks; $92 stops it. Tognon also notes that the portamento commands $8C/$8F "can be used also for vibrato in conjunction" (source: s-sidin07-inside-modules).
  • asterion-sid-tracker (2004): per instrument VDE (delay) and VDS (depth/speed); in the pattern 4x sets the depth x at the instrument's speed, 40 returning to the VDS depth (source: s-sidin06-asterion-sid-tracker).

JITT64 (2010)#

Command 09 xy: y + 1 ticks per leg, and each tick adds or subtracts (x + 1) × 16 to the raw 16-bit frequency; the first leg lasts one speed count and the following ones two (plus the reload tick), so it starts with a half period — a triangle on the register value, deeper in cents at low pitch like the matt-gray-player's and unlike Bjerregaard's semitone-proportional one; 00 with bit 4 stops it, and a "hifi vibrato … independent from octave/note" was planned. Instrument-level vibrato goes in the frequency column as relative-frequency entries timed by the D/N delay field (sources: s-sidin13-inside-jitt64, s-sidin13-jitt64-tracker).

  • matt-gray-player V4.2 adds a per-note vibrato delay: pattern byte $F9 nn counts down before the instrument's vibrato (step in row byte 8, length in byte 9, the same down / up / up / down / down triangle as Driller) starts (source: s-sidin14-dominator-player). Gray in 2015: "My vibrato routine was very different to his [Hubbard's] and Martin Galway's" (source: s-sidin15-matt-gray-interview).

Vibrato as a routine you had to write#

Before trackers there was no vibrato command anywhere; it was code. matt-gray puts it most plainly: "You had to be able to code everything, even putting a vibrato on a sound needed a mod routine to do it. There was no button to push. You literally had some waveforms to choice from, an ADSR setting and a filter. The rest was up to you." (source: s-rvg-matt-gray-interview). His own routine kept five pieces of state per voice — VIBDELAY, VIBSTEP, VIBTIME, VIBD, VIBDIR — i.e. a delay before onset, a step size, a period, a depth and a direction, with $F9 nn in the pattern setting the vibrato delay per note (source: s-matt-gray-dominator-source). He counted the difference as part of his signature: "My vibrato routine was very different to his and Martin Galway's" (rob-hubbard, martin-galway).

The MoN driver packs the same thing into instrument bytes: in the Armada-era layout fx1 is vibrato depth and speed in one byte ($53, $42, $41 in the shipped bank), and in the later Ouwehand layout fx1 is the vibrato half-period plus a depth as semitone >> n with bit 7 meaning the depth grows, while fx2's high nibble is the vibrato delay. The Dutch source calls a light one vibraatje (source: s-realdmx-ouwehand-mon-tunes). A delay plus a growing depth is a swell — the string-player's vibrato that starts after the note has spoken — encoded in two nibbles.

JCH carried the habit to the PC: his AdLib player of November 1991 had "C64-style arpeggio tables, his own vibrato and modulation control", which "immediately distanced the player from almost anything that used AdLib on the PC" (source: s-chordian-my-computer-chronicles; opl-fm-instruments). The band name works the same way round — Vibrants is "vibrato" + "Ants", coined in a phone call before the PCW show in 1989.

Two practical corollaries from the tracker era. ProTracker changed its vibrato depth scale: 1.1A made it "compatible with NT2.0. Double all your depth numbers if you load old protracker songs" — a real hazard when opening a 1990 module in a later version (source: s-protracker-23-readme-and-docs). And the reason to bother, from a player of a real instrument: playing one teaches "the technique to apply to your tracker … how to make it feel" — slides and vibrato on bass are what made the-zapper's basslines sound real to necros (source: s-tw027-interview-zapper).

Tips & pitfalls#

  • Delay ≈ the length of a short note so quick runs stay clean and only held notes wobble.
  • Combine with a slide into the note (pitch-slide-and-portamento) for a vocal lead.

pitch-slide-and-portamento · melody-writing · instrument-design · sid-player-routine

Sources#

s-037-lab · s-sid-wizard-manual · s-goattracker-readme · s-witchmaster-creating-chiptunes-with-sid-wizard · s-chipmusic-tables-and-chords-threads · s-chipmusic-lsdj-advanced-tricks · s-intense-tech-09-lets-table-this-discussion · s-protracker-23d-help · s-ft2-manual · s-st3-manual · s-openmpt-manual-effect-reference · s-openmpt-manual-samples · s-openmpt-manual-compatible-playback · s-tw012-advanced-tracking-tips · s-tw098-impulse-tracker-midi · s-mos-6581-datasheet · s-c64-prg-chapter-4-sound · s-walleij-sid-player-routine · s-intense-tech-03-dont-sleep-on-z · 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-64er-soundmonitor-article · s-sidin02-matt-gray-driller · s-c64com-matt-gray-interview · 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-realdmx-audial-arts-fame-players · s-realdmx-deenen-test-tunes · s-sidin01-iseq · s-sidin04-galway-arkanoid · s-sidin06-asterion-sid-tracker · s-sidin07-inside-modules · s-sidin13-inside-jitt64 · s-sidin13-jitt64-tracker · s-sidin14-dominator-player · s-sidin15-matt-gray-interview · s-duet-research-sidwizard-deep · s-duet-research-sidwizard · s-cheesecutter-guide · s-defmon-wiki-manual · s-rvg-matt-gray-interview · s-matt-gray-dominator-source · s-realdmx-ouwehand-mon-tunes · s-chordian-my-computer-chronicles · s-protracker-23-readme-and-docs · s-tw027-interview-zapper · s-defensemech-noise-channel-92l · s-chipmusic-lsdj-wav-instrument-tutorials · s-lsdj-manual · s-tw074-intro-to-musical-theory · s-tw077-chip-off-the-block · s-it-manual · s-ittech · s-painperdu-02-wav-channel-walkthrough · s-painperdu-03-isometric-sav-walkthrough · s-defensemech-learning-lab-shorts

source file wiki/techniques/vibrato.md · graph