• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

Scheme-Funktionen

Begonnen von erich, Mittwoch, 13. Mai 2015, 14:55

Vorheriges Thema - Nächstes Thema

erich

In einer Diskussion zwischen stefanhuglfing und harm6
https://archiv.lilypondforum.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



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}





iugin

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

mgd

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

erich

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