Mit MuseScore erstellte Griffschrift tönend abspielen
Ich möchte zu meinem Midi-Sequenzer einen Import für Griffschrift (Steirische Harmonika und Schwyzerörgeli) programmieren. Dazu brauche ich MuseScore Dateien für Harmonika. Darin sollte der Noten-Kopf normal oder gekreuzt und die Balg-Information (Druck/Zug) mit Farben gekennzeichnet sein. Dazu gibt es ein Plugin.
Ich hoffe auf eure Unterstützung.
Animationen sind im Anhang
Das Abspielen kann gesteuert werden wie beim Ziachfuchs:
https://www.ziachfuchs.com/sites/default/files/media/zzb-2021.pdf
0: Pause/weiter ebenfalls mit Leertaste
"." (del): die letzten 4 Sekunden zurück gehen
1: Start des Loops
2: Ende des Loops
3: Loop beenden
4: langsamer abspielen
5: schneller abspielen
+, -: Lautstärke
Anhang | Größe |
---|---|
SlowerFaster.ts | 422.27 KB |
Loop.ts | 2.44 MB |
Hansel Walzer.ts | 1.59 MB |
Comments
Bei der Datei SlowerFaster.ts ist etwas schief gelaufen, deshalb hier nochmals.
Für das Vorgehen gibt es verschiedene Möglichkeiten. Die einfachste ist:
Nach der Erstellung der Griff-Partitur, wird sie als "unkomprimierte MuseScore Datei" exportiert. Dann kann man die so erzeugte xml-Datei analysieren (parsen). Dies würde ich gerne als Open-Source-Projekt in Angriff nehmen. Eventuell gibt es so etwa bereits. Als Ausgang wird eine Midi-Datei geschrieben, die nebst den Griffschrift-"Pitches" auch die zusätzlichen Informationen für Noten-Farbe und -Form enthält. Das kann dann leicht in ein Midi-basiertes Programm eingelesen werden.
Eine elegantere Möglichkeit wäre, MuseScore würde dieses Midi-File exportieren. Dies ist der steinige Weg und ich bräuchte von den MuseScore-Entwickler wichtige Hinweise.
Eine Frage: Kann man mit einem Plugin ein von mir benötigte Midi-Datei erstellen?
Antwort auf Bei der Datei SlowerFaster… von jmueller5524
Hey,
ich denke, es ist nicht sehr elegant, einen Parser für MuseScore XML zu programmieren, nur um eine MIDI Datei zu erzeugen. Wenn, dann sollte man den C++ Code von MuseScore wiederverwenden.
Aber viel einfacher ist es doch, den MuseScore MIDI-Export zu verwenden (Datei → Export → MIDI).
Damit kannst du sowohl normale Noten als auch Griffschriftnoten als MIDI exportieren (solange die GS-Noten abspielbar sind). Abspielbare GS-Noten kannst du z.B. mit meinem Plugin erzeugen.
Antwort auf Hey, ich denke, es ist nicht… von nurfz
Die Verwendung des XML Parsers von MS wäre in meinem Fall ein "Overkill": Mein Programm ist in Delphi programmiert mit der VCL-Library, MS verwendet die Qt-Library!
Das mit der MIDI-Datei hast du falsch verstanden. Beim MIDI-Export gehen die Griffschrift-Notationen leider verloren (Stand jetzt). Nur der XML-Export enthält alle Angaben. Die Griffschrift-Notation ist eindeutig, während die klingende Notation nicht eindeutig ist. Man müsste den MIDI-Export von MS erweitern. Das ist mir aber eine Nummer zu gross.
Mit meinem Programm könnte man mit MS erfasste Griffschrift dann klingend, animiert abspielen. Das könnte für Anfänger sehr hilfreich sein.
Aber wie gesagt, um das realisieren zu können bräuchte ich von jemandem ein paar mit MS erfasste Griffschrift.
Antwort auf Die Verwendung des XML… von jmueller5524
> Mein Programm ist in Delphi programmiert mit der VCL-Library, MS verwendet die Qt-Library!
Ich dachte, dir reicht ein separates Programm, das MuseScore XML zu MIDI übersetzt. Dann könnte man das in C++/Qt programmieren. Ansonsten kannst du auch schauen, ob's für Delphi eine MusicXML Parser Library findest. MusicXML kann man von MuseScore und den meisten Notationsprogrammen exportieren.
> Die Griffschrift-Notation ist eindeutig, während die klingende Notation nicht eindeutig ist.
Achso, also dein Programm importiert MIDI, aber das MIDI ist nicht klingend abspielbar sondern "kodierte" Griffschrift? Und für Kreuznoten hast du dann einen zweiten "Channel", oder wie das bei MIDI heißt?
Schreib mir mal ne Mail, dann kann ich dir einen Kontakt geben, der dir vllt ein paar MuseScore-Griffschriftnoten schicken kann. https://ziach.intensovet.de/nn2gs#kontakt
Als einfache Lösung würde ich dann einfach ein MuseScore-Plugin vorschlagen. Das Plugin könnte die markierten Griffschrift-Noten "durch-iterieren" und eine Textdatei rausschreiben, die in einem einfachen, von dir definierten Format, die GS enthält, z.B.:
Zugegeben, bei Polyphonie wird's schwierig, aber das wird bei nem XML-Parser auch kein Spaß.
Ob Zug oder Druck, würde ich anhand der Farbe der Notenköpfe entscheiden. Auf Balken kann ein Plugin meineswissens noch nicht zugreifen. Wie man markierte Noten einsammelt in eine Liste von Akkorden, siehst du hier (Funktion auf jeden markierten Akkord anwenden) und hier (alle markierten Akkorde als Liste zurückgeben). Das mitgelieferte Beispiel-Plugin "Scores to JSON" macht auch schon sowas ähnliches, nämlich Noten als JSON rausschreiben.
Nachteil am Plugin ist natürlich, dass der Benutzer dein Programm und ein Plugin installieren muss, und es dann auch nur für MuseScore geht.
Antwort auf > Mein Programm ist in… von nurfz
Packe diesen Code Schnipsel mal in <xml>...</xml>, und er wird hier im Forum sauber formatiert
Antwort auf Packe diesen Code Schnipsel… von Jojo-Schmitz
Danke für das Angebot, aber ich habe festgestellt, dass dies im MusicXML-Format bereits vorhanden ist.
Das scheint mir die beste Lösung zu sein. Nochmals vielen Dank.
Übrigens, falls du mal weitere Tastenbelegungen/Instrumente integrieren willst, kannst du mal hier schauen. Da gibt's mehrere Steirische und auch ein Schwyzerörgeli als JSON. Vielleicht kannst du das umwandeln in ein Format, das du brauchst.
Da MusicXML-Dateien alle für mich notwendigen Informationen enthält, kann ich auf eine MIDI-File-Zwischenlösung verzichten. Ich werde deshalb MusicXML-Dateien analysieren und einlesen und umgekehrt MusicXML-Dateien erzeugen. Delphi stellt dazu alle Units bereit, die ich benötige.
https://www.musicxml.com/tutorial/
scheint mir ein gutes Einstiegs-Tutorial zu sein.
Antwort auf Da MusicXML-Dateien alle für… von jmueller5524
Cool. Weißt du auch schon, wie du zwischen Zug und Druck unterscheidest?
Antwort auf Cool. Weißt du auch schon,… von nurfz
Ja, durch die Farbe. Diese Information ist im XML-Node "head" enthalten und auch "Kreuz" wird darin als "x" dargestellt.
Antwort auf Cool. Weißt du auch schon,… von nurfz
Es wäre aber auch ein "Pedal"-Strich denkbar.
Antwort auf Es wäre aber auch ein "Pedal… von jmueller5524
Ja, wenn beides möglich wäre, das wäre gut! Aber denk dran, dass es viele Arten von Linien gibt. Und möglicherweise werden diese im MusicXML auch noch unterschiedlich kodiert, je nach Notensatzprogramm(?)
Antwort auf Ja, wenn beides möglich wäre… von nurfz
Ja, es ist beides möglich.
Ich werde mich auf MuseScore beschränken. Diese, von mir erzeugten MusicXML-Dateien, können von LilyPond und dem Capella Reader nicht zufriedenstellend importiert werden. Als Grundlage für meine Programmierung exportierte ich die "Griffschrift-Varianten" als eine MusicXML-Datei.
Ein Beispiel gibt's im Anhang. Man müsste die Balg-Angaben noch richtig setzen.
Ich hab grad den Sequenzer ausprobiert. Du hast geschrieben, es ist egal ob QWERTZ/QWERTY, aber beliebige Tastenlayouts, z.B. Neo geht wohl nicht. Zumindest nicht unter Linux. Aber das ist ein kompliziertes Thema...
Wenn der Sequenzer auch noch ein virtuelles MIDI Gerät wäre, wär das schon praktisch. Dann könnte man in MuseScore übrigens auch direkt Griffschrift eingeben. Den Teil hab ich schon gemacht (getestet mit einer echten Ziachtastatur) ;)
Antwort auf Ich hab grad den Sequenzer… von nurfz
Das sollte nicht sehr schwierig sein. Wenn ich über MIDI vor dem Griffschrift-Notenwert noch Angaben zu Balg und Kreuz senden würde, kannst du das auswerten?
Antwort auf Das sollte nicht sehr… von jmueller5524
Die direkte Griffschrift-Eingabe haben wir schon anders umgesetzt, nämlich über das Drumset-Instrument und ein spezielles Mapping in MuseScore. Im Griffschrift-Modus würde deine Tastatur dann keine Tonhöhen mit irgendwelchen Zusatzinfos (Balg/Kreuz) schicken, sondern die Tastennummern. Hab ich grob hier unter "MIDI-Ziachtasatur" beschrieben. Wir können ja per Mail ins Detail gehen.
github-Projekt: https://github.com/juerg-mueller/MidiSequenzer
Antwort auf github-Projekt: https:/… von jmueller5524
Wow. Mit Pascal. Dachte, seit es von der Uni geflogen ist, stirbt es langsam aus.
Habe selbst vor 25 .. 30 Jahren damit ein bißchen programmiert, allerdings nur Turbopascal (mit gelegentlich etwas Assemblereinbettung). Delphi habe ich dann nicht mehr angefangen. Durch den Wechsel auf Linux bin ich da bei Tcl/Tk (bis heute) gelandet. Für meinen Kleinkram reichen Skriptsprachen, da spare ich mir das compilieren.