Mit MuseScore erstellte Griffschrift tönend abspielen

• Apr 18, 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

Attachment Size
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?

Attachment Size
SlowerFaster.ts 2.58 MB

In reply to by 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.

In reply to by 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.

In reply to by 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.

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) ;)

In reply to by 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.

In reply to by 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.

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