Chord Scales
1. Consist entirely of only half steps and whole steps.2. "Wrap" back to the starting note after exactly one octave.
3. Contain no two consecutive half-steps, even when "wrapping" to the octave above or below.
These rules generate exactly 17 Chord Scales starting on any given note (click here to view source code for a C++ computer program that demonstrates this). They are all conventionally used in jazz harmony. There are 7 modes each of the major and melodic minor scale (7 notes), two diminished scales (8 notes), and one whole tone scale (6 notes):
The "code" in the table represents the lowest numeric occurrence occurrence (unneccessary LSBs discarded) when the scale's construction is considered an 8-bit binary value with H=0 and W=1.
# | code | construction | name | major mode # | mel. min. mode # |
1 | 85 | H W H W H W H W | auxiliary diminished | ||
2 | 94 | H W H W W W W | "altered," diminished whole tone | 7 | |
3 | 110 | H W W H W W W | Locrian, half-diminished | 7 | |
4 | 118 | H W W W H W W | Phrygian | 3 | |
5 | 122 | H W W W W H W | Phrygian +6, Dorian -2 | 2 | |
6 | 170 | W H W H W H W H | diminished | ||
7 | 174 | W H W H W W W | Locrian #2 | 6 | |
8 | 182 | W H W W H W W | Aeolian, pure minor | 6 | |
9 | 186 | W H W W W H W | Dorian | 2 | |
10 | 188 | W H W W W W H | melodic minor | 1 | |
11 | 214 | W W H W H W W | Mixolydian -6, "Hindu" | 5 | |
12 | 218 | W W H W W H W | Mixolydian | 5 | |
13 | 220 | W W H W W W H | Ionian, major | 1 | |
14 | 234 | W W W H W H W | Lydian dominant, Mixolydian +4 | 4 | |
15 | 236 | W W W H W W H | Lydian | 4 | |
16 | 244 | W W W W H W H | Lydian +5 | 3 | |
17 | 252 | W W W W W W | whole tone |
// // Lists all possible "Chord Scales," where a chord scale is defined as: // // 1. Consisting entirely of only half steps and whole steps. // 2. "Wraping" back to the starting note after exactly one octave. // 3. Containing no two consecutive half-steps, even when "wrapping" to the octave above or below. // #include "stdio.h" int main() { int i,j; int t,ii; int c; int prevhalf; for (i=0; i<0x0100; i++) { printf("%.3d: ",i); t = i; c = 0; prevhalf = 0; for (j=0; j<8; j++) { if (t & 0x80) { printf("W "); c+=2; prevhalf = 0; } else { printf("H "); if (prevhalf) { if (j<=4) printf("\t"); printf("\tconsecutive half steps"); goto skip; } c++; prevhalf = 1; } if (c==12) // got a scale that wraps exactly to one ocatve { if (!((i|t)&0x80)) { printf("\tfirst/last half step"); goto skip; } i += (1 << (7-j)) - 1; printf("\n"); break; } else if (c>12) { printf("\tdoes not hit octave"); skip: ii = (1 << (7-j)) - 1; // skip identical entries if (ii) { if (ii==1) printf(" (skip %d)",i+1); else printf(" (skip %d-%d)",i+1,i+ii); i += ii; } printf("\n"); break; } t <<= 1; } } return 0; }