I am trying to understand how to properly build and name 7th chords
I think the least confusing way is to start with diatonic seventh chords...
- dominant seventh
- minor seventh
- major seventh
- half-diminished
...then add the functional chromatic seventh chords...
- diminished seventh
- German augmented sixth
- French augmented sixth
...note that those chromatic chords are commonly found in minor keys and the diminished seventh and diminished thirds found in those chords all involve the lowered sixth scale degree from the minor mode along with either the seventh or fourth scale degrees raised to create a leading tone.
Normally the augmented sixth chords are not categorized with seventh chords. I listed them here because technically they use four pitch classes and can be re-order as a series of thirds. In consideration of programmatically listing all possible combinations it seems worth noting that some seemingly odd combination result in standard chord types.
Finally there is the system of triad plus a seventh. In that system there are certain combinations what have names like the minor major seventh while others don't like a diminished triad plus a major seventh. While such chords may not have names they can be written with jazz symbols like @LaurencePayne showed Cm(maj7)(♭5)
and of course you can write any of them in staff notation.
This is sort of a progressive approach. Working from diatonic to chromatic. Importantly not all the possible seventh chords have names. Basically the commonly used chords have names and rarely used ones don't.
If you are trying to write a computer program, you must decide what the output will be. Is it C:V7
, G dominant seventh
, or G7
?
Depending on the limits of the name output you might decide to return an error or some not a named seventh chord value. For example, C# E# G# Bb
is technically a major triad plus a diminished seventh. You could call it a major diminished seventh. But enharmonically it sounds like C#6
or it could be enharmonically respelled to be called a Bb minor seventh chord
.
You have to decide what to do with the unusual cases. Return an error, use an unconventional name, or possibly enharmonically respell the chord to a commonly named chord.
EDIT
Just adding an idea about how to name and programmatically handling enharmonics.
Maybe a good approach is to examine the input for non-diatonic intervals, then do the enharmonic re-spelling to attempt to find a diatonic (or otherwise commonly defined) seventh chord.
First learn interval encodeing like d3
for diminished third, m7
for minor seventh, etc.
Then use a list of the diatonic intervals which are the major and minor seconds, thirds, sixths, and sevenths, and the perfect fourth, fifth, octave, and the diminished fifth and augmented fourth: m2 M2 m3 M3 P4 A4 d5 P5 m6 M6 m7 M7 P8
.
Three cases:
Maj d3
/ \ /\
C# E# G# Bb
\ /
d7
I suppose you could work from either the d3
or the d7
, but I'll use the d3
.
The d3
isn't diatonic, so we en-harmonically re-spell. Pick one of the tones of the d3
and keep it, then re-spell the others. So there are two options:
(Db)(F)(Ab) Bb
in tertian order Bb (Db)(F)(Ab)
C# E# G# (A#)
in tertian order (A#) C# E# G#
...the chord can be re-spelled two ways to get a common minor seventh chord.
I used parenthesis to show a re-spelled tone.
Min d3
/ \ /\
C# E G# Bb
\ /
d7
...the re-spellings are...
(Db)(Fb)(Ab) Bb
in tertian order Bb (Db)(Fb)(Ab)
C# E# G# (A#)
in tertian order (A#) C# E# G#
...the chord can be re-spelled two ways to get a common half-diminished chord.
All four of the re-spellings are comprised of diatonic, major/minor thirds.
dim A3
/ \ /\
C Eb Gb B
\ /
M7
...the re-spellings are...
(Dbb)(Fbb)(Abbb) B
in tertian order B (Dbb)(Fbb)(Abbb)
C Eb Gb (Ax)
in tertian order (Ax) C Eb Gb
None of these spelling entirely diatonic, major/minor thirds, nor a full diminished seventh chord.
The tone spellings get really ugly fast!
You could handle the tones as an object with letter and numeric properties like {"letter":"E","accidentals":0}
and {"letter":"A","accidentals":-3}
then calculations are easier: E
to A
is a P4
and 5 semi-tones, subtract 3, ddd4
a triple diminished fourth, and the final distance is 5 - 3 = 2 semi-tones. A _to_text()_ function could then output Abbb
for musical display.