Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: erich am Mittwoch, 13. Mai 2015, 14:55
-
In einer Diskussion zwischen stefanhuglfing und harm6
https://liarchiv.joonet.de/index.php?topic=1719.msg9529#msg9529 (https://liarchiv.joonet.de/index.php?topic=1719.msg9529#msg9529)
stieß ich auf den Schnipsel
\version "2.18.2"
Tondauer =
#(
define-music-function (parser location dauer) (integer?)
(
let ((dur (ly:make-duration (ly:intlog2 dauer) 0 1 1)))
(if (< dauer 20) #{ b' $dur #} #{ b'16 #} )
)
)
\Tondauer 20
den ich nicht so richtig verstand.
Die Frage, die sich mir stellte, war:
wenn im obigen Zusammenhang #{ b'16 '#} koorekt ist, warum nicht auch #{ b' $dauer #}?
Jedenfalls führt es zu einem Fehler.
Es gibt zwei korrekte Lösungen
1.
\version "2.18.2"
Tondauer =
#(
define-music-function (parser location dauer) (integer?)
#{ b' $(make-duration dauer #}
)
{\Tondauer 0
\Tondauer 1
\Tondauer 2
\Tondauer 3
\Tondauer 4
\Tondauer 5
\Tondauer 6
\Tondauer 7
\Tondauer 8}
wobei zum letzten Fall die Warnung: "Fähnchen »flags.d8« nicht gefunden" ausgegeben wird
(http://beispiel_1.png)
2.
\version "2.18.2"
Tondauer =
#(
define-music-function (parser location dauer) (integer?)
#{ b' $(ly:make-duration (ly:intlog2 dauer)) #}
)
{\Tondauer 1
\Tondauer 2
\Tondauer 3
\Tondauer 4
\Tondauer 5
\Tondauer 6
\Tondauer 7
\Tondauer 8}
(http://beispiel_2.png)
-
Lieber Erich
grossartig! Ich wollte schon lange im Forum fragen, wieso $duration nicht funktioniert, und was man dagegen machen kann. :)
Danke und lieber Gruss
Eugenio
-
Lieber Erich,
ich habe gerade deine Beispiele in 2.19.20 ausprobiert. Die erste deiner korrekten Lösungen läuft nicht sondern erzeugt einen Fehler
../document.ly:5:3: Fehler: GUILE signalisierte einen Fehler für den hier beginnenden Ausdruck
#
(
Mit deiner zweiten Lösung bekomme ich deine zweite Beispielgrafik reproduziert.
Liebe Grüße,
Michael
-
Hallo Michael,
ich war verreist, darum erst jetzt die Antwort:
\version "2.18.2"
Tondauer =
#(
define-music-function (parser location dauer) (integer?)
#{ b' $(ly:make-duration dauer) #}
)
{\Tondauer 0
\Tondauer 1
\Tondauer 2
\Tondauer 3
\Tondauer 4
\Tondauer 5
\Tondauer 6
\Tondauer 7
\Tondauer 8}
Ja, der Code enthielt einen Fehler in der 6. Zeile
Gruß
Erich