Mit MuseScore erstellte Griffschrift tönend abspielen

• 18. Apr 2021 - 12:16

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

Download: http://juerg5524.ch/temp/midi-sequenzer.zip

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?

Anhang Größe
SlowerFaster.ts 2.58 MB

Antwort auf 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 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 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.:

<  //  <-- erster akkord (wie bei LilyPond)
{midi-pitch} x    // <-- kreuznote
{midi-pitch}    // <-- keine kreuznote
>  {midi-duration}  // <-- dauer des akkords
<
...
>  {midi-duration}

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.

Ü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.

Do you still have an unanswered question? Please log in first to post your question.