aboutsummaryrefslogtreecommitdiff
path: root/examples/demo.scm
blob: a7241522937555fc1e910684f3dfe348ed59fdee (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
131
132
133
134
135
136
137
;; 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 (worklight)
  (let ((state (make-empty-state))
        (fader-pos (get-controller-value working-light-fader)))
    (set-attr! state dim11 'intensity fader-pos)
    (set-attr! state dim12 'intensity fader-pos)
    (set-attr! state dim13 'intensity fader-pos)
    state))

(register-state! worklight)


(define movers-fader
  (make-midi-controller! #:channel 14
                         #:cc-number 18))
(define (movers)
  (let ((state (make-empty-state))
        (fader-pos (get-controller-value movers-fader)))
    (set-attr! state mh1 'intensity fader-pos)
    (set-attr! state mh2 'intensity fader-pos)
    state))

(register-state! movers)


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

(define (example-state-1)

  (let ((state (make-empty-state)))

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

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

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

    state))


(define (example-state-2)

  (let ((state (make-empty-state)))

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

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

    state))


(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")))