Hallo,
Geht der Datentyp "pair" vielleicht gar nicht innerhalb von lilypond?
Oder kann ich irgendwie den zweiten Wert als "ly:duration" festlegen?
In Deiner ersten Funktion taucht der Notenwert, 8 für die achtel,
innerhalb von LilyPond auf. Er wird deshalb als achtel, ohne Punktierung und ohne Skalierung verstanden.
In Deiner zweiten Funktion taucht die 8 innerhalb des scheme-Datentyps pair auf und wird deshalb als
Zahl verstanden, und
nicht als Notenwert.
Du kannst einen Notenwert draus machen, indem Du ein paar vordefinierte proceduren benutzt, den dot-count und 'duration factor' festlegst, wobei das allerdings optional ist.
Das führt zu:
\version "2.18.2"
ph = #(define-music-function (parser location zd) (pair?)
(let ((dur (ly:make-duration (ly:intlog2 (cdr zd)) 0 1 1)))
;(write dur)
#{
{
\repeat unfold #(car zd) { b' $dur }
}
#}))
\ph #'(12 . 8)Du wirst aber Schwierigkeiten bekommen, falls Du punktierte bzw skalierte Notenwerte (Triolen etc) benutzen willst.
HTH,
Harm