Autor Thema: Mehrtaktpause mit Arithmetik  (Gelesen 693 mal)

Arnold

  • Gast
Mehrtaktpause mit Arithmetik
« am: Montag, 6. März 2017, 09:58 »
Hallo.

\scaleDurations #`(,(+ 5 12 11 9 13 8 4) . 1) R1So sieht es aus, wenn ich beim Abschreiben von Einzelstimmen aus einer Partitur zu faul bin, immer die Pausenlänge im Kopf aufzuaddieren und dann die Zahl nach dem Multiplikaitonszeichen abzuändern. Und ich war auch zu faul, eine eigene music-function zu definieren.

Kennt jemand eine kürzere Schreibweise für direkt eingebunde Scheme-Arithmetik für die Noten- bwz. Pausendauer, »R1*#(+ 5 12)« funktioniert meines Wissens nicht.

Arnold

fugenkomponist

  • Gast
Re: Mehrtaktpause mit Arithmetik
« Antwort #1 am: Montag, 6. März 2017, 11:13 »
Viel kürzer gehts nicht, weil das Konstrukt R1.*5/2 etc. fest in der LilyPond-Syntax drin ist (genauer gesagt besteht eine Dauer aus einer Zweierpotenz oder einem der Strings "\breve", "\longa", "\maxima", dann optional einem oder mehreren Punkten und dann optional eine oder mehrere Ganzzahlen oder Brüche, die per "*" angehängt werden. \breve...*5/2*4*5*3/7 wär also eine gültige Dauer; Addition ist da aber nicht vorgesehen).

Zwei Möglichkeiten, die mir grade einfallen:

1. Doch ne music-function schreiben und dabei gleichzeitig noch syntactic sugar aus 2.19 verwenden, um die Listen kürzer zu schreiben. Hier zwei Versionen, die erste ist weniger Tippaufwand, eignet sich aber nur, wenn du über das ganze Stück die gleiche Taktart hast (hier im Beispiel Taktlänge 1, lässt sich aber in der Musikfunktion anpassen), die zweite multipliziert die Summe ganzer Zahlen mit der danach angegebenen Dauer.
\version "2.19.56"

summenPause =
#(define-music-function (liste) (list?)
   #{
     \scaleDurations #(cons (fold + 0 liste) 1) R1
   #})

summenPauseII =
#(define-music-function (liste dauer) (list? ly:duration?)
   #{
     \scaleDurations #(cons (fold + 0 liste) 1) R $dauer
   #})


\new Staff {
  \summenPause 1,2,3
  \bar "||"
  \summenPauseII 1,2,3 1
  \time 3/4
  \summenPauseII 1,2,3 2.
  \time 5/4
  \summenPauseII 1,2,3 4*5
}
Ergebnis siehe Anhang.

2. Ich arbeite gerade bei Ensemble-Sachen, aber auch bei Klavier (wo man ja mehrere Stimmen hat) mit meinen Funktionen \alignTo und \until, zu finden in diesem Post. Bin mir grad nicht sicher, ob das die aktuelle Version ist oder ob ich danach noch was dran verändert hab, falls dich das interessiert, kann ich dir die aktuelle Version zukommen lassen.
Die Idee dabei ist, in einer globalen Stimme, wo Dinge wie \tempo, \mark, \key, \time, \bar etc. stehen, „Ankerpunkte“ zu setzen (z. B. \anchor "2. Thema" oder \anchor "Ziffer D"), zu denen man dann in den Stimmen per \until hinspringen kann; dabei kann man sowohl unsichtbare als auch Mehrtakt-Pausen verwenden (theoretisch auch Noten (Orgelpunkte), die werden aber ja nicht automagisch aufgeteilt wie Mehrtaktpausen): s \until "2. Thema" oder R \until "Ziffer D".

Eigentlich könnte ich daraus mal ein openlilylib-Snippet o. ä. machen; dafür bräuchts vielleicht noch etwas Überarbeitung.
« Letzte Änderung: Montag, 6. März 2017, 11:17 von fugenkomponist »