Hi,
ich möchte eine Funktion schreiben, die als Parameter eine Dauer und einen musikalischen Ausdruck enthält. Gedacht ist an eine Folge von Noten ohne Dauerangabe, der eine Dauer zugewiesen werden soll.
Folgendes funktioniert nicht:
\version "2.19.80"
myMus = { c e f }
myDur =
#(define-music-function (d music)(ly:duration? ly:music?)
#{
<>$(ly:duration->string d) $music
#}
)
\myDur #(ly:make-duration 4) \myMus
Ich erhalte als Fehlermeldung
Warnung: Nicht-musikalischer Ausdruck wird ignoriert
<>
$(ly:duration->string d) $music
Ich nehme an, das kommt daher, dass ein String keine zulässige Angabe einer Notendauer ist. Ich habe keine passende Funktion gefunden, die eine zulässige Notendauer erzeugt, wie muss ich die Funktion formulieren? Vll. gibt es ja eine ganz andere Lösung,
Danke für eure Unterstützung
Hallo Manuela,
offensichtlich versuchst Du die gerade gültige default Dauer zu beeinflussen.
LilyPond setzt diese ja auch immer auf den zuletzt gesehenen Wert, ich weiß aber nicht wie und wo das geschieht und wie man das dann auslesen kann.
Insofern hier ein anderer Ansatz, der die Notenwerte getreu der Eingabe neu setzt.
Die Eingabe kann in ly-Syntax einfach als Notenwert erfolgen.
\version "2.19.82"
myMus = { c e <f a> }
myDur =
#(define-music-function (d music)(ly:duration? ly:music?)
(map-some-music
(lambda (m)
(and (music-is-of-type? m 'rhythmic-event)
(begin
(ly:music-set-property! m 'duration d)
m)))
music))
\myDur 8. \myMus
Gruß,
Harm
Danke Harm, genau so etwas habe ich gesucht,