### 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 majormode # 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;
}
```