blob: a53262db2732a23c600c94a99fd1923cb65ea1ef (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
(define-module (starlet midi-control faders)
#:use-module (starlet midi-control base)
#:use-module (starlet base)
#:use-module (ice-9 receive)
#:export (on-fader
sel))
(define* (on-fader cc-number state
#:key (channel #f))
(register-state!
(lighting-state
(state-for-each
(lambda (fix attr val)
(if (intensity? attr)
;; Intensity parameters get scaled according to the fader
(at fix attr (lambda (time)
(* 0.01
val
(scale-127-100 (get-cc-value cc-number
#:channel channel)))))
;; Non-intensity parameters just get set in our new state
(at fix attr val)))
state))))
(define* (at-midi-jogwheel fix attr cc-number
#:key (led #f))
(define (ccval->offset a)
(if (eq? a 127)
-1
1))
(when led
(send-note-on led))
(let ((old-val (current-value fix attr))
(offset 0))
(register-midi-cc-callback!
#:cc-number cc-number
#:func (lambda (prev-cc-val new-cc-value)
(set! offset (+ offset (ccval->offset new-cc-value)))
(set-attr! selection-state
fix
attr
(+ old-val offset))))))
(define (select-fixtures fixture)
(values
(list 98 124 125 84 85 86 120 121 122)
(list
(at-midi-jogwheel fixture 'intensity 21
#:led 98)
(at-midi-jogwheel fixture 'pan 0
#:led 124)
(at-midi-jogwheel fixture 'tilt 1
#:led 125))))
;; (at-midi-fader fixture 'red 4
;; #:led-incongruent 84
;; #:led-congruent 120)
;; (at-midi-fader fixture 'green 5
;; #:led-incongruent 85
;; #:led-congruent 121)
;; (at-midi-fader fixture 'blue 6
;; #:led-incongruent 86
;; #:led-congruent 122))))
;; Stuff to clear up when we're done with selected fixtures
(define midi-callbacks '())
(define midi-leds '())
(define (sel fixture)
(define (merge-rule-replace attr a b) b)
(when selection-state
(add-state-to-state! merge-rule-replace
selection-state
programmer-state)
(clear-state! selection-state)
(for-each remove-midi-callback! midi-callbacks)
(for-each send-note-off midi-leds)
(set! midi-callbacks '())
(set! midi-leds '()))
(when fixture
(receive (leds callbacks)
(select-fixtures fixture)
(set! midi-callbacks callbacks)
(set! midi-leds leds))))
|