[Top][All Lists]
[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)))))))