Autor Thema: Scheme-Funktionen  (Gelesen 1437 mal)

erich

  • Member
Scheme-Funktionen
« am: Mittwoch, 13. Mai 2015, 14:55 »
In einer Diskussion zwischen stefanhuglfing und harm6
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



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

  • Member
Re: Scheme-Funktionen
« Antwort #1 am: Mittwoch, 13. Mai 2015, 18:11 »
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

  • Member
Re: Scheme-Funktionen
« Antwort #2 am: Donnerstag, 21. Mai 2015, 10:15 »
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

  • Member
Re: Scheme-Funktionen
« Antwort #3 am: Samstag, 23. Mai 2015, 21:22 »
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