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#

semitonesnamecharacterconsonance
0unisonsame note
1minor 2ndmaximum tension, "horror shark"dissonant
2major 2nda step; melody fuelmild
3minor 3rdthe "sad" intervalconsonant
4major 3rdthe "happy" intervalconsonant
5perfect 4thopen, heroic fanfareconsonant-ish
6tritonemaximum unrest, metal & sirensdissonant
7perfect 5thpower chord, stablevery consonant
8minor 6thbittersweetconsonant
9major 6thwarm, openconsonant
10minor 7thfunky tension, wants to resolvemild
11major 7thdreamy tensionmild
12octavesame note, higherperfect

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:

toolwhereupdown
sid-wizard WF-ARP table, ARP columnper 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 byteper table row00–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#0B-7 (source: s-goattracker-readme)
sid-factory-ii wave table, 2nd byteper table row0c = +1 octave80df are absolute notes from the frequency table (source: s-chordian-sf2-instruments)
lsdj table TSP columnper table row0C = +12two's complement: F4 = −12, E8 = −24 (sources: s-lsdj-manual, s-intense-tech-11-kicks-part-2)
impulse-tracker Jxy, MOD/XM 0xyper pattern rowone hex digit each, so +1…+15not expressible — the arpeggio only goes up (source: s-it-manual)
Deenen's Maniacs of Noise driversequence byte$80–$fd, offset = byte & $1f, so 0–31not possible — "semitones up only, no negative transpose" (source: s-realdmx-deenen-test-tunes)
Bjerregaard's drivertrack bytebiased: 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 at 60–7F and 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 7 is $00 $03 $07 in 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 A precisely so that a pattern transposition becomes a plain ADC — "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.

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

source file wiki/concepts/semitone-math.md · 1 unverified · graph