diff options
author | Thomas White <taw@physics.org> | 2021-04-03 19:14:37 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2021-04-03 19:14:37 +0200 |
commit | 2234e1ef68f02460a6e3a8e7409afbd1fd68c711 (patch) | |
tree | 1cf1bb9d0b37fd32fdd6c6494b2c394a34076e24 | |
parent | 3ab2b506f09c6771b14cd09cae869da7e699badd (diff) |
New state-on-fader
-rw-r--r-- | examples/demo.scm | 5 | ||||
-rw-r--r-- | guile/starlet/midi-control/faders.scm | 43 |
2 files changed, 21 insertions, 27 deletions
diff --git a/examples/demo.scm b/examples/demo.scm index 72c04a0..6318ccf 100644 --- a/examples/demo.scm +++ b/examples/demo.scm @@ -170,10 +170,7 @@ ;; Put a lighting state on a MIDI fader -(state-on-fader 19 - (lighting-state - (apply-state my-state))) - +(state-on-fader 19 my-state) ;; Create a cue list (define my-cue-list 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) |