aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2023-05-01 22:41:40 +0200
committerThomas White <taw@physics.org>2023-05-01 22:41:40 +0200
commitefb87ddf5c3c45a7b9ef79b9983f6c530af8680b (patch)
tree92a394a05fd3650ee842726e6e85cd92d023f50b
parenta1084e24db8397097dc7451cc20e6d82732626d5 (diff)
Implement osc-state-fader
-rw-r--r--examples/demo-show.scm7
-rw-r--r--guile/starlet/open-sound-control/utils.scm33
2 files changed, 39 insertions, 1 deletions
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 <http://www.gnu.org/licenses/>.
;;
(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)))))