aboutsummaryrefslogtreecommitdiff
path: root/examples/demo.scm
blob: 315ada42315bcbd0a7174e444203784b7b268783 (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
;; Example invokation, from top level project folder:
;; $ guile -L guile -l examples/demo.scm

(use-modules
  (starlet base)
  (starlet playback)
  (starlet effects)
  (venues demo-venue)
  (guile-midi control))

(start-ola-output)
(start-midi-control "/dev/snd/midiC1D0")
(all-notes-off! 14)


;; Set up working lights on a MIDI fader
(define working-light-fader
  (make-midi-controller! #:channel 14
                         #:cc-number 19))

(define-state worklight
  (let ((fader-pos (lambda ()
                     (get-controller-value working-light-fader))))
    (set-attr! (current-state) dim11 'intensity (fader-pos))
    (set-attr! (current-state) dim12 'intensity (fader-pos))
    (set-attr! (current-state) dim13 'intensity (fader-pos))))

(register-state! worklight)


;; Same, for some different fixtures

(define movers-fader
  (make-midi-controller! #:channel 14
                         #:cc-number 18))

(define-state movers
  (let ((fader-pos (lambda ()
                     (get-controller-value movers-fader))))
    (set-attr! (current-state) mh1 'intensity (fader-pos))
    (set-attr! (current-state) mh2 'intensity (fader-pos))))

(register-state! movers)


(define pot1
  (make-midi-controller! #:channel 14
                         #:cc-number 7))

(define-state example-state-1

  ;; Front wash
  (set-attr! (current-state) dim11 'intensity 50)
  (set-attr! (current-state) dim12 'intensity 50)
  (set-attr! (current-state) dim13 'intensity 50)

  ;; Sidelight
  (set-attr! (current-state) dim7 'intensity (flash 2))
  (set-attr! (current-state) dim8 'intensity 50)

  (set-attr! (current-state) dim48 'intensity
             (lambda (a)
               (get-controller-value pot1))))


(define-state example-state-2

  ;; Front wash
  (set-attr! (current-state) dim1 'intensity 10)
  (set-attr! (current-state) dim2 'intensity 10)
  (set-attr! (current-state) dim3 'intensity 10)

  ;; Sidelight
  (set-attr! (current-state) dim7 'intensity (flash 5)))


(define cue-list
  (list (cue 0 (make-empty-state)
             #:fade-up 1
             #:fade-down 1)

        (cue 1 example-state-1
             #:fade-up 3
             #:fade-down 5)

        (cue 2 example-state-2
             #:fade-up 3
             #:fade-down 1
             #:down-delay 3)

        (cue 3 (make-empty-state)
             #:fade-up 0
             #:fade-down 2)))


;; Create a playback for the cue list, and register it for output
(define pb
  (make-playback cue-list))
(register-state! pb)

;; Jump to zero (blackout) cue
(cut-to-cue-number! pb 0)

;; Left-hand playback buttons
(define go1 (make-midi-led #:channel 14 #:note-number 20))
(set-midi-led! go1 #t)
(define stop1 (make-midi-led #:channel 14 #:note-number 24))
(set-midi-led! stop1 #t)
(register-midi-note-callback!
 #:channel 14
 #:note-number 12
 #:func (lambda () (go! pb)))
(register-midi-note-callback!
 #:channel 14
 #:note-number 24
 #:func (lambda () (display "Stop/back!\n")))

;; Right-hand playback buttons
(define go2 (make-midi-led #:channel 14 #:note-number 23))
(set-midi-led! go2 #t)
(define stop2 (make-midi-led #:channel 14 #:note-number 27))
(set-midi-led! stop2 #t)
(register-midi-note-callback!
 #:channel 14
 #:note-number 15
 #:func (lambda () (go! pb)))
(register-midi-note-callback!
 #:channel 14
 #:note-number 27
 #:func (lambda () (display "Stop/back!\n")))