Detune
What it is#
If you can spare a channel, play the lead on two channels a few cents apart (or use a fine-tune setting). The slow beating between them sounds huge — the chip version of a supersaw. Small detune (5–10 cents) = fat; large detune (a quarter tone) = seasick, sometimes exactly right (source: s-037-lab).
It is not a later discovery: the sid's own 1982 datasheet lists it under Unison as one of the two things to do with voices played together — "a slight detuning of each oscillator or tuning to musical intervals" gives "a rich, animated sound" (source: s-mos-6581-datasheet). The other one is the interval, and the trade is the same on every chip: a channel spent on width is a channel not spent on a part.
How to do it#
SID-Wizard#
- Per instrument: the Detune column of the WF-ARP-Detune table (
$00–$FEdetune upwards per row,$FFkeep) — so a "lead B" instrument can be a detuned copy of "lead A". - Per note:
$Dxsmall effect detunes the current note;$0D xx(big effect) detunes upwards with finer range. - Not available in the Light and Bare players (sid-player-routine).
(source: s-sid-wizard-manual)
What the player actually does (SW 1.97 player.asm)#
From m64's duet research (player.asm 2445–2448, 2539–2541, 3399–3404; source: s-duet-research-sidwizard-deep):
- The detune value is added at the output stage every frame, never into the pitch accumulator — so vibrato, slides and arps cannot destroy it, and it detunes upward only (0..254 frequency LSBs; small-FX
$Dxsets x×8, big-FX$0Dthe raw value). - It is never reset — not by note start, not by player init: a pattern detune stays on the channel until a table row or another FX changes it. The table column's
$FFmeans "keep previous" — except on chord rows, where it is stored unconditionally and becomes a literal +255 (quirk: keep$00in the detune column of$7Fchord rows). - The addition has a path-dependent carry-in (no CLC), giving a deterministic ±1 LSB jitter tied to the table state — part of the SW sound a bit-exact reimplementation must reproduce.
SID: two voices on one sound#
Seen from a synth player's side (n00bstar, 2015): put two channels on the same sound with one "detuned by a tiny bit"; kept mono "you get a flanger/phaser like effect", hard-panned "a kind of chorus"; it is "rarely used in 'heavy' sections because of the wasted channel" (source: s-chipmusic-typical-sid-sounds).
CheeseCutter#
Detune is command 3 of the command table (the descendant of JCH's "Super Table"), and it is 16-bit — two parameter bytes, so the offset is a full frequency value rather than a low-byte nudge. Being a command rather than a table column, it can be attached to a single note or left running (source: s-cheesecutter-guide).
defMON#
The AF column (Finetune/Bend) is one byte doing three jobs, and the split is what to remember: $00–$19 is finetune, with $19 = one whole semitone up — so a single step is 1/25 of a semitone, about 4 cents, and a fat-lead offset is $01–$03. Above that, $21–$7F continues as pitch up (wrapping), $80–$BF is bend-up speed and $C0–$FF bend-down speed (pitch-slide-and-portamento). Detune and portamento therefore live in the same column and cannot both be active on a row; transpose is a separate column (TR), so a detuned copy of a part is TR unchanged and AF $01–$02 (sources: s-defmon-wiki-manual, s-defmon-wiki-defmoning-101).
LSDj#
The pulse instrument's FINETUNE detunes PU1 downwards and PU2 upwards, and PU2 TSP. transposes pulse 2 — the manual notes these "create interesting phase effects when the same phrase is played on both pulse channels", which is the standard fat-lead recipe: one chain in both pulse columns. Fxy on a pulse instrument sets PU2 TSP (x) and finetune (y, 1/32 semitone per step) from a phrase or table; WAVE instruments have their own FINETUNE (source: s-lsdj-manual).
Version notes: the wave instrument got its own FINETUNE (-F…+F) in lsdj 7.7.4, and from 9.1.0 instrument FINETUNE has two digits — an old value of 01 equals the new 10 (sources: s-intense-tech-12-scoping-out-new-features, s-intense-tech-19-new-noise-and-910-news).
PC trackers#
Vivid's flange/chorus: the same sample on two channels, the second delayed by a sample offset (9xx) or note delay (EDx), with a fine pitch slide (E1x/E2x in ProTracker) on one of them to control the beating — "works pretty fine on brass leads" (source: s-tw059-tracking-hints). Zinc's stereo doubling with two slightly different samples, or the same sample slightly offset, panned apart, is the same idea across the stereo field (source: s-tw075-it-percussion-tips). A permanent detune is a different tuning on the duplicated sample, and the unit depends on the format (sources: s-protracker-23d-help, s-st3-manual, s-st3-tech-doc, s-ft2-manual, s-openmpt-manual-samples): ProTracker finetune −8…+7 shifts A from 412.0 Hz to 457.0 Hz in steps of roughly 1/8 semitone (0 = 436.4, +1 = 439.0, +2 = 441.6 …), also settable per note with E5x; ST3 replaces it with C4Spd, the frequency at C-4 (8363 = none; S2x maps the MOD values to 7895–8757 Hz; +/- on the field halve or double it, / sets it by note); FT2 widened finetune to a signed byte, 1/128 semitone (audible in steps of 8), plus a relative tone; IT/OpenMPT set the C-5 frequency directly. Fine pitch slides (E1x/E2x) are "Great for creating chorus effects" (ProTracker), and MPTM has +xx for a per-note finetune.
StereoMan's IT flanging: the same sample on two channels at exactly the same pan, one with a fine pitch slide (EE1, or volume-column u11… then u00); put the pair at X00/XFF instead for a three-dimensional sound (source: s-it-hints).
Detune as character, not just as width#
pain-perdu's two uses in one song (source: s-painperdu-03-isometric-sav-walkthrough):
- Drunk unison. The intro layers a wave instrument and two pulses on the same note, one of them detuned and given a very slow low-frequency vibrato — "it just sounds like it's drunk". The detune is not there to fatten; it is there to be heard wobbling (vibrato).
- Phasing by offset and by timbre. Two pulse channels run the same arp table offset by three ticks, one at 25 % duty and the other at 50 % — "you have interesting phasing going on". Nothing is detuned in pitch at all; the beating comes from the offset and the duty difference (chord-arpeggio, pulse-width-modulation).
A third route, and a documented failure: a real supersaw is "one oscillator sound[ing] like 7 (!) detuned saw waves", and in principle the LSDj wave channel could fake it by hand-drawing slightly out-of-sync waveforms and frame-switching between them — but "the WAV channel synth is a bit noisy when switching frames, so it doesn't sound very clean" (2013, before the silky wave). What worked instead was one hand-drawn wave shaped like a supersaw (source: s-lsdj-and-you-supersaw-bass; ghost-channel, wavetable-programming). The cheap version on two channels: copy the phrases into pulse 2, shift them one tick later, lower the volume and set PU FINE TUNE to 2, "which will create a sort of chorus effect when the notes play in unison with pulse channel one" (source: s-lsdj-and-you-echo-chamber).
Where the finetune value lives in a MOD#
ProTracker's finetune is a signed nibble in the sample record — 0…7 for 0…+7 and 8 = −8 through F = −1 — set per sample and changed from the pattern with E5x; the same value collides with glissando in E3, a bug fixed in ProTracker 1.0B, and tone portamento with finetune was fixed in 1.0C (source: s-protracker-23-readme-and-docs). So a MOD's detuning is a property of the sample, not of the channel: two channels detuned against each other need two sample entries.
Detune as a way to save bytes#
In the sub-kilobyte players, detune is not width but duplication: it is what lets two voices share one track. In the 2007 tiny-sid-compo entries voices 2 and 3 read the same track and are held apart by three different devices — voice 2's transpose XORed with $F0 at each step, voice 3's instrument XORed with $07 at each pattern, and voice 3 adding a fixed $1E to its frequency low byte every frame. The last of those is a detune in its cheapest possible form: one constant, one adc, no table, no per-instrument field. Tognon lists it among the standard moves of the form, next to "alternating note lengths for swing" (shuffle-funktempo) and the shared counter that drives pulse width and filter at once (source: s-sidin12-tiny-sid-2-part-3).
When the whole tune is detuned#
A player's note table can be flat, and then everything on the machine is. matt-gray's V4.2 tunes come out at A4 = 424 Hz on PAL (440 on NTSC), which Tognon spotted while disassembling Dominator. Gray: "That was just an accident. I was sure I got the frequencies from the back of the C64 Reference manual. I only realized this once I started to remake them. So I've had to tune them up by 30%. Some of Galway's tracks were the same, Green Beret for instance was at 424hz." (source: s-sidin15-matt-gray-interview; 424 Hz to 440 Hz is 64 cents, about a third of a semitone — arithmetic on the two sourced figures, not the interview's own number.) Two practical consequences:
- Before you layer anything against an old SID tune, check its A. A tune whose table came from the c64-programmers-reference-guide's frequency listing may sit a third of a semitone below concert pitch, and so may everything sampled from it.
- Retune it as audio with fine-tune, not with a pitch-shifter. Gray converts the SID sounds to samples and retunes with the sampler's fine-tune, "because using sound shifter or melodyne introduces some horrible frequencies to SID sounds" — the chip-samples version of the same advice the tracker manuals give about finetune versus resampling (source: s-sidin15-matt-gray-interview).
Tips & pitfalls#
- Detune only one of the pair so the perceived pitch centre stays right.
- Costs a whole channel; on the SID that is a third of the machine — reserve it for the hook.
In the MoN drivers#
MUSICFILE's "double voices" routine adds a constant dubvoice ($0c in Cybernoid II, $10 in the 1988 test tune and Armada) to a voice's frequency low byte when its instrument's filcount has bit 3 set; the 1990 Dutch Breeze player replaces it with a per-instrument detune flag (fx3 bit 0) adding detune = $50 to $d400 (source: s-realdmx-ouwehand-mon-tunes). Galway's Rambo loader uses ring modulation and sync ($41 | RINGBIT, SYNCBIT) for its "rising notes" instead (source: s-realdmx-galway-rambo-player).
Related#
chord-arpeggio · instrument-design · channel-interleaving · cheesecutter · defmon · matt-gray-player · semitone-math
Sources#
s-037-lab · s-sid-wizard-manual · s-protracker-23d-help · s-st3-manual · s-st3-tech-doc · s-ft2-manual · s-openmpt-manual-samples · s-intense-tech-12-scoping-out-new-features · s-intense-tech-19-new-noise-and-910-news · s-chipmusic-typical-sid-sounds · s-realdmx-ouwehand-mon-tunes · s-realdmx-galway-rambo-player · s-duet-research-sidwizard-deep · s-duet-research-sidwizard · s-painperdu-03-isometric-sav-walkthrough · s-lsdj-and-you-supersaw-bass · s-lsdj-and-you-echo-chamber · s-protracker-23-readme-and-docs · s-mos-6581-datasheet · s-cheesecutter-guide · s-defmon-wiki-manual · s-defmon-wiki-defmoning-101 · s-sidin12-tiny-sid-2-part-3 · s-sidin15-matt-gray-interview · s-lsdj-manual · s-tw059-tracking-hints · s-tw075-it-percussion-tips · s-it-hints