From 7c567cdaad77de03f005bbda45b208ea1acaeec1 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 15 Jun 2023 21:25:48 +0200 Subject: Use higher-level OSC interface --- examples/demo-show.scm | 34 ++++++------ guile/starlet/open-sound-control/utils.scm | 85 ++++++++++++++++-------------- 2 files changed, 61 insertions(+), 58 deletions(-) diff --git a/examples/demo-show.scm b/examples/demo-show.scm index 42c9d45..c4f03cf 100644 --- a/examples/demo-show.scm +++ b/examples/demo-show.scm @@ -99,34 +99,30 @@ (send-selection-updates-to (make-osc-address "osc.udp://localhost:7772")) -(osc-send x1k2 "/x1k2/leds/*" 'off) - -(osc-playback-indicators pb x1k2 "/x1k2/leds/101" "/x1k2/leds/29" "/x1k2/leds/25") -(osc-playback-controls pb osc-server "/x1k2/buttons/101" "/x1k2/buttons/29" "/x1k2/buttons/25") -(osc-playback-indicators pb x1k2 "/x1k2/leds/102" "/x1k2/leds/32" "/x1k2/leds/28") -(osc-playback-controls pb osc-server "/x1k2/buttons/102" "/x1k2/buttons/32" "/x1k2/buttons/28") +(osc-playback-controls pb osc-server x1k2 "/x1k2/buttons/101" "/x1k2/buttons/29" "/x1k2/buttons/25") +(osc-playback-controls pb osc-server x1k2 "/x1k2/buttons/102" "/x1k2/buttons/32" "/x1k2/buttons/28") (add-osc-method osc-server "/x1k2/buttons/30" "" (lambda () (reload-cue-list! pb) (reassert-current-cue! pb))) -(osc-send x1k2 "/x1k2/leds/30" 'green) +(osc-send x1k2 "/x1k2/leds/30/set-led" 'green) (add-osc-method osc-server "/x1k2/buttons/31" "" sel) -(osc-send x1k2 "/x1k2/leds/31" 'green) +(osc-send x1k2 "/x1k2/buttons/31/set-led" 'green) -(osc-select-button front-leds osc-server "/x1k2/buttons/17" x1k2 "/x1k2/leds/17") -(osc-select-button front-wash osc-server "/x1k2/buttons/18" x1k2 "/x1k2/leds/18") -(osc-select-button mhLL osc-server "/x1k2/buttons/21" x1k2 "/x1k2/leds/21") -(osc-select-button mhL osc-server "/x1k2/buttons/22" x1k2 "/x1k2/leds/22") -(osc-select-button mhR osc-server "/x1k2/buttons/23" x1k2 "/x1k2/leds/23") -(osc-select-button mhRR osc-server "/x1k2/buttons/24" x1k2 "/x1k2/leds/24") +(osc-select-button front-leds osc-server x1k2 "/x1k2/buttons/17") +(osc-select-button front-wash osc-server x1k2 "/x1k2/buttons/18") +(osc-select-button mhLL osc-server x1k2 "/x1k2/buttons/21") +(osc-select-button mhL osc-server x1k2 "/x1k2/buttons/22") +(osc-select-button mhR osc-server x1k2 "/x1k2/buttons/23") +(osc-select-button mhRR osc-server x1k2 "/x1k2/buttons/24") -(osc-parameter-encoder pan osc-server "/x1k2/encoders/1" x1k2 "/x1k2/leds/1") -(osc-parameter-encoder tilt osc-server "/x1k2/encoders/2" x1k2 "/x1k2/leds/2") -(osc-parameter-encoder gobo osc-server "/x1k2/encoders/3" x1k2 "/x1k2/leds/3") -(osc-parameter-encoder intensity osc-server "/x1k2/encoders/102" x1k2 "/x1k2/nothing") +(osc-parameter-encoder pan osc-server x1k2 "/x1k2/encoders/1") +(osc-parameter-encoder tilt osc-server x1k2 "/x1k2/encoders/2") +(osc-parameter-encoder gobo osc-server x1k2 "/x1k2/encoders/3") +(osc-parameter-encoder intensity osc-server x1k2 "/x1k2/encoders/102") -(osc-state-fader osc-server "/x1k2/faders/4" +(osc-state-fader osc-server x1k2 "/x1k2/faders/4" (lighting-state (at mhL mhR colour (rgb 40 20 70)) (at mhL mhR 100) diff --git a/guile/starlet/open-sound-control/utils.scm b/guile/starlet/open-sound-control/utils.scm index 2b9bba5..0ad5d88 100644 --- a/guile/starlet/open-sound-control/utils.scm +++ b/guile/starlet/open-sound-control/utils.scm @@ -29,66 +29,71 @@ #:use-module (open-sound-control client) #:use-module (open-sound-control server-thread) #:use-module (srfi srfi-1) - #:export (osc-playback-indicators - osc-playback-controls + #:use-module (srfi srfi-26) + #:export (osc-playback-controls osc-select-button osc-parameter-encoder osc-state-fader send-selection-updates-to)) -(define* (osc-playback-controls pb server go-method stop-method back-method +(define* (osc-playback-controls pb server addr go-button stop-button back-button #:key (min-time-between-presses 0.2)) (let ((time-last-press 0)) - (add-osc-method server go-method "" - (lambda () - (let ((time-this-press (hirestime))) - (if (> time-this-press (+ time-last-press min-time-between-presses)) - (go! pb) - (display "Too soon after last press!\n")) - (set! time-last-press time-this-press))))) - - (add-osc-method server stop-method "" (lambda () (stop! pb))) - (add-osc-method server back-method "" (lambda () (back! pb)))) - - -(define (osc-playback-indicators pb addr go-led stop-led back-led) + (add-osc-method + server + (string-append go-button "/press") + "" + (lambda () + (let ((time-this-press (hirestime))) + (if (> time-this-press (+ time-last-press min-time-between-presses)) + (go! pb) + (display "Too soon after last press!\n")) + (set! time-last-press time-this-press))))) + + (add-osc-method server (string-append stop-button "/press") "" (lambda () (stop! pb))) + (add-osc-method server (string-append back-button "/press") "" (lambda () (back! pb))) + + ;; LEDs + (osc-send addr (string-append back-button "/set-led") 'green) (add-and-run-hook! (state-change-hook pb) (lambda (new-state) (if (eq? new-state 'running) - (osc-send addr stop-led 'green) - (osc-send addr stop-led 'off)) + (osc-send addr (string-append stop-button "/set-led") 'green) + (osc-send addr (string-append stop-button "/set-led") 'off)) (cond ((eq? new-state 'pause) - (osc-send addr go-led 'orange)) + (osc-send addr (string-append go-button "/set-led") 'orange)) ((eq? new-state 'ready) - (osc-send addr go-led 'green)) + (osc-send addr (string-append go-button "/set-led") 'green)) ((eq? new-state 'running) - (osc-send addr go-led 'green)) + (osc-send addr (string-append go-button "/set-led") 'green)) (else - (osc-send addr go-led 'off)))) - - (playback-state pb)) + (osc-send addr (string-append go-button "/set-led") 'off)))) - (osc-send addr back-led 'green)) + (playback-state pb))) -(define (osc-select-button fix server button-method addr led) +(define (osc-select-button fix server addr button) - (add-osc-method server button-method "" - (lambda () (toggle-sel fix))) + (add-osc-method + server + (string-append button "/press") + "" + (lambda () + (toggle-sel fix))) (add-and-run-hook! selection-hook (lambda (sel) (if (selected? fix) - (osc-send addr led 'orange) - (osc-send addr led 'red))) + (osc-send addr (string-append button "/set-led") 'orange) + (osc-send addr (string-append button "/set-led") 'red))) (get-selection))) @@ -107,18 +112,18 @@ (get-selection))) -(define (osc-parameter-encoder attr server encoder-method addr led) +(define (osc-parameter-encoder attr server addr encoder) - (add-osc-method server (string-append encoder-method "/inc") "" + (add-osc-method server (string-append encoder "/inc") "" (lambda () (encoder-inc attr 3))) - (add-osc-method server (string-append encoder-method "/dec") "" + (add-osc-method server (string-append encoder "/dec") "" (lambda () (encoder-inc attr -3))) - (add-osc-method server (string-append encoder-method "/inc-fine") "" + (add-osc-method server (string-append encoder "/inc-fine") "" (lambda () (encoder-inc attr 1))) - (add-osc-method server (string-append encoder-method "/dec-fine") "" + (add-osc-method server (string-append encoder "/dec-fine") "" (lambda () (encoder-inc attr -1))) (add-and-run-hook! @@ -128,8 +133,8 @@ (lambda (fix) (fixture-has-attr? fix attr)) (get-selection)) - (osc-send addr led 'green) - (osc-send addr led 'off))) + (osc-send addr (string-append encoder "/set-led") 'green) + (osc-send addr (string-append encoder "/set-led") 'off))) (get-selection))) @@ -137,7 +142,7 @@ (/ (* n 100) 127)) -(define (osc-state-fader server fader state) +(define (osc-state-fader server addr fader state) (let ((fader-val 0)) (register-state! (lighting-state @@ -158,7 +163,9 @@ 'no-value))))) state))) - (add-osc-method server fader "i" + (osc-send addr (string-append fader "/enable")) + (osc-send addr (string-append fader "/set-pickup") 0) + (add-osc-method server (string-append fader "/value-change") "i" (lambda (v) (set! fader-val v))))) -- cgit v1.2.3