[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: concatenating notes with a music expression
From: |
David Kastrup |
Subject: |
Re: concatenating notes with a music expression |
Date: |
Tue, 15 May 2018 12:10:49 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux) |
Malte Meyn <address@hidden> 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