lilypond-user
[Top][All Lists]
Advanced

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

Re: Aleatoric / modern notation


From: David Nalesnik
Subject: Re: Aleatoric / modern notation
Date: Sat, 8 Dec 2012 19:21:02 -0600

Hi again,

On Sat, Dec 8, 2012 at 7:21 AM, David Nalesnik <address@hidden> wrote:
> Hi Jeffrey,
>
> I'm copying this to the list since I myself am not sure about something here.
>
> On Sat, Dec 8, 2012 at 5:13 AM, Jeffrey Trevino
> <address@hidden> wrote:
>> Hi David,
>>
>> Thanks for revising this more for me. I really appreciate your efforts, and
>> I will take a look at this asap and write back. For my learning, could you
>> please explain what exactly you changed between versions 4 and 5 that got it
>> working in parallel?
>>
>
> Well, I must say that I was a bit mystified by this, and I don't
> understand why the original form wouldn't work on multiple staves.
>

[snip]

>
> I did notice something which I can't account for.  You'll notice that
> `frameEngraver4.ly' uses a variable "event-drul".
>

It turns out that the my definition of event-drul as '(() . ()) was
the problem.  I substituted (cons '() '()) and everything works just
fine...even with the file that gave you the issues with multiple
staves.  I don't understand why '(() . ()) and (cons '() '()) aren't
equivalent.

Trying to work out the problem, I've done a little rewriting so I'll
include the engraver here.  You can just substitute this in the
problematic file.

frameEngraver =
#(lambda (context)
  (let ((span '())
        (stub '())
        (event-drul (cons '() '())))
    (make-engraver
      (listeners ((frame-event engraver event)
                  (if (= START (ly:event-property event 'span-direction))
                      (set-car! event-drul event)
                      (begin
                        (set-cdr! event-drul event)
                        (set-car! event-drul '())))))
      (acknowledgers
        ((note-column-interface engraver grob source-engraver)
         (if (ly:spanner? span)
             (begin
               (ly:pointer-group-interface::add-grob span 'elements grob)
               (add-bound-item span grob)))
         (if (ly:item? stub)
             (ly:pointer-group-interface::add-grob stub 'elements grob)))
        ((script-interface engraver grob source-engraver)
         (if (ly:spanner? span)
             (ly:pointer-group-interface::add-grob span 'elements grob))
         (if (ly:item? stub)
             (ly:pointer-group-interface::add-grob stub 'elements grob)))
        ((dynamic-interface engraver grob source-engraver)
         (if (ly:spanner? span)
             (ly:pointer-group-interface::add-grob span 'elements grob))
         (if (ly:item? stub)
             (ly:pointer-group-interface::add-grob stub 'elements grob)))
        ((inline-accidental-interface engraver grob source-engraver)
         (if (ly:spanner? span)
             (ly:pointer-group-interface::add-grob span 'elements grob))
         (if (ly:item? stub)
             (ly:pointer-group-interface::add-grob stub 'elements grob))))

      ((process-music trans)
       (if (ly:stream-event? (car event-drul))
           (begin
             (set! span (ly:engraver-make-grob trans 'Frame (car event-drul)))
             (set! stub (ly:engraver-make-grob trans 'FrameStub (car
event-drul)))
             (ly:grob-set-object! stub 'frame span)
             (ly:grob-set-property! stub 'direction LEFT)
             (set-car! event-drul '())))
       (if (ly:stream-event? (cdr event-drul))
           (if (null? span)
               (ly:warning "No start to this box.")
               (begin
                 (set! stub (ly:engraver-make-grob trans 'FrameStub
(cdr event-drul)))
                 (ly:grob-set-property! stub 'direction RIGHT)
                 (ly:grob-set-object! stub 'frame span)
                 (ly:engraver-announce-end-grob trans span (cdr event-drul))
                 (set-cdr! event-drul '())))))

      ((stop-translation-timestep trans)
       (set! stub '())))))



reply via email to

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