Semitones — the only unit you need
One semitone = one step in a tracker's note column = one piano key (black and white counted equally). Every interval, chord and scale is a pattern of semitone distances, which is why tracker arps are written as numbers like 0 3 7 (chord-arpeggio). Intervals keep their character wherever you start: +4 sounds "major" from C or from F#, so everything transposes freely — shift every note by the same amount and you have the same music in a new key (source: s-037-lab).
Interval table#
| semitones | name | character | consonance |
|---|---|---|---|
| 0 | unison | same note | — |
| 1 | minor 2nd | maximum tension, "horror shark" | dissonant |
| 2 | major 2nd | a step; melody fuel | mild |
| 3 | minor 3rd | the "sad" interval | consonant |
| 4 | major 3rd | the "happy" interval | consonant |
| 5 | perfect 4th | open, heroic fanfare | consonant-ish |
| 6 | tritone | maximum unrest, metal & sirens | dissonant |
| 7 | perfect 5th | power chord, stable | very consonant |
| 8 | minor 6th | bittersweet | consonant |
| 9 | major 6th | warm, open | consonant |
| 10 | minor 7th | funky tension, wants to resolve | mild |
| 11 | major 7th | dreamy tension | mild |
| 12 | octave | same note, higher | perfect |
Rules of thumb: relative minor = major root − 3; transposing a whole section up a fifth is +7, up an octave +12 (see arrangement).
Classical names (Greg Heo, 1997)#
0 unison · 1 minor second · 2 major second · 3 minor third · 4 major third · 5 perfect fourth · 6 augmented fourth / diminished fifth · 7 perfect fifth · 8 augmented fifth / minor sixth · 9 major sixth · 10 minor seventh · 11 major seventh · 12 octave. Only the fourth, fifth and octave are "perfect"; P1/P8/P5/P4 are perfect consonances, M3/m3/M6/m6 imperfect consonances, the rest dissonant (source: s-tw074-intro-to-musical-theory).
Interval qualities and compound intervals (Zinc, 1997)#
Zinc's beginner primer counts in whole steps (one step = two semitones) and adds the intervals above the octave: m2 ½ · M2 1 · aug2 1½ · m3 1½ · M3 2 · P4 2½ · aug4 3 · dim5 3 · P5 3½ · aug5 4 · m6 4 · M6 4½ · dim7 4½ · m7 5 · M7 5½ · P8 6 · m9 6½ · M9 7 · aug9 7½ · P11 8½ · aug11 9 · m13 10 · M13 10½ — in semitones, 9th = 13/14, 11th = 17, 13th = 20/21, i.e. the 2nd, 4th and 6th an octave up (0 4 7 14 is a major add 9). Pairs with the same size (aug4/dim5, aug5/m6, M6/dim7, aug2/m3) are enharmonic equivalents: same sound, different spelling. The quality rules: a major interval a half step smaller is minor; a minor one a half step larger is major; a minor or perfect interval a half step smaller is diminished; a major or perfect one a half step larger is augmented (source: s-tw107-laymans-music-theory).
Semitones as bytes#
Everything above is decimal; every tracker table is hex. 12 is $0C, and mistaking one for the other is an octave — the single most common beginner's slip, which is why TraxWeekly ran a hex primer at all: "keep a chart or calculator handy" until base 16 is "ingrained into your head" (source: s-tw086-hexadecimal-101; the article's own worked example contains an arithmetic slip, noted on its summary page).
The harder question is where the minus sign lives, and the tools answer it in five incompatible ways:
| tool | where | up | down |
|---|---|---|---|
| sid-wizard WF-ARP table, ARP column | per table row | $01–$5F | $E0–$FF — a separate range; $00 = prime, $80 = no process. $81–$DF are absolute pitches instead ($A5 = C-4) (source: s-sid-wizard-charts-and-tables) |
| goattracker wavetable, right byte | per table row | 00–5F relative semitones up (0C = +12, left byte 00 to keep the waveform) | 60–7F — a separate range, not SID-Wizard's; 80 keeps the frequency, 81–DF are absolute C#0–B-7 (source: s-goattracker-readme) |
| sid-factory-ii wave table, 2nd byte | per table row | 0c = +1 octave | 80–df are absolute notes from the frequency table (source: s-chordian-sf2-instruments) |
| lsdj table TSP column | per table row | 0C = +12 | two's complement: F4 = −12, E8 = −24 (sources: s-lsdj-manual, s-intense-tech-11-kicks-part-2) |
impulse-tracker Jxy, MOD/XM 0xy | per pattern row | one hex digit each, so +1…+15 | not expressible — the arpeggio only goes up (source: s-it-manual) |
| Deenen's Maniacs of Noise driver | sequence byte | $80–$fd, offset = byte & $1f, so 0–31 | not possible — "semitones up only, no negative transpose" (source: s-realdmx-deenen-test-tunes) |
| Bjerregaard's driver | track byte | biased: transpose = (byte & $7F) − $40, so $C0 = 0, $CC = +12 | $BC = −4 (source: s-realdmx-bjerregaard-player) |
Four consequences worth carrying around:
- Two schemes that look alike are not. SID-Wizard and GoatTracker both use
$00= prime,$80= no change and$81–$DF= absolute pitch — but GoatTracker puts its downward offsets at60–7Fand SID-Wizard at$E0–$FF, so a table copied between them transposes wildly even though the effect commands were deliberately kept compatible (sources: s-goattracker-readme, s-sid-wizard-charts-and-tables). - A chord written as
0 3 7is$00 $03 $07in every one of these, because the intervals people use are all under 10. It is the octave, the two-octave drop and anything negative that need the encoding read carefully. - "Down" is not always available. A driver with up-only transposes forces the composer to write the low version and transpose up to reach the others — which is why ripped SID data so often sits in an odd-looking key.
- The note table can be reordered so that transposition is one instruction. Tiny SID 2 stores notes as octave/base-note bytes and picks the base-note order
C D E D# F G A G# A# C# F# B G Aprecisely so that a pattern transposition becomes a plainADC— "using only 2 additional bytes, and this is lot better than the standard method" (source: s-sidin10-tiny-sid-2-part-1). Semitone arithmetic is cheap only if the table was laid out for it.
Below the semitone: cents#
A semitone is 100 cents, and a cent is the unit for everything a tracker's note column cannot say: 1200 × log₂(f₂/f₁). The 12-TET fifth is 700 cents where the pure 3/2 of the harmonic-series is 701.955, and the 12-TET major third is 400 against 5/4's 386.3 — which is why equal temperament sounds slightly restless and just intonation sounds different in every key.
Cents are also how a tuning that is not twelve-per-octave gets specified: an n-tone equal division has a step of 1200/n cents (24-TET = 50, 18-TET ≈ 66.7, 19-TET ≈ 63.2). little-scale's spreadsheet shortcut for the same thing is to index the sheet in fractional semitones — "each percentage point of a MIDI number is equal to a cent in musical interval terms", so 18-TET is a step of 12/18 = 0.667 rows (source: s-little-scale-nanoloop-18-tet). See alternative-tunings.
To verify#
- The cent values quoted above for the pure fifth (701.955) and major third (386.3), and the per-step figures for 18-, 19- and 24-TET, are standard tuning arithmetic computed here rather than taken from a wiki source (unverified) — the same note as on harmonic-series.
Related#
scales-and-modes · diatonic-chords · chord-inversions · instrument-tables · wavetable-programming · orderlist · chord-arpeggio · 037-lab · alternative-tunings · harmonic-series · detune
Sources#
s-037-lab · s-tw074-intro-to-musical-theory · s-tw107-laymans-music-theory · s-little-scale-nanoloop-18-tet · s-tw086-hexadecimal-101 · s-sid-wizard-charts-and-tables · s-goattracker-readme · s-chordian-sf2-instruments · s-lsdj-manual · s-intense-tech-11-kicks-part-2 · s-it-manual · s-realdmx-deenen-test-tunes · s-realdmx-bjerregaard-player · s-sidin10-tiny-sid-2-part-1