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;
}
