Liebe alle
ich habe mich jetzt wieder beschlossen mich mit Scheme zu befassen, und dank die
Posts von Harm und
dieser Artikel konnte ich beginnen, und etwas basteln.
Was ich machen möchte ist folgendes:
in Chor- und Orchesterpartituren, gruppiere ich falls nötig die Takte in Gruppen, und schreibe, wie ich sie dirigieren muss. Z.B.: ein schneller Stück in 3/8, wo die Gruppierung klar 3 + 3 + 4 ist (in Vivaldi gibt es oft solche komische Gruppierungen) dirigiere ich in eins, aber die Geste ist zweimal ein dreier und dann ein vierer. Ich weiss nicht, ob verständlich ist.

Ich zeichne oben an der Partitur die Grafik der Bewegung, wenn die Gruppe sich ändert, und wollte versuchen, dasselbe mit Lilypond zu machen.
Ich habe folgendes gebastelt:
\version "2.18.2"
vierviertel =
#'((moveto 0 0)
(curveto 0 0 -0.5 4 -4 4)
(lineto 4 4)
(curveto 4 4 0.5 4 0 8)
(closepath))
dreiviertel =
#'((moveto 0 4)
(curveto 0 4 -0.5 -4 -4 -4)
(curveto -4 -4 0.5 -.5 4 -4)
(curveto 4 -4 -0.5 -.5 0 4)
)
zweiviertel =
#'((moveto 0 4)
(curveto 0 4 0.5 -4 2 0)
(curveto 2 -3 -1 -4 0 4)
)
vier = \markup {
\path #0.25 #vierviertel
}
drei = \markup {
\path #0.25 #dreiviertel
}
zwei = \markup {
\path #0.25 #zweiviertel
}
writeMeasure = #(define-music-function (parser location measure shape)
(number? number?)
(if (= 0 measure)
; wenn keine Takte mehr, end Schleife
#{ #}
; sonst einen Takt schreiben
; und wenn die Gruppe fertig ist
; einen dicken Taktstrich setzen
#{ s1
#(set! measure (- measure 1))
#(if (= 0 (remainder measure shape))
#{
\once \override Staff.BarLine #'hair-thickness = #7
#})
\writeMeasure #measure #shape
#}
)
)
setGroup = #(define-music-function (parser location measure shape)
(number? number?)
; rechnet wieviele Takte man schreiben muss.
; 3 Gruppen à 2 Takte -> 6 Takte
(set! measure (* shape measure))
(cond
((= 2 shape) #{ \mark \zwei \writeMeasure #measure #shape #})
((= 3 shape) #{ \mark \drei \writeMeasure #measure #shape #})
((= 4 shape) #{ \mark \vier \writeMeasure #measure #shape #})))
structure = {
\setGroup #3 #2
\setGroup #1 #4
}
music = \relative c' {
\repeat unfold 40 { c8 d8 }
}
\score {
\new Staff {<< \music \structure>>}
}
Jetzt: mir ist absolut klar, dass dieser Code lächerlich ist, und gar nicht schön. Ich bin aber am lernen, und werde es dann optimieren.
Meine Frage ist aber:
in der Zeile 34 schreibe ich
#{ s1und Lilypond setzt ganz brav einen leeren Takt mit einer ganzen unsichtbaren Pause.
Wenn aber das Stück in einem anderen Metrum wäre, wie kann ich Lilypond sagen "schreib eine Pause, die den Takt füllt"? Sprich: in 3/8
s4. oder so.
Gibt es eine
getTimeSignature-Funktion?
Wie geschrieben: der Code ist sicher furchtbar, ich weiss vieles noch nicht, ich werde ihn aber schon in Ordnung bringen.
Danke vielmals für eure Hilfe und einen schönen Abend
Eugenio