# Notes & Harmony This tutorial covers everything pitch-related: notes, intervals, chords, voicings, transposition, scales, and diatonic harmony. Each section builds on the previous one. ## Notes A note name followed by an octave number compiles to a MIDI integer: ```forth c4 note sine snd . ``` That plays middle C (MIDI 60). `a4` is concert A (69), `e3` is 52. Sharps use `s` or `#`, flats use `b`: ```forth fs4 note 0.5 decay saw snd . ``` ```forth eb4 note 0.8 decay tri snd . ``` `fs4` and `f#4` both mean F sharp 4 (MIDI 66). `bb3` is B flat 3 (58). Octave range is -1 to 9. Notes are just integers. They work anywhere an integer works — you can do arithmetic on them, store them in variables, pass them to any word that expects a number. ## Intervals An interval duplicates the top of the stack and adds semitones. Stack two intervals to build a chord by hand: ```forth c4 M3 P5 note 1.5 decay sine snd . ``` That builds a C major triad from scratch: C4 (60), then a major third above (64), then a perfect fifth above the root (67). Three notes on the stack, all played together. ```forth a3 m3 P5 note 1.2 decay saw snd . ``` A minor triad: A3, C4, E4. **Simple intervals** (within one octave): | Interval | Semitones | Name | |----------|-----------|------| | `P1` / `unison` | 0 | Perfect unison | | `m2` | 1 | Minor 2nd | | `M2` | 2 | Major 2nd | | `m3` | 3 | Minor 3rd | | `M3` | 4 | Major 3rd | | `P4` | 5 | Perfect 4th | | `aug4` / `dim5` / `tritone` | 6 | Tritone | | `P5` | 7 | Perfect 5th | | `m6` | 8 | Minor 6th | | `M6` | 9 | Major 6th | | `m7` | 10 | Minor 7th | | `M7` | 11 | Major 7th | | `P8` | 12 | Octave | **Compound intervals** (beyond one octave): | Interval | Semitones | |----------|-----------| | `m9` | 13 | | `M9` | 14 | | `m10` | 15 | | `M10` | 16 | | `P11` | 17 | | `aug11` | 18 | | `P12` | 19 | | `m13` | 20 | | `M13` | 21 | | `m14` | 22 | | `M14` | 23 | | `P15` | 24 | Custom voicings with wide intervals: ```forth c3 P5 P8 M10 note 1.5 decay sine snd . ``` C3, G3, C4, E4 — an open-voiced C major spread across two octaves. ## Chords Chord words replace a root note with all the chord tones. They're shortcuts for what intervals do manually: ```forth c4 maj note 1.5 decay sine snd . ``` That's the same C major triad, but in one word instead of `M3 P5`. A few more: ```forth d3 min7 note 1.5 decay saw snd . ``` ```forth e3 dom9 note 1.2 decay saw snd . ``` ```forth a3 sus2 note 1.5 decay tri snd . ``` Common triads: | Word | Intervals | |------|-----------| | `maj` | 0 4 7 | | `m` | 0 3 7 | | `dim` | 0 3 6 | | `aug` | 0 4 8 | | `sus2` | 0 2 7 | | `sus4` | 0 5 7 | | `pwr` | 0 7 | Common seventh chords: | Word | Intervals | |------|-----------| | `maj7` | 0 4 7 11 | | `min7` | 0 3 7 10 | | `dom7` | 0 4 7 10 | | `dim7` | 0 3 6 9 | | `m7b5` | 0 3 6 10 | | `minmaj7` | 0 3 7 11 | | `aug7` | 0 4 8 10 | | `augmaj7` | 0 4 8 11 | | `7sus4` | 0 5 7 10 | Extended, add, altered, and other chord types are listed in the Reference section at the end. ## Voicings Four words reshape chord voicings without changing the harmony. `inv` moves the bottom note up an octave (inversion): ```forth c4 maj inv note 1.5 decay sine snd . ``` The root C goes up, giving E4 G4 C5 — first inversion. Apply it twice for second inversion: ```forth c4 maj inv inv note 1.5 decay sine snd . ``` G4 C5 E5. `dinv` does the opposite — moves the top note down an octave: ```forth c4 maj dinv note 1.5 decay sine snd . ``` G3 C4 E4. The fifth drops below the root. `drop2` and `drop3` are jazz voicing techniques for four-note chords. `drop2` takes the second-from-top note and drops it an octave: ```forth c4 maj7 drop2 note 1.2 decay saw snd . ``` From C4 E4 G4 B4, the G drops to G3: G3 C4 E4 B4. `drop3` drops the third-from-top: ```forth c4 maj7 drop3 note 1.2 decay saw snd . ``` E drops to E3: E3 C4 G4 B4. These create wider, more open voicings common in jazz guitar and piano. ## Transposition `tp` shifts every note on the stack by N semitones: ```forth c4 maj 3 tp note 1.5 decay sine snd . ``` C major transposed up 3 semitones becomes Eb major. Works with any number of notes: ```forth c4 min7 -2 tp note 1.5 decay saw snd . ``` Shifts the whole chord down 2 semitones (Bb minor 7). `oct` shifts a single note by octaves: ```forth c4 1 oct note 0.3 decay sine snd . ``` C5 (one octave up). Useful for bass lines: ```forth 0 2 4 5 7 5 4 2 8 cycle minor note -2 oct 0.8 gain sine snd . ``` ## Scales Scale words convert a degree index into a MIDI note. By default the root is C4 (MIDI 60): ```forth 0 major note 0.5 decay sine snd . ``` Degree 0 of the major scale: C4. Degrees wrap with octave transposition — degree 7 gives C5 (72), degree -1 gives B3 (59). Walk through a scale with `cycle`: ```forth 0 1 2 3 4 5 6 7 8 cycle minor note 0.5 decay sine snd . ``` Random notes from a scale: ```forth 0 7 rand pentatonic note 0.8 decay saw snd . ``` ### Setting the key By default scales are rooted at C4. Use `key!` to change the tonal center: ```forth g3 key! 0 major note 0.5 decay sine snd . ``` Now degree 0 is G3 (55) instead of C4. The key persists across steps until changed again: ```forth a3 key! 0 3 5 7 3 cycle minor note 0.8 decay tri snd . ``` A minor melody starting from A3. **Common modes:** | Word | Pattern | |------|---------| | `major` | 0 2 4 5 7 9 11 | | `minor` | 0 2 3 5 7 8 10 | | `dorian` | 0 2 3 5 7 9 10 | | `phrygian` | 0 1 3 5 7 8 10 | | `lydian` | 0 2 4 6 7 9 11 | | `mixolydian` | 0 2 4 5 7 9 10 | | `pentatonic` | 0 2 4 7 9 | | `minpent` | 0 3 5 7 10 | | `blues` | 0 3 5 6 7 10 | | `harmonicminor` | 0 2 3 5 7 8 11 | | `melodicminor` | 0 2 3 5 7 9 11 | Jazz, symmetric, and modal variant scales are listed in the Reference section. ## Diatonic Harmony `triad` and `seventh` build chords from scale degrees. Instead of specifying a chord type, you get whatever chord the scale produces at that degree: ```forth 0 major triad note 1.5 decay sine snd . ``` Degree 0 of the major scale, stacked in thirds: C E G — a major triad. The scale determines the chord quality automatically. Degree 1 gives D F A (minor), degree 4 gives G B D (major): ```forth 4 major triad note 1.5 decay sine snd . ``` `seventh` adds a fourth note: ```forth 0 major seventh note 1.2 decay saw snd . ``` C E G B — Cmaj7. Degree 1 gives Dm7, degree 4 gives G7 (dominant). The diatonic context determines everything. Combine with `key!` to play diatonic chords in any key: ```forth g3 key! 0 major triad note 1.5 decay sine snd . ``` G major triad rooted at G3. A I-vi-IV-V chord progression using `pcycle`: ```forth ( 0 major seventh ) ( 5 major seventh ) ( 3 major seventh ) ( 4 major seventh ) 4 pcycle note 1.2 decay saw snd . ``` Combine with voicings for smoother voice leading: ```forth ( 0 major seventh ) ( 5 major seventh inv ) ( 3 major seventh ) ( 4 major seventh drop2 ) 4 pcycle note 1.5 decay saw snd . ``` Arpeggiate diatonic chords using `at` + `cycle` (see the *Timing with at* tutorial): ```forth 0 0.25 0.5 0.75 at sine snd [ 0 major seventh ] cycle note 0.5 decay . ``` ## Frequency Conversion `mtof` converts a MIDI note to frequency in Hz. `ftom` does the reverse: ```forth c4 mtof freq sine snd . ``` Useful when a synth parameter expects Hz rather than MIDI. ## Reference ### All Chords **Triads:** | Word | Intervals | |------|-----------| | `maj` | 0 4 7 | | `m` | 0 3 7 | | `dim` | 0 3 6 | | `aug` | 0 4 8 | | `sus2` | 0 2 7 | | `sus4` | 0 5 7 | | `pwr` | 0 7 | **Seventh chords:** | Word | Intervals | |------|-----------| | `maj7` | 0 4 7 11 | | `min7` | 0 3 7 10 | | `dom7` | 0 4 7 10 | | `dim7` | 0 3 6 9 | | `m7b5` | 0 3 6 10 | | `minmaj7` | 0 3 7 11 | | `aug7` | 0 4 8 10 | | `augmaj7` | 0 4 8 11 | | `7sus4` | 0 5 7 10 | **Sixth chords:** | Word | Intervals | |------|-----------| | `maj6` | 0 4 7 9 | | `min6` | 0 3 7 9 | | `maj69` | 0 4 7 9 14 | | `min69` | 0 3 7 9 14 | **Extended chords:** | Word | Intervals | |------|-----------| | `dom9` | 0 4 7 10 14 | | `maj9` | 0 4 7 11 14 | | `min9` | 0 3 7 10 14 | | `9sus4` | 0 5 7 10 14 | | `dom11` | 0 4 7 10 14 17 | | `maj11` | 0 4 7 11 14 17 | | `min11` | 0 3 7 10 14 17 | | `dom13` | 0 4 7 10 14 21 | | `maj13` | 0 4 7 11 14 21 | | `min13` | 0 3 7 10 14 21 | **Add chords:** | Word | Intervals | |------|-----------| | `add9` | 0 4 7 14 | | `add11` | 0 4 7 17 | | `madd9` | 0 3 7 14 | **Altered dominants:** | Word | Intervals | |------|-----------| | `dom7b9` | 0 4 7 10 13 | | `dom7s9` | 0 4 7 10 15 | | `dom7b5` | 0 4 6 10 | | `dom7s5` | 0 4 8 10 | | `dom7s11` | 0 4 7 10 18 | ### All Scales **Modes:** | Word | Pattern | |------|---------| | `major` | 0 2 4 5 7 9 11 | | `minor` / `aeolian` | 0 2 3 5 7 8 10 | | `dorian` | 0 2 3 5 7 9 10 | | `phrygian` | 0 1 3 5 7 8 10 | | `lydian` | 0 2 4 6 7 9 11 | | `mixolydian` | 0 2 4 5 7 9 10 | | `locrian` | 0 1 3 5 6 8 10 | **Pentatonic and blues:** | Word | Pattern | |------|---------| | `pentatonic` | 0 2 4 7 9 | | `minpent` | 0 3 5 7 10 | | `blues` | 0 3 5 6 7 10 | **Harmonic and melodic minor:** | Word | Pattern | |------|---------| | `harmonicminor` | 0 2 3 5 7 8 11 | | `melodicminor` | 0 2 3 5 7 9 11 | **Chromatic and whole tone:** | Word | Pattern | |------|---------| | `chromatic` | 0 1 2 3 4 5 6 7 8 9 10 11 | | `wholetone` | 0 2 4 6 8 10 | **Jazz / Bebop:** | Word | Pattern | |------|---------| | `bebop` | 0 2 4 5 7 9 10 11 | | `bebopmaj` | 0 2 4 5 7 8 9 11 | | `bebopmin` | 0 2 3 5 7 8 9 10 | | `altered` | 0 1 3 4 6 8 10 | | `lyddom` | 0 2 4 6 7 9 10 | **Symmetric:** | Word | Pattern | |------|---------| | `halfwhole` | 0 1 3 4 6 7 9 10 | | `wholehalf` | 0 2 3 5 6 8 9 11 | | `augmented` | 0 3 4 7 8 11 | | `tritone` | 0 1 4 6 7 10 | | `prometheus` | 0 2 4 6 9 10 | **Modal variants (from melodic minor):** | Word | Pattern | |------|---------| | `dorianb2` | 0 1 3 5 7 9 10 | | `lydianaug` | 0 2 4 6 8 9 11 | | `mixb6` | 0 2 4 5 7 8 10 | | `locrian2` | 0 2 3 5 6 8 10 |