Files
Cagire/docs/tutorials/harmony.md

9.7 KiB

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:

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:

fs4 note 0.5 decay saw snd .
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:

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.

a3 m3 P5 note 1.2 decay va 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:

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:

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:

d3 min7 note 1.5 decay va snd .
e3 dom9 note 1.2 decay saw snd .
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):

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:

c4 maj inv inv note 1.5 decay sine snd .

G4 C5 E5. dinv does the opposite — moves the top note down an octave:

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:

c4 maj7 drop2 note 1.2 decay va snd .

From C4 E4 G4 B4, the G drops to G3: G3 C4 E4 B4. drop3 drops the third-from-top:

c4 maj7 drop3 note 1.2 decay va 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:

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:

c4 min7 -2 tp note 1.5 decay va snd .

Shifts the whole chord down 2 semitones (Bb minor 7).

oct shifts a single note by octaves:

c4 1 oct note 0.3 decay sine snd .

C5 (one octave up). Useful for bass lines:

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):

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:

0 1 2 3 4 5 6 7 8 cycle minor note 0.5 decay sine snd .

Random notes from a scale:

0 7 rand pentatonic note 0.8 decay va snd .

Setting the key

By default scales are rooted at C4. Use key! to change the tonal center:

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:

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:

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):

4 major triad note 1.5 decay sine snd .

seventh adds a fourth note:

0 major seventh note 1.2 decay va 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:

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:

( 0 major seventh ) ( 5 major seventh )
( 3 major seventh ) ( 4 major seventh ) 4 pcycle
note 1.2 decay va snd .

Combine with voicings for smoother voice leading:

( 0 major seventh ) ( 5 major seventh inv )
( 3 major seventh ) ( 4 major seventh drop2 ) 4 pcycle
note 1.5 decay va snd .

Arpeggiate diatonic chords using arp (see the Timing with at tutorial for details on arp):

0 major seventh arp note 0.5 decay sine snd .

Frequency Conversion

mtof converts a MIDI note to frequency in Hz. ftom does the reverse:

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