Matrix und DGV

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 116 Antworten in diesem Thema. Der letzte Beitrag () ist von toto.

    Matrix und DGV

    Hallo Comunity,
    mein Vorhaben:

    Ich habe eine Matrix und ein DGV mit Daten gefüllt aus DS. (siehe Bilder)
    Es soll eine Akkorden Transponierung werden.

    Bsp.:
    Wenn ich im DGV folgende Akkorden Hade: C - E - G , Spalte 8 in der Matrix, C-Dur
    Und ich möchte aber es in A-Dur haben, Spalte 11 in der Matrix: A - C# - E.
    Die Daten aus dem DGV werden in Label angezeigt, (die zur Laufzeit erstellt werden)

    So, nach knopf drucken soll aus dem C - E - G in den Label A - C# - E zu lesen sein.
    Die Buttons für das Transponieren sind vorhanden und mit C und A beschriftet.

    Ich bitte um Tipps und Ansätze da ich kein Anfang finde wie ich es machen konnte.
    Vielen Dank im Voraus

    PS:. die Transponierung soll nur zur Laufzeit stattfinden und Das DGV soll die oreiginal Daten erhalten.
    Bilder
    • DGV.jpg

      15,25 kB, 162×490, 116 mal angesehen
    • Matrix.jpg

      40,48 kB, 947×192, 113 mal angesehen
    lg toto
    @toto Fang an mit Daten zu arbeiten, nicht aber mit zusammengesetzten Zeichen, die einen Akkord beschreiben.
    Mach Dir eine Klasse Akkord, wo jeder beliebige Akkord durch genau zwei Werte beschrieben wird:
    • Die Menge der zum Akkord gehörenden Töne (Griff auf der Gitarre, Klavier, ...)
    • der Grundton.
    Eine Transponierung wäre dann lediglich die Addition eines Wertes auf den Grundton.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Rod OK! falsch erklärt!

    Ich Möchte lediglich im DGV nur den erste Buchstabe ersetzen ( weil auch wenn der Akkord, Bsp.: Cmaj7 heißt nach der Transponiereung heißt dann Bsp.; Amaj7) Das heißt alle akkorden verändern den erste Buchstabe, der Rest bleibt. Nur zu Klärung.

    Kannst du dich erinnern: die Daten im DGV werden an Labels weitergegeben, ich konnte in der Datenbank jader Titel in 15 Tonarten speichern, dann aus der Button Beschriftung die entsprechende Tonart laden. Das ist das einzige was mir im Sinne gekommen ist.
    Ist aber eine riesege arbeit für alle Titel so was zu schreiben.

    Mein Vorhaben wäre es zu automatisieren, und du hast Recht erste evtll. die Daten in eine ListOf.
    ....und wie hole ich mir die Daten aus der Matrix bzw. wie vergleiche ich sie? Mit "compare"?
    lg toto

    toto schrieb:

    Cmaj7 heißt nach der Transponiereung heißt dann Bsp.; Amaj7)
    Ist ja genau das, was ich gemeint habe. :D
    Du solltest dann eine interne Beschreibung in Form einer kleinen eigenen Klasse machen, die aus den Werten Grundton und Akkord besteht, deren String-Repräsentationen z.B. "C" und "maj7" sind, die kannst Du dann per .ToString() abrufen.
    Instanzen davon kannst Du dann in eine List(Of MyAkkord) packen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @toto Wie werden bei Dir eigentlich die Oktaven unterschieden?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo Rod
    hier geht es um Akkorden nicht um Tonleiter.
    Bei der Tonleiter hast:

    C ' D E F G A B C ' ' (C1 bis C2)
    Bei der Gitarre anders als beim Klavier da hier die C Tonleiter bis C ' ' ' ' ' (C5, glaube ich) NEIN, habe aufn Klavier meiner Tochter geschaut: bis C7 spricht 7 oktave.

    Mir geht es darum die akkorden in halbtonschritt zu transponieren, wenn ich zB.: Cmaj7 habe, auf button click wird:
    C#maj7 - Dmaj7 - D#maj7 - Emaj7 - Fmaj7 - F#maj7 usw.
    Der maj7 bleibt bei alle Akkorden gleich.
    Nur der erste Buchstabe ändert sich.
    Das heißt je nach Tonlage kann ich ein Titel transponieren
    Ich hoffe du verstehst das, wenn nicht frage bitte nach.

    LG
    lg toto

    toto schrieb:

    hier geht es um Akkorden nicht um Tonleiter.
    Cmaj7
    Ist das C, C', C'', C''' :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    OK!
    Du kannst mir was in Vb:Net beibringen und ich bringe dir Musik bei.

    Tonleiter:
    C D E F G A B
    1 2 3 4 5 6 7

    ein Akkrd besteht aus töne aus derTonleiter
    C bestegt aus den 1 3 5 Ton also C E G
    Cmaj7 besteht aus den 1 3 5 7 Ton C E G B

    Das sind Akkorden zusammengesezte Töne
    Eine Melodie besteht aus einzelne Töne

    LG

    PS: ich bin mit meinem Programm ganz gut weiter gekommen
    lg toto

    toto schrieb:

    und ich bringe dir Musik bei.
    :D
    Bei mir geht die (chromatische) Tonleiter so:
    C,Cis,D,Dis,E,F,Fis,G,Gis,A,Ais,H,C'
    bzw.
    C',H,B,A,As,G,Ges,F,E,Es,D,Des,C
    So was müsste eigentlich in Deinem Programm berücksichtigt werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich schicke dir ein neues Bild.

    Es geht darun: wenn ein Titel in C Dur geschrieben ist (Spalte 8) und ich will ihn aber in E Dur (Spalte 12)
    du siehst den Unterschied an den Töne.

    C Dur - C D E F G A B , beim transponieren in E Dur die Töne ändern sich folgendermaßen:
    E Dur - E F# G# A B C# D#

    Das Heißt (so stell ich mir das vor)
    15 Button mit der jeweilige Tonart Benennung
    Beim click auf ein Button sollen die Töne so geändert werden laut button Beschriftung.

    Das ist für mich nur noch im Kopf, wie ich es realisieren kann, im moment kein Plan.

    LG
    Bilder
    • 1.jpg

      45,87 kB, 931×227, 97 mal angesehen
    lg toto
    Sowas?
    Spoiler anzeigen

    C#-Quellcode

    1. public struct Note
    2. {
    3. private static readonly Dictionary<int, string> noteNames = new Dictionary<int, string>()
    4. {
    5. { 0, "C" },
    6. { 1, "C#/Db" },
    7. { 2, "D" },
    8. { 3, "D#/Eb" },
    9. { 4, "E" },
    10. { 5, "F" },
    11. { 6, "F#/Gb" },
    12. { 7, "G" },
    13. { 8, "G#/Ab" },
    14. { 9, "A" },
    15. { 10, "A#/Bb" },
    16. { 11, "B" }
    17. };
    18. public int Index { get; set; }
    19. public override string ToString()
    20. {
    21. return noteNames[Index];
    22. }
    23. public Note(int index)
    24. {
    25. Index = index;
    26. }
    27. public static implicit operator int(Note d) => d.Index;
    28. public static implicit operator Note(int i) => new Note(i);
    29. }

    C#-Quellcode

    1. List<Note> cmaj7 = new List<Note>() { 0, 4, 7, 11 };
    2. var amaj7 = cmaj7.Select(n => (Note)((n + 9) % 12));
    3. Console.WriteLine(string.Join(" ", cmaj7));
    4. Console.WriteLine(string.Join(" ", amaj7));

    Wenn du um einen Ton transponierst, rechnest du einfach +1. Am Ende einmal Modulus 12, damit du wieder von vorne anfängst.
    Hallo Gonger96,
    ich werde es in Vb.Net konvertieren und ausprobieren.
    Ich melde dann hier noch.

    Aber zunächst Danke

    LG


    Hallo Gonger96, habe den Converter von RodFromGermany genommen "Error Converting Code"
    ...und Ich kann leider keinC#....


    lg toto

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „toto“ ()

    toto schrieb:

    ...und Ich kann leider keinC#....
    ist die Ausrede, die wir hier nicht akzeptieren.
    Verwende einen Konverter.
    @Gonger96 Das MOD 12 genau ist es, was bei einer Melodie fehlschlägt, wenn durch das Transponieren die Oktave verlassen wird, da machst Du einen nicht gewollten Oktavsprung zurück in die eine Oktave.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Ich dachte hier geht es um Akkorde. Da ist egal wie viele Oktavtöne vorhanden sind bzw. in welcher Oktave der Akkord sich befindet. Bei einer Melodie muss aber trotzdem % 12 genommen werden. Ich würde hier die Oktave als separate Property ausführen. Das ist eigentlich der klassische Einsatz für Modulus & Integer-Division bzw. Math.DivRem.
    @toto Dann funktioniert das so (oben wird zu unten transponiert, die Vorzeichen hab ich mal weggelassen):

    Ansonsten ist die Lösung von @Gonger96 das, was mir vorschwob.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    toto schrieb:

    Fehler über Fehler die ich nicht beheben kann.
    Mit welchem Studio und mit welchem Framework arbeitest Du?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!