lilypond-user
[Top][All Lists]
Advanced

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

Re: Auto-panner


From: Jan-Peter Voigt
Subject: Re: Auto-panner
Date: Mon, 27 Jan 2014 18:02:34 +0100
User-agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.2.0

On 27.01.2014 16:54, David Kastrup wrote:
>> autopan =
>> > #(define-scheme-function (parser location)()
> Why define-scheme-function when returning music?
Perhaps this function had another meaning in the first place?
I overlooked this, when injecting my ApplyContext lines.
>> >    (begin
>> >     (set! autopan-current-voice (+ autopan-current-voice 1.0))
>> >     (make-music
>> >      'ApplyContext
>> >      'procedure
>> >      (lambda (context)
>> >        (let ((ctx (ly:context-find context autopan-staff-or-voice)))
>> >          (if (not (ly:context? ctx)) (set! ctx context))
>> >          ;(ly:message "context ~A" ctx)
>> >          (ly:context-set-property! ctx 'midiPanPosition
>> >            (+ -1.0
>> >              (* autopan-current-voice
>> >                (/ 2.0
>> >                  (- autopan-total-voices 1.0)
> Doesn't work.  At the time the function gets called, _all_ instances of
> the function get to see the same value of autopan-current-voice.
Good point. Now all Voices turned to the right ;)
> If you want to keep tabs on your current voice, you need to use a
> score-level context property.
What about a closure?
%%%%%%%%%%%%%%
autopan =
#(define-music-function (parser location)()
   (let ((mypan (+ autopan-current-voice 1.0)))
    (set! autopan-current-voice mypan)
    (make-music
     'ApplyContext
     'procedure
     (lambda (context)
       (let ((ctx (ly:context-find context autopan-staff-or-voice)))
         (if (not (ly:context? ctx)) (set! ctx context))
         (ly:message "context ~A pan ~A" ctx mypan)
         (ly:context-set-property! ctx 'midiPanPosition
           (+ -1.0
             (* mypan
               (/ 2.0
                 (- autopan-total-voices 1.0)
                 )
               )
             )))
       ))
     ))
%%%%%%%%%%%%%%

At least now every Staff gets its own midiPanPosition.

I like the idea of auto-stereo-spreading midi channels. Now it should
also work, if autopan is used inside a global variable.
Still, I'd recommend usage of either a global context property or a
performer/engraver that keeps track of all contexts using autopan.
Perhaps it is possible to count all contexts joining autopan automatically.

But thats out of scope for me right now ;) (i might come back later on
this topic)

Best, Jan-Peter




reply via email to

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