From efb87ddf5c3c45a7b9ef79b9983f6c530af8680b Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 1 May 2023 22:41:40 +0200 Subject: Implement osc-state-fader --- examples/demo-show.scm | 7 +++++++ guile/starlet/open-sound-control/utils.scm | 33 +++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/examples/demo-show.scm b/examples/demo-show.scm index 30719f3..6d54a01 100644 --- a/examples/demo-show.scm +++ b/examples/demo-show.scm @@ -122,3 +122,10 @@ (osc-parameter-encoder osc-server "/x1k2/encoders/1" x1k2 "/x1k2/leds/1" pan) (osc-parameter-encoder osc-server "/x1k2/encoders/2" x1k2 "/x1k2/leds/2" tilt) (osc-parameter-encoder osc-server "/x1k2/encoders/102" x1k2 "/x1k2/nothing" intensity) + +(osc-state-fader osc-server "/x1k2/faders/4" + (lighting-state + (at mhL mhR colour (rgb 40 20 70)) + (at mhL mhR 100) + (at front-wash 100) + (at domeL domeR 100))) diff --git a/guile/starlet/open-sound-control/utils.scm b/guile/starlet/open-sound-control/utils.scm index 1d6104e..34c4127 100644 --- a/guile/starlet/open-sound-control/utils.scm +++ b/guile/starlet/open-sound-control/utils.scm @@ -19,6 +19,7 @@ ;; along with this program. If not, see . ;; (define-module (starlet open-sound-control utils) + #:use-module (starlet attributes) #:use-module (starlet playback) #:use-module (starlet selection) #:use-module (starlet fixture) @@ -31,7 +32,8 @@ #:export (osc-playback-indicators osc-playback-controls osc-select-button - osc-parameter-encoder)) + osc-parameter-encoder + osc-state-fader)) (define* (osc-playback-controls pb server go-method stop-method back-method @@ -120,3 +122,32 @@ (osc-send addr led 'green) (osc-send addr led 'off))) (get-selection))) + + +(define (ccval->percent n) + (/ (* n 100) 127)) + + +(define (osc-state-fader server fader state) + (let ((fader-val 0)) + (register-state! + (lighting-state + (state-for-each + (lambda (fix attr val) + (at fix attr + (lambda () + + (if (intensity? attr) + + ;; Intensity parameters get scaled according to the fader + (* 0.01 val (ccval->percent fader-val)) + + ;; Non-intensity parameters just get set in our new state, + ;; but only if the fader is up! + (if (> fader-val 0) + val + 'no-value))))) + state))) + + (add-osc-method server fader "i" + (lambda (v) (set! fader-val v))))) -- cgit v1.2.3