blob: 8fa73512bd0d8741ed7d47b2f586c432bb7ff727 (
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
|
(define-module (starlet midi-control faders)
#:use-module (starlet midi-control base)
#:use-module (starlet base)
#: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)
(define (ccval->offset a)
(if (eq? a 127)
-1
1))
(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)
(list
(at-midi-jogwheel fixture 'intensity 21)
(at-midi-jogwheel fixture 'pan 0)
(at-midi-jogwheel fixture 'tilt 1)))
(define midi-callbacks '())
(define (merge-rule-replace attr a b)
b)
(define (sel fixture)
(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))
(when fixture
(set! midi-callbacks
(select-fixtures fixture))))
|