Hallo Leute
Bin Anfänger
ich möchte eine Akkorderkennung programmiren.
nach diese Tabelle:
//////////////////////////////////////////////////////////////////////////////
Sus2 Moll DUR Sus4 7
Grundton Sekunde Terz Quarte Quinte Sexte Septe
1 B2 2 B3 3 4 B5 5 B6
6 7 Ç7
C Cis D Dis E F Fis G Gis A B H
Cis D Dis E F Fis G Gis A B H C
D Dis E F Fis G Gis A B H C Cis
Dis E F Fis G Gis A B H C Cis D
E F Fis G Gis A B H C Cis D Dis
F Fis G Gis A B H C Cis D Dis E
Fis G Gis A B H C Cis D Dis E F
G Gis A B H C Cis D Dis E F Fis
Gis A B H C Cis D Dis E F Fis G
A B H C Cis D Dis E F Fis G Gis
B H C Cis D Dis E F Fis G Gis A
H C Cis D Dis E F Fis G Gis A B
Bei spiel zu Grundton
"Grundton"--"B2"---"sus2"--"Moll"-"Dur"-"sus4"--"B5"-"Quinte"-" B6"-"sexte"--"septe" "7"
------C----------Cis-------D-------Dis-----E------F--------Fis-----G--------Gis-----A----------B-------H
Grundton = Grundton + Quinte
////////////////////////////////////////////////////////////////////////////
Wenn ich ein C-Dur Akkord greife(C,E,G) dann muss C-Dur angezeigt werden.
ich habe alle noten auf null gesetzt
int NoteAnAus[12]={0,0,0,0,0,0,0,0,0,0,0,0} ;
wenn die Tasten am Keyboard für NoteAnAus[?] gedrückt wird dann ist
NoteAnAus[?]= 1;// Gedrückt
NoteAnAus[?]= 0;// Losgelassen
Um erst den Grundton zu ermitten habe ich es so gemacht:
//////////////////////////////////////////////////////////////
if(NoteAnAus[0]==1 && NoteAnAus[7]==1) { m_sAkk=("C");}
else if(NoteAnAus[1]==1 && NoteAnAus[8]==1){m_sAkk=("C#");}
else if(NoteAnAus[2]==1 && NoteAnAus[9]==1){m_sAkk=("D");}
else if(NoteAnAus[3]==1 && NoteAnAus[10]==1){m_sAkk=("D#");}
else if(NoteAnAus[4]==1 && NoteAnAus[11]==1){m_sAkk=("E");}
else if(NoteAnAus[5]==1 && NoteAnAus[0]==1){m_sAkk=("F");}
else if(NoteAnAus[6]==1 && NoteAnAus[1]==1){m_sAkk=("F#");}
else if(NoteAnAus[7]==1 && NoteAnAus[2]==1){m_sAkk=("G");}
else if(NoteAnAus[8]==1 && NoteAnAus[3]==1){m_sAkk=("G#");}
else if(NoteAnAus[9]==1 && NoteAnAus[4]==1){m_sAkk=("A");}
else if(NoteAnAus[10]==1 && NoteAnAus[5]==1){m_sAkk=("A#");}
else if(NoteAnAus[11]==1 && NoteAnAus[6]==1){m_sAkk=("H#");}
/////////////////////////////////////////////////////////////////
kann man es einfacher machen ?
wenn ich den Grundton habe und jetz eine der Krakter note dazu gedrückt wird. Muss die Anzeige (Grundton + Karakterton) anzeigen
Grundton = Grundton + Quinte
Karakterton = Alles was zwichen (Grundton + Quinte) ist.
Angenommen wenn C , G und E gedückt wird E=Dur
oder Dis = moll
oder D = sus2
oder Cis = B2
Also wie oben in der Tabelle.
Wie kann ich so was am besten und einfachsten machen?
Für Hilfe jetz schon mal Danke
Grüße Can
Bin Anfänger
ich möchte eine Akkorderkennung programmiren.
nach diese Tabelle:
//////////////////////////////////////////////////////////////////////////////
Sus2 Moll DUR Sus4 7
Grundton Sekunde Terz Quarte Quinte Sexte Septe
1 B2 2 B3 3 4 B5 5 B6
6 7 Ç7
C Cis D Dis E F Fis G Gis A B H
Cis D Dis E F Fis G Gis A B H C
D Dis E F Fis G Gis A B H C Cis
Dis E F Fis G Gis A B H C Cis D
E F Fis G Gis A B H C Cis D Dis
F Fis G Gis A B H C Cis D Dis E
Fis G Gis A B H C Cis D Dis E F
G Gis A B H C Cis D Dis E F Fis
Gis A B H C Cis D Dis E F Fis G
A B H C Cis D Dis E F Fis G Gis
B H C Cis D Dis E F Fis G Gis A
H C Cis D Dis E F Fis G Gis A B
Bei spiel zu Grundton
"Grundton"--"B2"---"sus2"--"Moll"-"Dur"-"sus4"--"B5"-"Quinte"-" B6"-"sexte"--"septe" "7"
------C----------Cis-------D-------Dis-----E------F--------Fis-----G--------Gis-----A----------B-------H
Grundton = Grundton + Quinte
////////////////////////////////////////////////////////////////////////////
Wenn ich ein C-Dur Akkord greife(C,E,G) dann muss C-Dur angezeigt werden.
ich habe alle noten auf null gesetzt
int NoteAnAus[12]={0,0,0,0,0,0,0,0,0,0,0,0} ;
wenn die Tasten am Keyboard für NoteAnAus[?] gedrückt wird dann ist
NoteAnAus[?]= 1;// Gedrückt
NoteAnAus[?]= 0;// Losgelassen
Um erst den Grundton zu ermitten habe ich es so gemacht:
//////////////////////////////////////////////////////////////
if(NoteAnAus[0]==1 && NoteAnAus[7]==1) { m_sAkk=("C");}
else if(NoteAnAus[1]==1 && NoteAnAus[8]==1){m_sAkk=("C#");}
else if(NoteAnAus[2]==1 && NoteAnAus[9]==1){m_sAkk=("D");}
else if(NoteAnAus[3]==1 && NoteAnAus[10]==1){m_sAkk=("D#");}
else if(NoteAnAus[4]==1 && NoteAnAus[11]==1){m_sAkk=("E");}
else if(NoteAnAus[5]==1 && NoteAnAus[0]==1){m_sAkk=("F");}
else if(NoteAnAus[6]==1 && NoteAnAus[1]==1){m_sAkk=("F#");}
else if(NoteAnAus[7]==1 && NoteAnAus[2]==1){m_sAkk=("G");}
else if(NoteAnAus[8]==1 && NoteAnAus[3]==1){m_sAkk=("G#");}
else if(NoteAnAus[9]==1 && NoteAnAus[4]==1){m_sAkk=("A");}
else if(NoteAnAus[10]==1 && NoteAnAus[5]==1){m_sAkk=("A#");}
else if(NoteAnAus[11]==1 && NoteAnAus[6]==1){m_sAkk=("H#");}
/////////////////////////////////////////////////////////////////
kann man es einfacher machen ?
wenn ich den Grundton habe und jetz eine der Krakter note dazu gedrückt wird. Muss die Anzeige (Grundton + Karakterton) anzeigen
Grundton = Grundton + Quinte
Karakterton = Alles was zwichen (Grundton + Quinte) ist.
Angenommen wenn C , G und E gedückt wird E=Dur
oder Dis = moll
oder D = sus2
oder Cis = B2
Also wie oben in der Tabelle.
Wie kann ich so was am besten und einfachsten machen?
Für Hilfe jetz schon mal Danke
Grüße Can