lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Replace ly:music elements in a Scheme function


From: David Kastrup
Subject: Re: Replace ly:music elements in a Scheme function
Date: Mon, 05 Mar 2018 13:42:15 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux)

paolo prete <address@hidden> writes:

> in the snippet below I want to replace, while iterating two lists, the
> elements of music1 with the elements of music2.
> The code shows how to do that for pitches, but how can I replace the whole
> element? (for example, a rest or a note with its articulation)
> %%%%%%%%
>
> fun = #(define-music-function (parser location music1 music2) (ly:music?
> ly:music?)
> (let
>     (
>       (musicList1 (ly:music-property music1 'elements))
>       (musicList2 (ly:music-property music2 'elements))
>     )
>     (map
>         (lambda (x y)
>           ;iterate notes
>           (display "note found\n")
>           ;(set! (ly:music-property x 'pitch) #{c'#})
>           ;(ly:music-set-property! x 'pitch #{c' #})
>           (ly:music-set-property! x 'pitch (ly:music-property y 'pitch))
>         )
>      musicList1 musicList2
>     )
> )
> #{ $music1 #})
>
> {
> \fun {c' d' e'} {f' g' a'}
> }

Something like

fun = #(define-music-function (parser location music1 music2) (ly:music?
ly:music?)
        (let*
         ((pred? (music-type-predicate '(event-chord rhythmic-event)))
          (musicList2 (apply circular-list (extract-music music2 pred?))))
         (define (get-music)
          (let ((elt (music-clone (car musicList2))))
           (set! musicList2 (cdr musicList2))
           elt))
         (map-some-music
          (lambda (m) (and (pred? m) (get-music)))
          music1)))

{
  \fun {c' d' e'} {f' <g' a'>}
}
I'm fuzzy on what music1 is actually good for at all since only a scant
sketch of its structure is used at all.  Probably you need to vary/copy
more from the original.  The music-clone function can take additional
arguments: maybe that allows you to do something more useful.

-- 
David Kastrup

reply via email to

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