David, I changed "define" in "define-music-function" and now it works perfectly, thank you David!
I think this is something can be useful to others so I post the new working code: \version "2.19.80" myScore = #(define-scheme-function (music) (ly:music?) #{ \score { $music \layout{} \midi{} } #} ) \myScore {a b c'} Regards, g. On 24 November 2017 at 18:18, David Kastrup <d...@gnu.org> wrote: > Gianmaria Lari <gianmarial...@gmail.com> writes: > > > I'm trying to put the score functionality inside a function (consider it > a > > test). Here it is the code: > > > > \version "2.19.80" > > myScore = > > #(define (music) (ly:music?) #{ > > \score { > > $music > > \layout{} > > \midi{} > > } #} ) > > > > \myScore {a b c'} > > > > > > The code correctly generate a score but it does not generate the midi > file. > > Why??? > > There is a difference between define (which defines a pure Scheme > function or expression) and define-music-function (which defines > something taking arguments in LilyPond syntax and returning a music > expression) and your input is an interesting mashup where \myScore will > probably be left as *unspecified* after you define an argumentless > Scheme function named `music' that first calls ly:music? without > argument and then would return a score if the ly:music? call had not > already caused an error due to a missing argument. > > Now a score is not a music expression anyway, so you should rather > replace define with define-scheme-function here in order to avoid > errors: the resulting \myScore can then return arbitrary expressions > including whole scores. > > -- > David Kastrup >
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user