From a1084e24db8397097dc7451cc20e6d82732626d5 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sun, 30 Apr 2023 17:24:43 +0200 Subject: Implement osc-parameter-encoder (basic version) --- examples/demo-show.scm | 4 +++ guile/starlet/open-sound-control/utils.scm | 40 +++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/examples/demo-show.scm b/examples/demo-show.scm index 92fc780..30719f3 100644 --- a/examples/demo-show.scm +++ b/examples/demo-show.scm @@ -118,3 +118,7 @@ (osc-select-button osc-server "/x1k2/buttons/22" x1k2 "/x1k2/leds/22" mhL) (osc-select-button osc-server "/x1k2/buttons/23" x1k2 "/x1k2/leds/23" mhR) (osc-select-button osc-server "/x1k2/buttons/24" x1k2 "/x1k2/leds/24" mhRR) + +(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) diff --git a/guile/starlet/open-sound-control/utils.scm b/guile/starlet/open-sound-control/utils.scm index 16ccbaf..1d6104e 100644 --- a/guile/starlet/open-sound-control/utils.scm +++ b/guile/starlet/open-sound-control/utils.scm @@ -21,12 +21,17 @@ (define-module (starlet open-sound-control utils) #:use-module (starlet playback) #:use-module (starlet selection) + #:use-module (starlet fixture) + #:use-module (starlet engine) + #:use-module (starlet state) #:use-module (starlet utils) #: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 - osc-select-button)) + osc-select-button + osc-parameter-encoder)) (define* (osc-playback-controls pb server go-method stop-method back-method @@ -82,3 +87,36 @@ (osc-send addr led 'orange) (osc-send addr led 'red))) (get-selection))) + + +(define (encoder-inc attr n) + (for-each + (lambda (fix) + (at fix attr (+ (current-value fix attr) n))) + (get-selection))) + + +(define (osc-parameter-encoder server encoder-method addr led attr) + + (add-osc-method server (string-append encoder-method "/inc") "" + (lambda () (encoder-inc attr 3))) + + (add-osc-method server (string-append encoder-method "/dec") "" + (lambda () (encoder-inc attr -3))) + + (add-osc-method server (string-append encoder-method "/inc-fine") "" + (lambda () (encoder-inc attr 1))) + + (add-osc-method server (string-append encoder-method "/dec-fine") "" + (lambda () (encoder-inc attr -1))) + + (add-and-run-hook! + selection-hook + (lambda (sel) + (if (any + (lambda (fix) + (fixture-has-attr? fix attr)) + (get-selection)) + (osc-send addr led 'green) + (osc-send addr led 'off))) + (get-selection))) -- cgit v1.2.3