diff options
author | Thomas White <taw@physics.org> | 2022-07-17 16:19:14 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2022-07-17 16:37:27 +0200 |
commit | 9f780ca658d55f33f63f4fe972e1564891b9fc83 (patch) | |
tree | 01d4a1e252073c2ddff611f27e7ab76411b388b2 /guile/starlet | |
parent | b102d2403623d515b02eac957690df6a9cbb1e0f (diff) |
Improve the syntax of "set-midi-control-map!"
This replaces the mess of "list" forms:
(set-midi-control-map! controller
(list
(list 'intensity 'fader 16 '(108 72))
...))
With something a bit clearer:
(set-midi-control-map! controller
(fader 16 'intensity #:congruent 108 #:incongruent 72)
...)
There's a corresponding improvement in the internal code.
Diffstat (limited to 'guile/starlet')
-rw-r--r-- | guile/starlet/midi-control/faders.scm | 67 |
1 files changed, 54 insertions, 13 deletions
diff --git a/guile/starlet/midi-control/faders.scm b/guile/starlet/midi-control/faders.scm index a3dcdee..df47b76 100644 --- a/guile/starlet/midi-control/faders.scm +++ b/guile/starlet/midi-control/faders.scm @@ -26,9 +26,12 @@ #:use-module (starlet scanout) #:use-module (starlet utils) #:use-module (srfi srfi-1) + #:use-module (srfi srfi-9) #:use-module (srfi srfi-26) #:use-module (oop goops) #:export (set-midi-control-map! + fader + jogwheel state-on-fader)) @@ -43,6 +46,38 @@ #:getter get-control-map)) +(define-record-type <fader-spec> + (make-fader cc attr-name congruent incongruent) + fader-spec? + (cc fader-cc-number) + (attr-name fader-attr-name) + (congruent fader-congruent-note) + (incongruent fader-incongruent-note)) + + +(define-record-type <jogwheel-spec> + (make-jogwheel cc attr-name active-note) + jogwheel-spec? + (cc jogwheel-cc-number) + (attr-name jogwheel-attr-name) + (active-note jogwheel-active-note)) + + +(define* (fader cc + attr-name + #:key + (congruent #f) + (incongruent #f)) + (make-fader cc attr-name congruent incongruent)) + + +(define* (jogwheel cc + attr-name + #:key + (active #f)) + (make-jogwheel cc attr-name active)) + + (define (name-for-fader-state controller cc-number) (call-with-output-string (lambda (port) @@ -282,20 +317,20 @@ (define (midi-control-attr controller control-spec fixture-list) (cond - ((eq? 'jogwheel (cadr control-spec)) + ((jogwheel-spec? control-spec) (at-midi-jogwheel controller fixture-list - (car control-spec) - (caddr control-spec) - #:led (cadddr control-spec))) + (jogwheel-attr-name control-spec) + (jogwheel-cc-number control-spec) + #:led (jogwheel-active-note control-spec))) - ((eq? 'fader (cadr control-spec)) + ((fader-spec? control-spec) (at-midi-fader controller fixture-list - (car control-spec) - (caddr control-spec) - #:led (car (cadddr control-spec)) - #:led-incongruent (cadr (cadddr control-spec)))))) + (fader-attr-name control-spec) + (fader-cc-number control-spec) + #:led (fader-congruent-note control-spec) + #:led-incongruent (fader-incongruent-note control-spec))))) (define (led-off controller leds) @@ -316,9 +351,15 @@ (get-callbacks parameter-controller)) ;; Switch off all the old LEDs - (for-each (lambda (control-spec) - (led-off controller (cadddr control-spec))) - (get-control-map parameter-controller))) + (for-each + (lambda (cs) + (cond + ((jogwheel-spec? cs) + (led-off controller (jogwheel-active-note cs))) + ((fader-spec? cs) + (led-off controller (fader-congruent-note cs)) + (led-off controller (fader-incongruent-note cs))))) + (get-control-map parameter-controller))) (define (update-midi-controls controller fixture-list) @@ -333,7 +374,7 @@ (get-control-map (get-parameter-controller controller))))) -(define (set-midi-control-map! controller new-control-map) +(define (set-midi-control-map! controller . new-control-map) (when controller (let ((old-parameter-controller (get-parameter-controller controller))) |