Steirische Harmonika von Tonal in Griffschrift übersetzen

Begonnen von Multimax, Donnerstag, 7. Juni 2018, 17:33

« vorheriges - nächstes »

Multimax

Hallo zusammen,

wenn man nach der Griffschrift für Steirische sucht, gibt es ja schon einige Versuche, die aber nur das Layout betreffen. Angeregt durch diesen Beitrag: https://www.musiker-board.de/threads/griffschrift-lilypond-prototyp-zum-advent.556783/
der leider keinen Code, aber ein sehr vielversprechendes Konzept enthält, habe ich beschlossen, selbst einen Übersetzungsalgorithmus zusammenzuzimmern und dieses Konzept umzusetzen. Es stammt, wie gesagt, nicht von mir, sondern vom User Be-3.

Mit Hilfe aus diesem Forum (dank Harm6 und anderen) ist mir das auch einigermaßen gelungen.

Ziel: Noten in Klangschrift eingeben - Griffschrift rausbekommen. Der Code und ein Bild folgt im nächsten Beitrag.

Mir ist klar, dass ich als totaler Laie keinen effizient-eleganten Code gezaubert habe. Zudem betrifft es auch nur den Diskant. Was das Layout und Bass-Seite angeht, gibt es im Archiv schon einige interessante Beiträge. Vielleicht könnte man mein Konstrukt ja damit verbinden...

Aber nun zur Erklärung:
Mein Code beginnt ab Zeile 90. Vorher ist ein Snippet zum Notenköpfe auf die andere Halsseite Verschieben reinkopiert.
Am Anfang ab Z.90 erfolgt die Definition der Belegung meiner Steirischen: 4-Reihig, B-Es-As-Des. Diese kann einfach auf die jeweilige Stimmung und belegung angepasst werden.


Die folgenden Überschriften der kurzen Erklärung entsprechen jenen aus dem angehängten PDF (im nächsten Beitrag).

1. Tonal
Ich habe die ersten Takte von La Paloma eingegeben, ganz normal in Es Dur. Plus noch ein e um etwas zu demonstrieren.

2. alles auf Druck
Mit dem Befehl \druck starte ich den Ablauf für den Druck-Modus (Druck, wegen "Balg zudrücken").
Zuerst wird  geprüft, ob auf der ganzen Harmonika (auch auf Zug) der Ton überhaupt vorhanden ist. Wenn nicht, wird der Ton rot und Ende, wie beim e am Ende der Zeile.
Wenn der Ton vorhanden ist, wird geprüft, ob er auf Druck vorhanden ist. Wenn nicht, muss er ja auf Zug vorhanden sein -> der Ton wird Lila und Ende.
Ist der Ton auf Druck vorhanden, wird geprüft, ob er mehrmals vorhanden ist. Wenn ja, wird der Ton blau und Ende.
Wenn er nur einmal vorhanden ist, kann die Griffschrift geschrieben werden:
Dazu wird zuerst geprüft, in welcher Reihe er vorhanden ist und anschließend auf welcher Position. Ahand dieser Info wird der NoteHead per Y-Offset entsprechend verschoben.  - Fertig.
Jetzt kann man erstmal erkennen:
Rote Töne: Nicht möglich -> Stück umschreiben
Blaue Töne:  nicht eindeutig -> Selbst eine Reihenvorgabe machen
Schwarze Töne: eindeutig und schon in Griffschrift gesetzt.
Lila Töne: nur auf Zug vorhanden: -> schauen, ob Zug-Modus möglich ist.

3. Alles auf Druck mit Reihenwahl
Mit Stringnumbers kann ich nun die Reihenvorgaben machen, und der Ton wird auf der gewünschten Reihe in Griffschrift geschrieben, sofern er dort vorhanden ist. Ein Akkord ist jedoch noch Lila, also weiter:

4. Druck Zug Druck
Den einen Lila-Akkord in Zug ändern, (mit dem Befehl \zug, womit der gleiche Algorithmus wie beim Druck, nur umgekehrt für Zug ausgelöst wird). Es ist spieltechnisch jedoch unvorteilhaft, nur für ein Achtel kurz auf Zug zu wechseln. Deshalb weiter schauen, ob man nicht gleich auf Zug beginnt.

5. Zug Druck und 6. Zug Druck Reihenwahl
Hier habe ich Planung der Griffe und Balgwechsel nun umgesetzt
EDIT: bei der blauen ganzen Note, hab ich die Reihenangabe vergessen. Ist kein Fehler im Code.

7. Zug Druck Zug mit Notehead tweak
Hier habe ich noch die Stringnumers aus der Grafik entfernt und mit hilfe eines Snippets einen Notenkopf auf die andere Hals-Seite gesetzt.

Fazit:
Diese Arbeitsweise entspricht in etwa derjenigen, die man auch beschreitet, wenn man plant, ein Stück fürs Instrument umzusetzen. Hier entfällt aber das manuelle Transkibieren per Tabelle, und man kann schnell die verschiedenen Möglichkeiten testen.

To-Dos, Baustellen.

1. Der Code funktionert erstmal, ist aber wie gesagt von mir als Laien zusammengebastelt. Da gibt es sicherlich noch Optimierungspotential. Vielleicht auch Fehler, die ich noch nicht bemerkt habe.

2. Die Bass-Seite ist noch nicht umgesetzt.

3. Die alternative Darstellung der 3. und 4. Reihe durch klassische Notenköpfe mit Kreuzen nebendran ist nicht umgesetzt.

4. Die Striche für die Passagen auf Druck sind nicht automatisiert, ich habe sie per hairpins mit 0er-Dicke händisch eingesetzt. Hierbei überlege ich, wie man das automatisieren kann. Vielleicht aus der Notengruppe, die mit dem Druck-Befehl umschlossen ist, das erste element mit \> versehen und das letzte mit \!. Dann bliebe aber das Problem, das keine einzelnen Noten einen Druck-Strich bekommen könnten. Weiterhin müsste man auch überlegen, wie sich ein dynamic Staff mit den Elementen Der Bass-Seite verträgt (Buchstaben, Alternativnoten... Abstände). Für die Bass-Seite gibt es hier https://archiv.lilypondforum.de/index.php/topic,1729.0.html schon schöne Möglichkeiten.

Gesamtfazit.
Warum schreibe ich das alles? Für mich habe ich erstmal ein großes Ziel erreicht und mit sehr viel Arbeit etwas erzeugt, mit dem ich erstmal arbeiten kann. Aber so langsam geht mir auch die Luft aus.  Oder sagen wir mal, ich brauche erstmal ne Pause :)

Ich hoffe natürlich insgeheim, dass  andere Griffschrift-Interessierte vielleicht Lust bekommen, eine der vielen Baustellen anzugehen. Und eventuell könnte sich ja später mal
ein vollständiges Griffschrift-Konzept mit Diskant- und Bass-Seite ergeben. :)

Nächster Beitrag: Code und Bild


Multimax


georgfx

Hey Multimax

Ich versuche gerade Deine Datei 4.ly für Steirische zum Laufen zu bringen, scheitere aber eins ums andere Mal an folgendem Fehlercode:

Starte lilypond.exe 2.24.1 [4.ly]...
»C:/Users/Landendinger/Downloads/4.ly« wird verarbeitet
Analysieren...ERROR: In procedure ly:music-property:
In procedure ly:music-property: Wrong type argument in position 1 (expecting Music): #<unspecified>
Wurde mit dem Return-Code 1 beendet.

Mache ich was verkehrt oder gibt es eine neuere Version, die vllt. schon perfekt funktioniert.

Vielen Dank
Georg

harm6

Hallo,

folgender Minimal-Code wirft in 2.24. einen Fehler aus:
tst =
#(define-music-function (parser location music) (ly:music?)
  (music-map
    (lambda (m) (if (music-is-of-type? m 'note-event) m))
    music))
   
\tst { b-2 }
da die procedure die music-map über music laufen lässt, unspecified zurückgibt sobald kein note-event vorliegt.
2.18. hatte wohl in diesem Fall m als fall-back genommen.
Das jetzige Verhalten ist allerdings logischer.

In 4.ly kommt dieser Sachverhalt an zwei Stellen zum tragen: griffschrift_autod und griffschrift_autoz.
Gebe dort für nicht-note-events m zurück.
Allerdings werden Saitennummern nun magenta, da music-map nicht vom weiteren rekursieren abgehalten werden kann.
Insoweit solltest Du prüfen ob map-some-music oder for-some-music nicht eine bessere Wahl ist.

Aber bitte räume den Code auf:
- Formatierung und Indentation ist grauenhaft ;)
- viele, viele Setzungen von (and ...) bzw (begin ...) sind schlichtweg überflüssig
- ...

HTH,
  Harm