Aha, geht schon deutlich besser!
Jetzt habe ich noch versucht, die gefinkelte und absichtlich mit einem Beistrich versehene Akkordfolge[song]F#7, F#maj7 B6[/song]um 8 Halbtöne oder eine kleine Sexte nach unten zu transponieren. Die langen Akkordbezeichnungen hat dein Programm problemlos geschluckt, den Beistrich jedoch nicht:[song][c=#FF0000]F#7[/c], [c=#0000FF]A#maj7 D#6[/c][/song]Die Akkordnamen A#maj7 und D#6 sind zwar grundsätzlich richtig, einfacher zu lesen und somit \"wahrscheinlicher\" wären jedoch die Bezeichnungen mit b, also Bbmaj7 und Eb6.
Noch ein Tipp am Rande:
Das Thema H und B und Bb ist extrem heikel und die durchgehende Verwendung ein- und derselben Bezeichnung in von Otto Normalmusikern erstellten Textdateien ist bei weitem nicht immer gegeben. Außerdem kann es sein, dass dieser B- (oder H-) Akkord im ganzen Stück nur ein einziges Mal vorkommt, wie z.B. die bei Stücken in D# beliebte Schlussakkordfolge B - C# - D#. Im Moment entscheidet sich dein Programm - wie du geschrieben hattest - automatisch für B = Deutsch H, Leute die sich mit # und b nicht recht auskennen und die beiden durcheinander verwenden können in D#-Dur als Dominante jedoch den Bb-Dur Akkord einsetzen und für diesen - nach Deutscher Gewohnheit - ein B hinschreiben. Wofür entscheidest du dich jetzt?
Genau wegen solcher Fälle möchte ich dir empfehlen, Bezeichnungen wie Fis Cis Gis Dis Ais Eis, Es As Des Ges Ces Fes, B anstelle Bb sowie die Kleinbuchstaben und -kombinationen (as a ais b h his ces c cis des d dis es e eis fes f fis ges g gis) völlig außer Betracht zu lassen, weil du mit diesen Bezeichnungen immer wieder auf programmiertechnisch extreme und z.T. wirklich unlösbare Herausforderungen stoßen wirst. Im Moment hast du mit den Kleinbuchstaben für Deutschspachige nur eine Teillösung implementiert. Fis, Es und alle anderen \"ausgeschriebenen\" Akkordnamen funktionieren nämlich nicht. Wenn du diese aber berücksichtigen würdest, wären Textzeilen auch wieder gefährdet, weil \"As\", \"Des\", \"Es\" in Englischen, Bayrischen und Deutschen Texten ganz normale Worte sind. Dazu kommen noch andere Sprachen, in denen solche Buchstabenkombinationen als Text eine Bedeutung haben können.
Ich programmiere auch hin und wieder und weiß, dass ein Programmierer alle Regeln und Ausnahmen im Programmcode logisch beschreiben muss. Mit dem internationalen Akkordbezeichnungssystem würde ich mich aussehen, da lässen sich alle Transponierschritte deutlich und ohne Zweifel definieren. Wenn ich daneben in ein- und demselben Programm auch noch die altbewährte Deutsche Akkordschreibweisen transponieren will kann ich die Regeln und Ausnahmen nicht mehr sauber beschreiben, mein Programm produziert mit Sicherheit Fehler.
Ein Ansatz fällt mir dazu noch ein: Wenn du beide Systeme ermöglichen willst, dann lasse doch die Benutzer wählen, ob sie einen Text mit \"Deutschen\" Akkordbezeichnungen oder einen Text mit \"internationalen\" Akkordbezeichnungen transponieren wollen. Durch diese aktive Wahl deiner User kannst du wenn auch nicht alle, dann aber zumindest ganz viele Fehler von Vorne herein ausschließen.
Gruß,
--
And then one night in desperation, a young man breaks away.
He buys a gun, steals a car, tries to run but he don´t get far in the
GHETTO
GHETTO
|