-
Notifications
You must be signed in to change notification settings - Fork 1
Description
It seems a lot of things could be added to the chord support.
- No facility to specify inversions? Also not clear that
is_triad
correctly works for inversions or other voicings that scramble the note order? make_triad
is tied to a scale, whereas it would be natural to have an interface that lets you specify a root note, major/minor/diminished/augmented, and optionally an inversion, since very often you want a chord that borrows from another mode and it would be annoying to always have to create a new scale every time you use a chord with accidentals.is_triad
doesn't seem to recognize augmented triads?- No built-in recognition of sixth (a.k.a. add6) and seventh chords and extensions thereof (e.g. 9th chords, 13th, 7♭9, 9♯11, etc etc.). (Then there are also polychords and other such beasts.)
It might be nice to have a function like make_chord(root, major/minor/diminished/augmented, extensions..., inversion=...)
where extensions could be scale degree like 7, 9, …
, with some keyword arguments to indicate voicings like inversions, though to have complete freedom over voicing you might still have to specify it as just a set of notes in some cases. Would also be nice to be able to specify standard chord symbols in some natural way, e.g. C9/G
or Em*add9
.
Would also be nice to be able to be able to take a set of notes and a given root note and identify a conventional name for the chord, although sometimes this is not unique, and the naming can differ based on the genre of music (e.g. classical vs. jazz/popular vs. more esoteric branches of music theory). e.g. if you give the set {G,A,C,E}
and a root note A
, then it should identify it as Am7/G
, whereas if you give the same set and a root note C
it should identify it as C6/G
(in jazz/pop notation).