lilypond-user
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]