lilypond-devel
[Top][All Lists]
Advanced

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

Re: make-span-event


From: Nicolas Sceaux
Subject: Re: make-span-event
Date: Mon, 01 Nov 2004 17:45:50 +0100
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)

Nicolas Sceaux <address@hidden> writes:

> Juergen Reuter <address@hidden> writes:
>
>> Hi!
>>
>> Maybe this is a silly question, but there is something that I do not quite 
>> understand.  I am trying to create span events in a music function:
>>
>> \version "2.4.0"
>> crescendo = #(def-music-function
>>             (location music) (ly:music?)
>>             (make-music 'SequentialMusic
>>                         'elements (list
>>                                    (make-span-event 'CrescendoEvent START)
>>                                    music
>>                                    (make-span-event 'CrescendoEvent STOP))))
>>

A naive solution:

crescendo = #(def-music-function (location music) (ly:music?)
               (let* ((seq (ly:music-property music 'elements))
                      (first (ly:music-deep-copy (car seq))))
                 (set! (ly:music-property first 'elements)
                       (cons (make-span-event 'CrescendoEvent START)
                             (ly:music-property first 'elements)))
                 (let ((result (list first)))
                  (make-sequential-music (do ((e (cadr seq) (car rest))
                                              (rest (cddr seq) (cdr rest)))
                                             ((null? rest) (begin
                                                             (set! 
(ly:music-property e 'elements)
                                                                   (cons 
(make-span-event 'CrescendoEvent STOP)
                                                                         
(ly:music-property e 'elements)))
                                                             (reverse! (cons e 
result))))
                                           (set! result (cons e result)))))))





reply via email to

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