Re: concatenating notes with a music expression
On 15 May 2018 at 15:45, David Kastrup wrote: > Gianmaria Lari writes: > > > On 15 May 2018 at 12:10, David Kastrup wrote: > > > >> Malte Meyn writes: > >> > >> > Am 15.05.2018 um 10:27 schrieb Gianmaria Lari: > >> >> Thank you Gilles I have yet a problem, how can engrave the foo > >> >> generated list in a score? > >> > > >> > You should make a music-function: > >> > > >> > \version "2.19.81" > >> > > >> > foo = > >> > #(define-music-function (seq1 seq2) (ly:music? ly:music?) > >> >(make-sequential-music > >> > (map (lambda (note) > >> >(make-sequential-music > >> > (cons note (ly:music-property seq2 'elements > >> > (ly:music-property seq1 'elements > >> > > >> > seqI = { c b a } > >> > seqII = { f g } > >> > > >> > \foo \seqI \seqII > >> > >> Nope. You need to write > >> > >> (ly:music-deep-copy (ly:music-property seq2 'elements)) > >> > >> instead of > >> (ly:music-property seq2 'elements) > > [...] > > > David I copied and pasted you code but it didn't compile. I changed > > ly:music-properties to ly:music-property but it doesn't compile anyway. > > Well, I used music-clone instead of ly:music-deep-copy for 'elements and > the former cannot deal with a list. Sorry for that. Try fixed :) Thank you David it works perfectly. I have one more question about how to split it in multiple score. But I'll open another thread. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: concatenating notes with a music expression
Gianmaria Lari writes: > On 15 May 2018 at 12:10, David Kastrup wrote: > >> Malte Meyn writes: >> >> > Am 15.05.2018 um 10:27 schrieb Gianmaria Lari: >> >> Thank you Gilles I have yet a problem, how can engrave the foo >> >> generated list in a score? >> > >> > You should make a music-function: >> > >> > \version "2.19.81" >> > >> > foo = >> > #(define-music-function (seq1 seq2) (ly:music? ly:music?) >> >(make-sequential-music >> > (map (lambda (note) >> >(make-sequential-music >> > (cons note (ly:music-property seq2 'elements >> > (ly:music-property seq1 'elements >> > >> > seqI = { c b a } >> > seqII = { f g } >> > >> > \foo \seqI \seqII >> >> Nope. You need to write >> >> (ly:music-deep-copy (ly:music-property seq2 'elements)) >> >> instead of >> (ly:music-property seq2 'elements) [...] > David I copied and pasted you code but it didn't compile. I changed > ly:music-properties to ly:music-property but it doesn't compile anyway. Well, I used music-clone instead of ly:music-deep-copy for 'elements and the former cannot deal with a list. Sorry for that. Try \version "2.19.81" foo = #(define-music-function (seq1 seq2) (ly:music? ly:music?) (set! (ly:music-property seq1 'elements) (map! (lambda (note) (music-clone seq2 'elements (cons note (ly:music-deep-copy (ly:music-property seq2 'elements) (ly:music-property seq1 'elements))) seq1) seqI = { c b a } seqII = { f g } {\foo \seqI \seqII} -- David Kastrup ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: concatenating notes with a music expression
On 15 May 2018 at 12:10, David Kastrup wrote: > Malte Meyn writes: > > > Am 15.05.2018 um 10:27 schrieb Gianmaria Lari: > >> Thank you Gilles I have yet a problem, how can engrave the foo > >> generated list in a score? > > > > You should make a music-function: > > > > \version "2.19.81" > > > > foo = > > #(define-music-function (seq1 seq2) (ly:music? ly:music?) > >(make-sequential-music > > (map (lambda (note) > >(make-sequential-music > > (cons note (ly:music-property seq2 'elements > > (ly:music-property seq1 'elements > > > > seqI = { c b a } > > seqII = { f g } > > > > \foo \seqI \seqII > > Nope. You need to write > > (ly:music-deep-copy (ly:music-property seq2 'elements)) > > instead of > (ly:music-property seq2 'elements) > > here or you'll get surprising results whenever the result is changed in > place (like when transposing the result). > > Incidentally, it might make sense to write instead > > foo = > #(define-music-function (seq1 seq2) (ly:music? ly:music?) > (set! (ly:music-properties seq1 'elements) > (map! (lambda (note) > (music-clone seq2 > 'elements (cons note (music-clone (ly:music-property seq2 > 'elements) > (ly:music-property seq1 'elements))) > seq1) > > That will take the structure of the respective sequences as templates, > so you can use <<...>> instead of {...} for either and have this > reflected in the result. Also <...> though that will make sense only > for the inner structure. > David I copied and pasted you code but it didn't compile. I changed ly:music-properties to ly:music-property but it doesn't compile anyway. This is the complete code: \version "2.19.81" foo = #(define-music-function (seq1 seq2) (ly:music? ly:music?) (set! (ly:music-property seq1 'elements) (map! (lambda (note) (music-clone seq2 'elements (cons note (music-clone (ly:music-property seq2 'elements) (ly:music-property seq1 'elements))) seq1) seqI = { c b a } seqII = { f g } {\foo \seqI \seqII} ... and this is the error I get Starting lilypond-windows.exe 2.19.81 [Untitled (9)]... Processing `C:/Users/GIANMA~1/AppData/Local/Temp/frescobaldi-f2cfs6t1/tmpj6o5qsf6/ document.ly' Parsing...C:/Program Files (x86)/LilyPond/usr/share/lilypond/current/scm/music-functions.scm:1063:31 <0>: In procedure ly:music-mutable-properties in expression (ly:music-mutable-properties music): C:/Program Files (x86)/LilyPond/usr/share/lilypond/current/scm/music-functions.scm:1063:31 <1>: Wrong type argument in position 1 (expecting Prob): (#) (duration . #) (origin . #))((display-methods #) (name . NoteEvent) (iterator-ctor . #) (types event note-event rhythmic-event melodic-event)) > #) (duration . #) (origin . #:13>))((display-methods #) (name . NoteEvent) (iterator-ctor . #) (types event note-event rhythmic-event melodic-event)) > ) Exited with return code 1. g. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: concatenating notes with a music expression
On 15 May 2018 at 11:40, Lukas-Fabian Moser wrote: > > Thank you Gilles I have yet a problem, how can engrave the foo > generated list in a score? > > Thank you Lukas & Malte. I tried your solutions and they works! Thanks!!! ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: concatenating notes with a music expression
Malte Meyn writes: > Am 15.05.2018 um 10:27 schrieb Gianmaria Lari: >> Thank you Gilles I have yet a problem, how can engrave the foo >> generated list in a score? > > You should make a music-function: > > \version "2.19.81" > > foo = > #(define-music-function (seq1 seq2) (ly:music? ly:music?) >(make-sequential-music > (map (lambda (note) >(make-sequential-music > (cons note (ly:music-property seq2 'elements > (ly:music-property seq1 'elements > > seqI = { c b a } > seqII = { f g } > > \foo \seqI \seqII Nope. You need to write (ly:music-deep-copy (ly:music-property seq2 'elements)) instead of (ly:music-property seq2 'elements) here or you'll get surprising results whenever the result is changed in place (like when transposing the result). Incidentally, it might make sense to write instead foo = #(define-music-function (seq1 seq2) (ly:music? ly:music?) (set! (ly:music-properties seq1 'elements) (map! (lambda (note) (music-clone seq2 'elements (cons note (music-clone (ly:music-property seq2 'elements) (ly:music-property seq1 'elements))) seq1) That will take the structure of the respective sequences as templates, so you can use <<...>> instead of {...} for either and have this reflected in the result. Also <...> though that will make sense only for the inner structure. -- David Kastrup ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: concatenating notes with a music expression
Thank you Gilles I have yet a problem, how can engrave the foo generated list in a score? #(make-sequential-music (foo seqI seqII)) or with list-splicing: #@(foo seqI seqII) Best Lukas ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: concatenating notes with a music expression
Am 15.05.2018 um 10:27 schrieb Gianmaria Lari: Thank you Gilles I have yet a problem, how can engrave the foo generated list in a score? You should make a music-function: \version "2.19.81" foo = #(define-music-function (seq1 seq2) (ly:music? ly:music?) (make-sequential-music (map (lambda (note) (make-sequential-music (cons note (ly:music-property seq2 'elements (ly:music-property seq1 'elements seqI = { c b a } seqII = { f g } \foo \seqI \seqII ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: concatenating notes with a music expression
On 15 May 2018 at 00:40, Gilles Thibault wrote: > Le 2018-05-12 00:16, Sirius Barras a écrit : > >> I have a sequence of notes and a music expression. >> How could be done a function concatenating each element of the sequence >> with the music expression? >> >> For instance, if the sequence is {c b a } and the music expression is { f >> g >> } I would like to obtain >> >> c f g >> b f g >> a f g >> >> > Don't known what Lilypond version you have. This should work in 2.18 and > 2.19 > > %% > > #(define (foo seq1 seq2) > (map (lambda(note) >;(ly:music-deep-copy ;; if music is re-used > (make-sequential-music > (cons note (ly:music-property seq2 'elements > (ly:music-property seq1 'elements))) > > seqI = { c b a } > seqII = { f g } > > #(for-each display-lily-music (list seqI seqII)) > #(display "=>\n") > #(for-each display-lily-music (foo seqI seqII)) > > %%% > > Output : > > { c4 b4 a4 } > { f4 g4 } > => > { c4 f4 g4 } > { b4 f4 g4 } > { a4 f4 g4 } > > > > Good week. > > -- > Gilles > Thank you Gilles I have yet a problem, how can engrave the foo generated list in a score? ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: concatenating notes with a music expression
Le 2018-05-12 00:16, Sirius Barras a écrit : I have a sequence of notes and a music expression. How could be done a function concatenating each element of the sequence with the music expression? For instance, if the sequence is {c b a } and the music expression is { f g } I would like to obtain c f g b f g a f g Don't known what Lilypond version you have. This should work in 2.18 and 2.19 %% #(define (foo seq1 seq2) (map (lambda(note) ;(ly:music-deep-copy ;; if music is re-used (make-sequential-music (cons note (ly:music-property seq2 'elements (ly:music-property seq1 'elements))) seqI = { c b a } seqII = { f g } #(for-each display-lily-music (list seqI seqII)) #(display "=>\n") #(for-each display-lily-music (foo seqI seqII)) %%% Output : { c4 b4 a4 } { f4 g4 } => { c4 f4 g4 } { b4 f4 g4 } { a4 f4 g4 } Good week. -- Gilles ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
concatenating notes with a music expression
I have a sequence of notes and a music expression. How could be done a function concatenating each element of the sequence with the music expression? For instance, if the sequence is {c b a } and the music expression is { f g } I would like to obtain c f g b f g a f g Thanks ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user