.. / Music API / Tonal

Ascene . Agraph . Aengine
Anode . Modulator . Envelope
Songbook . Song . TimeKeeper
Voices . SampleMgr . StreamMgr
Loader . Async . Plot
Random . Rhythm . Util
MIDI . OSC . HID . Piano
Music Theory with Tonal

right-click to navigate to page sections


Music Theory with Tonal

Your programs can use functions from the popular open-source package Tonal.js to help you select notes and chords. Here we provide a quick reference to common functions as well as convenient links to Tonal's online docs.

Handy Functions

Tonal.Scale functions Description Example
rangeOf(name) returns function that produces note names in a range. rangeOf("C Minor")("C1", "C6")
steps(name) returns function that produces note names. Index-origin is 0. s=steps("A4 major"); s(0):"A4", s(7):"A5", s(-1):"G#4", s(-7):"A3", s(-8):"G#3"
Tonal.Note functions Description Example
midi(note) convert note name to its MIDI key number. midi("C3")
Tonal.Midi functions Description Example
midiToFreq(key) convert MIDI key to a frequency. midiToFreq(60)

Scales

name aliases intervals size
altered super locrian,diminished whole tone,pomeroy 0P,2m,2A,3M,4A,6m,7m 7
augmented heptatonic 0P,2A,3M,4P,5P,5A,7M 7
augmented 0P,2A,3M,5P,5A,7M 6
balinese 0P,2m,3m,4P,5P,6m,7M 7
bebop locrian 0P,2m,3m,4P,5d,5P,6m,7m 8
bebop major 0P,2M,3M,4P,5P,5A,6M,7M 8
bebop minor 0P,2M,3m,3M,4P,5P,6M,7m 8
bebop 0P,2M,3M,4P,5P,6M,7m,7M 8
chromatic 0P,2m,2M,3m,3M,4P,5d,5P,6m,6M,7m,7M 12
composite blues 0P,2M,3m,3M,4P,5d,5P,6M,7m 9
diminished whole-half diminished 0P,2M,3m,4P,5d,6m,6M,7M 8
dorian #4 ukrainian dorian,romanian minor,altered dorian 0P,2M,3m,4A,5P,6M,7m 7
dorian b2 phrygian #6,melodic minor second mode 0P,2m,3m,4P,5P,6M,7m 7
dorian 0P,2M,3m,4P,5P,6M,7m 7
double harmonic lydian 0P,2m,3M,4A,5P,6m,7M 7
double harmonic major gypsy 0P,2m,3M,4P,5P,6m,7M 7
egyptian 0P,2M,4P,5P,7m 5
enigmatic 0P,2m,3M,5d,6m,7m,7M 7
flamenco 0P,2m,3m,3M,4A,5P,7m 7
flat six pentatonic 0P,2M,3M,5P,6m 5
flat three pentatonic kumoi 0P,2M,3m,5P,6M 5
half-whole diminished dominant diminished,messiaen's mode #2 0P,2m,3m,3M,4A,5P,6M,7m 8
harmonic major 0P,2M,3M,4P,5P,6m,7M 7
harmonic minor 0P,2M,3m,4P,5P,6m,7M 7
hirajoshi 0P,2M,3m,5P,6m 5
hungarian major 0P,2A,3M,4A,5P,6M,7m 7
hungarian minor 0P,2M,3m,4A,5P,6m,7M 7
ichikosucho 0P,2M,3M,4P,5d,5P,6M,7M 8
in-sen 0P,2m,4P,5P,7m 5
ionian pentatonic 0P,3M,4P,5P,7M 5
iwato 0P,2m,4P,5d,7m 5
kafi raga 0P,3m,3M,4P,5P,6M,7m,7M 8
kumoijoshi 0P,2m,4P,5P,6m 5
leading whole tone 0P,2M,3M,4A,5A,7m,7M 7
locrian #2 half-diminished,aeolian b5 0P,2M,3m,4P,5d,6m,7m 7
locrian 6 locrian natural 6,locrian sharp 6 0P,2m,3m,4P,5d,6M,7m 7
locrian major arabian 0P,2M,3M,4P,5d,6m,7m 7
locrian pentatonic minor seven flat five pentatonic 0P,3m,4P,5d,7m 5
locrian 0P,2m,3m,4P,5d,6m,7m 7
lydian #5P pentatonic 0P,3M,4A,5A,7M 5
lydian #9 0P,2A,3M,4A,5P,6M,7M 7
lydian augmented 0P,2M,3M,4A,5A,6M,7M 7
lydian diminished 0P,2M,3m,4A,5P,6M,7M 7
lydian dominant pentatonic 0P,3M,4A,5P,7m 5
lydian dominant lydian b7,overtone 0P,2M,3M,4A,5P,6M,7m 7
lydian minor 0P,2M,3M,4A,5P,6m,7m 7
lydian pentatonic chinese 0P,3M,4A,5P,7M 5
lydian 0P,2M,3M,4A,5P,6M,7M 7
major augmented major #5,ionian augmented,ionian #5 0P,2M,3M,4P,5A,6M,7M 7
major blues 0P,2M,3m,3M,5P,6M 6
major pentatonic pentatonic 0P,2M,3M,5P,6M 5
major ionian 0P,2M,3M,4P,5P,6M,7M 7
malkos raga 0P,3m,4P,6m,7m 5
melodic minor 0P,2M,3m,4P,5P,6M,7M 7
messiaen's mode #3 0P,2M,3m,3M,4A,5P,6m,7m,7M 9
messiaen's mode #4 0P,2m,2M,4P,4A,5P,6m,7M 8
messiaen's mode #5 0P,2m,4P,4A,5P,7M 6
messiaen's mode #6 0P,2M,3M,4P,4A,5A,6A,7M 8
messiaen's mode #7 0P,2m,2M,3m,4P,4A,5P,6m,6M,7M 10
minor #7M pentatonic 0P,3m,4P,5P,7M 5
minor bebop 0P,2M,3m,4P,5P,6m,7m,7M 8
minor blues blues 0P,3m,4P,5d,5P,7m 6
minor hexatonic 0P,2M,3m,4P,5P,7M 6
minor pentatonic vietnamese 2 0P,3m,4P,5P,7m 5
minor six diminished 0P,2M,3m,4P,5P,6m,6M,7M 8
minor six pentatonic 0P,3m,4P,5P,6M 5
minor aeolian 0P,2M,3m,4P,5P,6m,7m 7
mixolydian b6 melodic minor fifth mode,hindu 0P,2M,3M,4P,5P,6m,7m 7
mixolydian pentatonic indian 0P,3M,4P,5P,7m 5
mixolydian dominant 0P,2M,3M,4P,5P,6M,7m 7
mystery #1 0P,2m,3M,5d,6m,7m 6
neopolitan major pentatonic 0P,3M,4P,5d,7m 5
neopolitan major 0P,2m,3m,4P,5P,6M,7M 7
oriental 0P,2m,3M,4P,5d,6M,7m 7
pelog 0P,2m,3m,5P,6m 5
persian 0P,2m,3M,4P,5d,6m,7M 7
phrygian dominant spanish,phrygian major 0P,2m,3M,4P,5P,6m,7m 7
phrygian 0P,2m,3m,4P,5P,6m,7m 7
piongio 0P,2M,4P,5P,6M,7m 6
prometheus neopolitan 0P,2m,3M,4A,6M,7m 6
prometheus 0P,2M,3M,4A,6M,7m 6
purvi raga 0P,2m,3M,4P,4A,5P,6m,7M 8
ritusen 0P,2M,4P,5P,6M 5
scriabin 0P,2m,3M,5P,6M 5
six tone symmetric 0P,2m,3M,4P,5A,6M 6
spanish heptatonic 0P,2m,3m,3M,4P,5P,6m,7m 8
super locrian pentatonic 0P,3m,4d,5d,7m 5
todi raga 0P,2m,3m,4A,5P,6m,7M 7
ultralocrian superlocrian bb7,superlocrian diminished 0P,2m,3m,4d,5d,6m,7d 7
vietnamese 1 0P,3m,4P,5P,6m 5
whole tone pentatonic 0P,3M,5d,6m,7m 5
whole tone messiaen's mode #1 0P,2M,3M,4A,5A,6A 6

Courtesy tonaljs via :

let scales = [];
for(let n of Scale.names()) 
{ 
    let s = Scale.get(n); 
    scales.push(`|${n}|${s.aliases}|${s.intervals.length}|${s.intervals}|`); 
}
scales.sort();

Chords

Full name short name intervals
altered alt7 1P,3M,7m,9m
augmented seventh maj7#5, maj7+5, +maj7, ^7#5 1P,3M,5A,7M
augmented aug, +, +5, ^#5 1P,3M,5A
diminished seventh dim7, °7, o7 1P,3m,5d,7d
diminished dim, °, o 1P,3m,5d
dominant flat ninth 7b9 1P,3M,5P,7m,9m
dominant ninth 9 1P,3M,5P,7m,9M
dominant seventh 7, dom 1P,3M,5P,7m
dominant sharp ninth 7#9 1P,3M,5P,7m,9A
dominant thirteenth 13 1P,3M,5P,7m,9M,13M
eleventh 11 1P,5P,7m,9M,11P
fifth 5 1P,5P
half-diminished m7b5, ø, -7b5, h7, h 1P,3m,5d,7m
lydian dominant seventh 7#11, 7#4 1P,3M,5P,7m,11A
major ninth maj9, Δ9, ^9 1P,3M,5P,7M,9M
major seventh flat sixth M7b6, ^7b6 1P,3M,6m,7M
major seventh sharp eleventh maj#4, Δ#4, Δ#11, M7#11, ^7#11, maj7#11 1P,3M,5P,7M,11A
major seventh maj7, Δ, ma7, M7, Maj7, ^7 1P,3M,5P,7M
major sharp eleventh (lydian) maj9#11, Δ9#11, ^9#11 1P,3M,5P,7M,9M,11A
major thirteenth maj13, Maj13, ^13 1P,3M,5P,7M,9M,13M
major M, ^, , maj 1P,3M,5P
minor augmented m#5, -#5, m+ 1P,3m,5A
minor eleventh m11, -11 1P,3m,5P,7m,9M,11P
minor ninth m9, -9 1P,3m,5P,7m,9M
minor seventh m7, min7, mi7, -7 1P,3m,5P,7m
minor sixth m6, -6 1P,3m,5P,6M
minor thirteenth m13, -13 1P,3m,5P,7m,9M,13M
minor/major ninth mM9, mMaj9, -^9 1P,3m,5P,7M,9M
minor/major seventh m/ma7, m/maj7, mM7, mMaj7, m/M7, -Δ7, mΔ, -^7, -maj7 1P,3m,5P,7M
minor m, min, - 1P,3m,5P
sixth added ninth 6add9, 6/9, 69, M69 1P,3M,5P,6M,9M
sixth 6, add6, add13, M6 1P,3M,5P,6M
suspended fourth flat ninth b9sus, phryg, 7b9sus, 7b9sus4 1P,4P,5P,7m,9m
suspended fourth seventh 7sus4, 7sus 1P,4P,5P,7m
suspended fourth sus4, sus 1P,4P,5P
suspended second sus2 1P,2M,5P

Courtesy tonaljs via :

let lines = [];
for(let t of Tonal.ChordType.names()) 
{ 
    c = Tonal.Chord.get(t); 
    lines.push(`|${c.name}|${c.aliases.join(", ")}|${c.intervals}|`); 
}
lines.sort();

Intervals

Chroma Interval Description
0 1P tonic, root
1 2m minor second
2 2M major second
3 3m minor second
4 3M major third
5 4P perfect fourth
6 5d diminished fifth
7 5P perfect fifth
8 6m minor sixth
9 6M major sixth
10 7m minor seventh
11 7M major seventh

Interval alteration qualities: ..dd, d, m, M, P, A..

Roman Numeral Chords

Roman Numeral chords are of use to describe key-agnostic chord progressions and are very common in Jazz leadsheets.

example interpretation
IMaj7 major seventh chord off root
IIm7 minor seventh chord off second
V7 dominant fifth chord
bVIIMaj7 flattened seventh as a major 7

The Key context (Major, Minor, diminished, augmented, …) is represented by M, m, d, a, and the chord extension is represented by a number: 7, 11, etc. The chord root can be changed by preceding the roman numeral field with b or #.

Generally:

[#|b]RomanNumber[quality][extension]

This notation can be combined with a key tonic to produce concrete chords. These still can be further qualified by providing a octave with the key tonic.

To produce triads off a C4 (middle-c) root:

Scale = "C4"
[I IIm IIIm IV] [V VIm VIId I]

Further reading here.

Online Docs

Notes and Intervals

Scales and chords

Voicings

Keys, chord progressions

Time, rhythm

Utilities

home .. topics .. interface .. reference .. examples .. tipjar