private static Song.Chord generateJazzChord(int mode, String key, char chord, int length)
{
String[] notes = { "A", "A#", "B", "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#" };
String[] keySig = new String[7];
String[] noteNames = new String[4];
int chordNumIndex = int.Parse(new String(chord, 1)) - 1;
int keynum = Array.IndexOf(notes, key);
//generate chord in major mode
if (mode == 0)
{
//TEST THESE
keySig[0] = notes[keynum];
keySig[1] = notes[(keynum + 2) % 12];
keySig[2] = notes[(keynum + 4) % 12];
keySig[3] = notes[(keynum + 5) % 12];
keySig[4] = notes[(keynum + 7) % 12];
keySig[5] = notes[(keynum + 9) % 12];
keySig[6] = notes[(keynum + 11) % 12];
noteNames[0] = keySig[chordNumIndex] + "2";
noteNames[1] = keySig[chordNumIndex] + "4";
noteNames[2] = keySig[(chordNumIndex + 2) % 7] + "4";
noteNames[3] = keySig[(chordNumIndex + 6) % 7] + "4";
Console.Out.WriteLine(chordNumIndex + 1 + " " + length);
return new Song.Chord(noteNames, length, chordNumIndex + 1);
}
//generate chord in minor mode
if (mode == 1)
{
//TEST THESE
keySig[0] = notes[keynum];
keySig[1] = notes[(keynum + 2) % 12];
keySig[2] = notes[(keynum + 3) % 12];
keySig[3] = notes[(keynum + 5) % 12];
keySig[4] = notes[(keynum + 7) % 12];
keySig[5] = notes[(keynum + 8) % 12];
keySig[6] = notes[(keynum + 10) % 12];
//if not a dominant function
if (chordNumIndex != 4 && chordNumIndex != 6)
{
noteNames[0] = keySig[chordNumIndex] + "2";
noteNames[1] = keySig[chordNumIndex] + "4";
noteNames[2] = keySig[(chordNumIndex + 2) % 7] + "4";
noteNames[3] = keySig[(chordNumIndex + 6) % 7] + "4";
}
//if dominant
if (chordNumIndex == 4)
{
noteNames[0] = keySig[chordNumIndex] + "2";
noteNames[1] = keySig[chordNumIndex] + "4";
noteNames[3] = keySig[(chordNumIndex + 6) % 7] + "4";
//2nd note of the triad is raised a half step
//noteNames[2] = notes[(Array.IndexOf(notes, keySig[(chordNumIndex + 2) % 7]) + 1) % 12] + "4";
noteNames[2] = notes[(Array.IndexOf(notes, keySig[(chordNumIndex + 2) % 7]) + 1) % 12] + "4";
}
//if leading tone
if (chordNumIndex == 6)
{
//root of the triad is raised a half step
noteNames[0] = notes[(Array.IndexOf(notes, keySig[(chordNumIndex)]) + 1) % 12] + "2";
noteNames[1] = notes[(Array.IndexOf(notes, keySig[(chordNumIndex)]) + 1) % 12] + "4";
noteNames[2] = keySig[(chordNumIndex + 2) % 7] + "4";
noteNames[3] = keySig[(chordNumIndex + 6) % 7] + "4";
}
Console.Out.WriteLine(chordNumIndex + 1 + " " + length);
return new Song.Chord(noteNames, length, chordNumIndex + 1);
}
return null;
}