[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
- Auto-panner, Vaughan McAlley, 2014/01/27
- Re: Auto-panner, Jan-Peter Voigt, 2014/01/27
- Re: Auto-panner, David Kastrup, 2014/01/27
- Re: Auto-panner, Jan-Peter Voigt, 2014/01/27
- Re: Auto-panner, David Kastrup, 2014/01/27
- Re: Auto-panner,
Jan-Peter Voigt <=
- Re: Auto-panner, David Kastrup, 2014/01/27
- Re: Auto-panner, Jan-Peter Voigt, 2014/01/27
- Re: Auto-panner, Vaughan McAlley, 2014/01/27