From 2234e1ef68f02460a6e3a8e7409afbd1fd68c711 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sat, 3 Apr 2021 19:14:37 +0200 Subject: New state-on-fader --- guile/starlet/midi-control/faders.scm | 43 ++++++++++++++++------------------- 1 file changed, 20 insertions(+), 23 deletions(-) (limited to 'guile/starlet/midi-control/faders.scm') diff --git a/guile/starlet/midi-control/faders.scm b/guile/starlet/midi-control/faders.scm index 07dfa46..99e2560 100644 --- a/guile/starlet/midi-control/faders.scm +++ b/guile/starlet/midi-control/faders.scm @@ -8,38 +8,35 @@ #:export (state-on-fader)) -(define (put-state-on-fader cc-number - channel - state) +(define* (state-on-fader cc-number + state + #:key (channel #f)) (register-state! (lighting-state (state-for-each (lambda (fix attr val) - (if (intensity? attr) + (let ((cc-val (get-cc-value cc-number #:channel channel))) + (format #t "Have val ~a\n" cc-val) - ;; Intensity parameters get scaled according to the fader - (at fix attr (lambda (time) - (let ((cc-val (get-cc-value cc-number - #:channel channel))) - (if cc-val - (* 0.01 val (ccval->percent cc-val)) - 0)))) + ;; Fader position known? + (if cc-val - ;; Non-intensity parameters just get set in our new state - (at fix attr val))) + (if (intensity? attr) - state)))) + ;; Intensity parameters get scaled according to the fader + (at fix attr (lambda (time) + (* 0.01 val (ccval->percent cc-val)))) + ;; Non-intensity parameters just get set in our new state, + ;; but only if the fader is up! + (if (> cc-val 0) + (at fix attr val) + 'no-value)) -(define* (state-on-fader cc-number state - #:key (channel #f)) - (register-midi-cc-callback! - #:cc-number cc-number - #:func (lambda (old-val new-val) - (when (or (eqv? old-val 0) - (and (not old-val) - (< new-val 10))) - (put-state-on-fader cc-number channel state))))) + ;; Fader position unknown + 'no-value))) + + state)))) (define (current-values fixture-list attr-name) -- cgit v1.2.3