mirror of
https://github.com/microtherion/VocalEasel.git
synced 2024-12-22 19:23:59 +00:00
500 lines
17 KiB
Python
500 lines
17 KiB
Python
|
|
# chordtable.py
|
|
|
|
"""
|
|
This module is an integeral part of the program
|
|
MMA - Musical Midi Accompaniment.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
Bob van der Poel <bob@mellowood.ca>
|
|
|
|
|
|
|
|
Table of chords. All are based on a C scale.
|
|
Generating chords is easy in MIDI since we just need to
|
|
add/subtract constants, based on yet another table.
|
|
|
|
CAUTION, if you add to this table make sure there are at least
|
|
3 notes in each chord! Don't make any chord longer than 8 notes
|
|
(The pattern define sets volumes for only 8).
|
|
|
|
There is a corresponding scale set for each chord. These are
|
|
used by bass and scale patterns.
|
|
|
|
Each chord needs an English doc string. This is extracted by the
|
|
-Dn option to print a table of chordnames for inclusion in the
|
|
reference manual.
|
|
|
|
"""
|
|
|
|
C = 0
|
|
Cs = Db = 1
|
|
D = 2
|
|
Ds = Eb = 3
|
|
E = Fb = 4
|
|
Es = F = 5
|
|
Fs = Gb = 6
|
|
G = 7
|
|
Gs = Ab = 8
|
|
A = Bbb= 9
|
|
As = Bb = 10
|
|
B = Cb = 11
|
|
|
|
chordlist = {
|
|
'M': ((C, E, G ),
|
|
(C, D, E, F, G, A, B),
|
|
"Major triad. This is the default and is used in "
|
|
"the absense of any other chord type specification."),
|
|
|
|
'(b5)': ((C, E, Gb ),
|
|
(C, D, E, F, Gb, A, B),
|
|
"Major triad with flat 5th."),
|
|
|
|
'add9': ((C, E, G, D+12),
|
|
(C, D, E, F, G, A, D+12),
|
|
"Major chord plus 9th (no 7th.)"),
|
|
|
|
'addb9': ((C, E, G, Db+12),
|
|
(C, D, E, F, G, A, Db+12),
|
|
"Major chord plus flat 9th (no 7th.)"),
|
|
|
|
'add#9': ((C, E, G, Ds+12),
|
|
(C, D, E, F, G, A, Ds+12),
|
|
"Major chord plus sharp 9th (no 7th.)"),
|
|
|
|
'm': ((C, Eb, G ),
|
|
(C, D, Eb, F, G, Ab, Bb),
|
|
"Minor triad."),
|
|
|
|
'mb5': ((C, Eb, Gb ),
|
|
(C, D, Eb, F, Gb, Ab, Bb),
|
|
"Minor triad with flat 5th (aka dim)."),
|
|
|
|
'm#5': ((C, Eb, Gs ),
|
|
(C, D, Eb, F, Gs, Ab, Bb),
|
|
"Minor triad with augmented 5th."),
|
|
|
|
'm6': ((C, Eb, G, A ),
|
|
(C, D, Eb, F, G, A, Bb),
|
|
"Minor 6th (flat 3rd plus a 6th)."),
|
|
|
|
'm6(add9)': ((C, Eb, G, D+12, A+12),
|
|
(C, D, Eb, F, G, A, Bb),
|
|
"Minor 6th with added 9th. This is sometimes notated as a slash chord "
|
|
"in the form ``m6/9''." ),
|
|
|
|
'm7': ((C, Eb, G, Bb ),
|
|
(C, D, Eb, F, G, Ab, Bb),
|
|
"Minor 7th (flat 3rd plus dominant 7th)."),
|
|
|
|
'm7#5': ((C, E, Gs, Bb),
|
|
(C, D, E, F, Gs, A, Bb),
|
|
"Minor 7th with sharp 5th."),
|
|
|
|
'mM7': ((C, Eb, G, B ),
|
|
(C, D, Eb, F, G, Ab, B),
|
|
"Minor Triad plus Major 7th. You will also see this printed "
|
|
"as ``m(maj7)'', ``m+7'', ``min(maj7)'' and ``min$\sharp$7'' "
|
|
"(which \mma\ accepts); as well as the \mma\ \emph{invalid} "
|
|
"forms: ``-($\Delta$7)'', and ``min$\\natural$7''."),
|
|
|
|
'm+7b9': ((C, Eb, Gs, Bb, Db+12),
|
|
(C, Db, Eb, F, Gs, Ab, Bb),
|
|
"Augmented minor 7 plus flat 9th."),
|
|
|
|
'm+7#9': ((C, Eb, Gs, Bb, Ds+12),
|
|
(C, Ds, Eb, F, Gs, Ab, Bb),
|
|
"Augmented minor 7 plus sharp 9th."),
|
|
|
|
'mM7(add9)': ((C, Eb, G, B, D+12),
|
|
(C, D, Eb, F, G, Ab, B),
|
|
"Minor Triad plus Major 7th and 9th."),
|
|
|
|
'm7b5': ((C, Eb, Gb, Bb ),
|
|
(C, D, Eb, F, Gb, Ab, Bb),
|
|
"Minor 7th, flat 5 (aka 1/2 diminished). "),
|
|
|
|
'm7b9': ((C, Eb, G, Bb, Db+12 ),
|
|
(C, Db, Eb, F, G, Ab, Bb),
|
|
"Minor 7th with added flat 9th."),
|
|
|
|
'm7#9': ((C, Eb, G, Bb, Ds+12 ),
|
|
(C, Ds, Eb, F, G, Ab, Bb),
|
|
"Minor 7th with added sharp 9th."),
|
|
|
|
'7': ((C, E, G, Bb ),
|
|
(C, D, E, F, G, A, Bb),
|
|
"7th."),
|
|
|
|
'7b5': ((C, E, Gb, Bb ),
|
|
(C, D, E, F, Gb, A, Bb),
|
|
"7th, flat 5."),
|
|
|
|
'dim7': ((C, Eb, Gb, Bbb ),
|
|
(C, D, Eb, F, Gb, Ab, Bbb ), # missing 8th note
|
|
"Diminished seventh."),
|
|
|
|
'dim7(addM7)': ((C, Eb, Gb, A, B),
|
|
(C, D, Eb, F, Gb, A, B),
|
|
"Diminished tirad with added Major 7th."),
|
|
|
|
'aug': ((C, E, Gs ),
|
|
(C, D, E, F, Gs, A, B ),
|
|
"Augmented triad."),
|
|
|
|
'6': ((C, E, G, A ),
|
|
(C, D, E, F, G, A, B),
|
|
"Major tiad with added 6th."),
|
|
|
|
'6(add9)': ((C, E, G, D+12, A+12),
|
|
(C, D, E, F, G, A, B),
|
|
"6th with added 9th. This is sometimes notated as a slash chord "
|
|
"in the form ``6/9''."),
|
|
|
|
'M7': ((C, E, G, B),
|
|
(C, D, E, F, G, A, B),
|
|
"Major 7th."),
|
|
|
|
|
|
|
|
'M7#5': ((C, E, Gs, B),
|
|
(C, D, E, F, Gs, A, B),
|
|
"Major 7th with sharp 5th."),
|
|
|
|
'M7b5': ((C, E, Gb, B ),
|
|
(C, D, E, F, Gb, A, B ),
|
|
"Major 7th with a flat 5th."),
|
|
|
|
'9': ((C, E, G, Bb, D+12 ),
|
|
(C, D, E, F, G, A, Bb),
|
|
"7th plus 9th."),
|
|
|
|
|
|
|
|
'9b5': ((C, E, Gb, Bb, D+12 ),
|
|
(C, D, E, F, Gb, A, Bb),
|
|
"7th plus 9th with flat 5th."),
|
|
|
|
'm9': ((C, Eb, G, Bb, D+12 ),
|
|
(C, D, Eb, F, G, Ab, Bb),
|
|
"Minor triad plus 7th and 9th."),
|
|
|
|
'm7b5b9': ((C, Eb, Gb, Bb, Db+12),
|
|
(C, Db, Eb, F, Gb, Ab, Bb),
|
|
"Minor 7th with flat 5th and flat 9th."),
|
|
|
|
'm9b5': ((C, Eb, Gb, Bb, D+12 ),
|
|
(C, D, Eb, F, Gb, Ab, Bb),
|
|
"Minor triad, flat 5, plus 7th and 9th."),
|
|
|
|
'm(sus9)':((C, Eb, G, D+12 ),
|
|
(C, D, Eb, F, G, Ab, D+12),
|
|
"Minor triad plus 9th (no 7th)."),
|
|
|
|
'M9': ((C, E, G, B, D+12 ),
|
|
(C, D, E, F, G, A, B),
|
|
"Major 7th plus 9th."),
|
|
|
|
'M9#11': ((C, E, G, B, D+12, Fs+12),
|
|
(C, D, E, Fs, G, A, B),
|
|
"Major 9th plus sharp 11th."),
|
|
|
|
'7b9': ((C, E, G, Bb, Db+12 ),
|
|
(C, Db, E, F, G, A, Bb),
|
|
"7th with flat 9th."),
|
|
|
|
'7#9': ((C, E, G, Bb, Ds+12 ),
|
|
(C, Ds, E, F, G, A, Bb),
|
|
"7th with sharp 9th."),
|
|
|
|
'7#9b13': ((C, E, G, Bb, Ds+12, Ab+12 ),
|
|
(C, Ds, E, F, G, Ab, Bb),
|
|
"7th with sharp 9th and flat 13th."),
|
|
|
|
'7b5b9':((C, E, Gb, Bb, Db+12 ),
|
|
(C, Db, E, F, Gb, A, Bb),
|
|
"7th with flat 5th and flat 9th."),
|
|
|
|
'7b5#9':((C, E, Gb, Bb, Ds+12 ),
|
|
(C, Ds, E, F, Gb, A, Bb),
|
|
"7th with flat 5th and sharp 9th."),
|
|
|
|
'7#5#9':((C, E, Gs, Bb, Ds+12 ),
|
|
(C, Ds, E, F, Gs, A, Bb),
|
|
"7th with sharp 5th and sharp 9th."),
|
|
|
|
|
|
'aug7': ((C, E, Gs, Bb ),
|
|
(C, D, E, F, Gs, A, Bb),
|
|
"An augmented chord (raised 5th) with a dominant 7th."),
|
|
|
|
'aug7b9':((C, E, Gs, Bb, Db+12 ),
|
|
(C, Db, E, F, Gs, A, Bb),
|
|
"An augmented chord (raised 5th) with a dominant 7th and flat 9th."),
|
|
|
|
'aug7#9':((C, E, Gs, Bb, Ds+12 ),
|
|
(C, Ds, E, F, Gs, A, Bb),
|
|
"An augmented chord (raised 5th) with a dominant 7th and sharp 9th."),
|
|
|
|
'aug9M7':((C, E, Gs, B, D+12 ),
|
|
(C, D, E, F, Gs, A, B),
|
|
"An augmented chord (raised 5th) with a major 7th and 9th."),
|
|
|
|
'+7b9#11': ((C, E, Gs, Bb, Db+12, Fs+12),
|
|
(C, Db, E, Fs, G, A, Bb),
|
|
"Augmented 7th with flat 9th and sharp 11th."),
|
|
|
|
'm+7b9#11': ((C, Eb, Gs, Bb, Db+12, Fs+12),
|
|
(C, Db, Eb, Fs, Gs, A, Bb),
|
|
"Augmented minor 7th with flat 9th and sharp 11th."),
|
|
|
|
'11': ((C, C, G, Bb, D+12, F+12 ),
|
|
(C, D, E, F, G, A, Bb),
|
|
"9th chord plus 11th (3rd not voiced)."),
|
|
|
|
'm11': ((C, Eb, G, Bb, D+12, F+12 ),
|
|
(C, D, Eb, F, G, Ab, Bb),
|
|
"9th with minor 3rd, plus 11th."),
|
|
|
|
'm7(add11)': ((C, Eb, G, Bb, F+12 ),
|
|
(C, D, Eb, F, G, Ab, Bb),
|
|
"Minor 7th plus 11th."),
|
|
|
|
'm9#11': ((C, Eb, G, Bb, D+12, Fs+12),
|
|
(C, D, Eb, Fs, G, A, Bb),
|
|
"Minor 7th plus 9th and sharp 11th."),
|
|
|
|
'm7b9#11': ((C, Eb, G, Bb, Db+12, Fs+12),
|
|
(C, Db, Eb, Fs, G, A, Bb),
|
|
"Minor 7th plus flat 9th and sharp 11th."),
|
|
|
|
'm7(add13)': ((C, Eb, G, Bb, A+12 ),
|
|
(C, D, Eb, F, G, A, Bb),
|
|
"Minor 7th plus 13th."),
|
|
|
|
'11b9': ((C, E, G, Bb, Db+12, F+12 ),
|
|
(C, Db, E, F, G, A, Bb),
|
|
"7th chord plus flat 9th and 11th."),
|
|
|
|
'9#5': ((C, E, Gs, Bb, D+12 ),
|
|
(C, D, E, F, Gs, A, Bb),
|
|
"7th plus 9th with sharp 5th (same as aug9)."),
|
|
|
|
'9#11': ((C, E, G, Bb, D+12, Fs+12 ),
|
|
(C, D, E, Fs, G, A, Bb),
|
|
"7th plus 9th and sharp 11th."),
|
|
|
|
'7#9#11':((C, E, G, Bb, Ds+12, Fs+12 ),
|
|
(C, Ds, E, Fs, G, A, Bb),
|
|
"7th plus sharp 9th and sharp 11th."),
|
|
|
|
'7b9#11': ((C, E, G, Bb, Db+12, Fs+12 ),
|
|
(C, Db, E, Fs, G, A, Bb),
|
|
"7th plus flat 9th and sharp 11th."),
|
|
|
|
'7#11':((C, E, G, Bb, Fs+12 ),
|
|
(C, D, E, Fs, G, A, Bb),
|
|
"7th plus sharp 11th (9th omitted)."),
|
|
|
|
'M7#11':((C, E, G, B, Fs+12 ),
|
|
(C, D, E, Fs, G, A, B),
|
|
"Major 7th plus sharp 11th (9th omitted)."),
|
|
|
|
'm11b5': ((C, Eb, Gb, Bb, D+12, F+12),
|
|
(C, D, Eb, F, Gb, A, Bb),
|
|
"Minor 7th with flat 5th plus 11th."),
|
|
|
|
# Sus chords. Not sure what to do with the associated scales. For
|
|
# now just duplicating the 2nd or 3rd in the scale seems to make sense.
|
|
|
|
'sus4': ((C, F, G ),
|
|
(C, D, F, F, G, A, B),
|
|
"Suspended 4th, major triad with the 3rd raised half tone."),
|
|
|
|
'msus4': ((C, Eb, F, G ),
|
|
(C, D, Eb, F, G, Ab, Bb),
|
|
"Minor suspended 4th, minor triad plus 4th."),
|
|
|
|
'sus(addb9)': ((C, F, G, Db+12 ),
|
|
(C, D, F, F, G, A, B),
|
|
"Suspended 4th, major triad with the 3rd raised half tone plus flat 9th."),
|
|
|
|
'sus(add9)': ((C, F, G, D+12 ),
|
|
(C, D, F, F, G, A, B),
|
|
"Suspended 4th, major triad with the 3rd raised half tone plus 9th."),
|
|
|
|
'sus(add#9)': ((C, F, G, Ds+12 ),
|
|
(C, D, F, F, G, A, B),
|
|
"Suspended 4th, major triad with the 3rd raised half tone plus sharp 9th."),
|
|
|
|
'7sus': ((C, F, G, Bb ),
|
|
(C, D, F, F, G, A, Bb),
|
|
"7th with suspended 4th, dominant 7th with 3rd "
|
|
"raised half tone."),
|
|
|
|
'7susb9': ((C, F, G, Bb, Db+12),
|
|
(C, Db, F, F, G, A, Bb),
|
|
"7th with suspended 4th and flat 9th."),
|
|
|
|
'sus2': ((C, D, G ),
|
|
(C, D, D, F, G, A, B),
|
|
"Suspended 2nd, major triad with the major 2nd above the "
|
|
"root substituted for 3rd."),
|
|
|
|
'7sus2':((C, D, G, Bb ),
|
|
(C, D, D, F, G, A, Bb),
|
|
"A sus2 with dominant 7th added."),
|
|
|
|
'sus9': ((C, F, G, Bb, D+12),
|
|
(C, D, F, F, G, A, Bb),
|
|
"7sus plus 9th."),
|
|
|
|
'13sus': ((C, F, G, Bb, D+12, A+12),
|
|
(C, D, F, F, G, A, Bb),
|
|
"7sus, plus 9th and 13th"),
|
|
|
|
'13susb9': ((C, F, G, Bb, Db+12, A+12),
|
|
(C, Db, F, F, G, A, Bb),
|
|
"7sus, plus flat 9th and 13th"),
|
|
|
|
# these chords should probably NOT have the 5th included,
|
|
# but since a number of voicings depend on the 5th being
|
|
# the third note of the chord, they're here.
|
|
|
|
'13': ((C, E, G, Bb, A+12),
|
|
(C, D, E, F, G, A, Bb),
|
|
"7th (including 5th) plus 13th (the 9th and 11th are not voiced)."),
|
|
|
|
'13b5': ((C, E, Gb, Bb, A+12),
|
|
(C, D, E, F, Gb, A, Bb),
|
|
"7th with flat 5th, plus 13th (the 9th and 11th are not voiced)."),
|
|
|
|
'13#9': ((C, E, G, Bb, Ds+12, A+12),
|
|
(C, Ds, E, F, G, A, Bb),
|
|
"7th (including 5th) plus 13th and sharp 9th (11th not voiced)."),
|
|
|
|
'13b9': ((C, E, G, Bb, Db+12, A+12),
|
|
(C, Db, E, F, G, A, Bb),
|
|
"7th (including 5th) plus 13th and flat 9th (11th not voiced)."),
|
|
|
|
'M13': ((C, E, G, B, A+12),
|
|
(C, D, E, F, G, A, B),
|
|
"Major 7th (including 5th) plus 13th (9th and 11th not voiced)."),
|
|
|
|
'm13': ((C, Eb, G, Bb, A+12),
|
|
(C, D, Eb, F, G, A, Bb),
|
|
"Minor 7th (including 5th) plus 13th (9th and 11th not voiced)."),
|
|
|
|
'13#11': ((C, E, G, Bb, Fs+12, A+12),
|
|
(C, D, E, Fs, G, A, Bb),
|
|
"7th plus sharp 11th and 13th (9th not voiced)."),
|
|
|
|
'M13#11': ((C, E, G, B, Fs+12, A+12),
|
|
(C, D, E, Fs, G, A, B),
|
|
"Major 7th plus sharp 11th and 13th (9th not voiced)."),
|
|
|
|
# Because some patterns assume that the 3rd note in a chord is a 5th,
|
|
# or a varient, we duplicate the root into the position of the 3rd ... and
|
|
# to make the sound even we duplicate the 5th into the 4th position as well.
|
|
|
|
'5': ((C, C, G, G ),
|
|
(C, D, E, F, G, A, B),
|
|
"Altered Fifth or Power Chord; root and 5th only."),
|
|
|
|
'omit3add9': ((C, C, G, D+12),
|
|
(C, D, E, F, G, A, Bb),
|
|
"Triad: root, 5th and 9th."),
|
|
|
|
'7omit3': ((C, C, G, Bb),
|
|
(C, D, E, F, G, A, Bb),
|
|
"7th with unvoiced 3rd."),
|
|
|
|
'm7omit5': ((C, Eb, Bb),
|
|
(C, D, Eb, F, G, A, Bb),
|
|
"Minor 7th with unvoiced 5th."),
|
|
}
|
|
|
|
|
|
""" Extend our table with common synomyns. These are real copies,
|
|
not pointers. This is done so that a user redefine only affects
|
|
the original.
|
|
"""
|
|
|
|
aliases = (
|
|
('aug9', '9#5', ''),
|
|
('+9', '9#5', ''),
|
|
('+9M7', 'aug9M7', ''),
|
|
('+M7', 'M7#5', ''),
|
|
('m(add9)', 'm(sus9)', ''),
|
|
('(add9)', 'add9', ''),
|
|
('(addb9)', 'addb9', ''),
|
|
('(add#9)', 'add#9', ''),
|
|
('69', '6(add9)', ''),
|
|
('m69', 'm6(add9)', ''),
|
|
('m(b5)', 'mb5', ''),
|
|
('m7(b9)', 'm7b9', ''),
|
|
('m7(#9)', 'm7#9', ''),
|
|
('9+5', '9#5', ''),
|
|
('m+5', 'm#5', ''),
|
|
('M6', '6', ''),
|
|
('m7-5', 'm7b5', ''),
|
|
('m7(omit5)','m7omit5', ''),
|
|
('+', 'aug', ''),
|
|
('+7', 'aug7', ''),
|
|
('7(omit3)', '7omit3', ''),
|
|
('#5', 'aug', ''),
|
|
('7#5b9', 'aug7b9', ''),
|
|
('7-9', '7b9', ''),
|
|
('7+9', '7#9', ''),
|
|
('maj7', 'M7', ''),
|
|
('M7-5', 'M7b5', ''),
|
|
('M7+5', 'M7#5', ''),
|
|
('M7(add13)','13b9', ''),
|
|
('7alt', '7b5b9', ''),
|
|
('7sus4', '7sus', ''),
|
|
('7+', 'aug7', ''),
|
|
('7#5', 'aug7', ''),
|
|
('7+5', 'aug7', ''),
|
|
('7-5', '7b5', ''),
|
|
('sus', 'sus4', ''),
|
|
('maj9', 'M9', ''),
|
|
('maj13', 'M13', ''),
|
|
('m(maj7)', 'mM7', ''),
|
|
('m+7', 'mM7', ''),
|
|
('min(maj7)','mM7', ''),
|
|
('min#7', 'mM7', ''),
|
|
('m#7', 'mM7', ''),
|
|
('dim', 'dim7', 'A dim7, not a triad!'),
|
|
(chr(176), 'dim7', 'A dim7 using a degree symbol'),
|
|
(chr(176)+'3', 'mb5', 'A dim3 (triad) using a degree symbol'),
|
|
(chr(176)+'(addM7)', 'dim7(addM7)', 'dim7(addM7) using degree symbol'),
|
|
(chr(248), 'm7b5', 'Half-diminished using slashed degree symbol'),
|
|
('9sus', 'sus9', ''),
|
|
('9-5', '9b5', ''),
|
|
('dim3', 'mb5', 'Diminished triad (non-standard notation).'),
|
|
('omit3(add9)','omit3add9', ''),
|
|
('9sus4', 'sus9', '')
|
|
)
|
|
|
|
for a,b,d in aliases:
|
|
n=chordlist[b][0]
|
|
s=chordlist[b][1]
|
|
if not d:
|
|
d=chordlist[b][2]
|
|
|
|
chordlist[a] = (n, s, d)
|
|
|