#!/usr/bin/guile !# (define useful-links (list '((Starlet) (https://github.com/taw10/starlet)) '((Conjure) (https://conjure.fun/)) '((Video: Conversational Software Development by Oliver Caldwell) (https://www.youtube.com/watch?v=RU28xy9JXxs)) '((Open Lighting Project) (https://www.openlighting.org/)) '((ChamSys MagicVis) (https://chamsyslighting.com/products/magicq)))) ;; Very basic Conjure demo (+ 1 1) (define a 5) (* a 3) (reverse '(a b c d e f)) ;; Basic setup (use-modules (starlet base) (starlet playback) (starlet effects) (starlet fixture-library generic) (starlet fixture-library robe) (starlet midi-control base) (starlet midi-control button-utils) (starlet midi-control faders)) ;; Start readout to OLA (start-ola-output) ;; Start MIDI control (start-midi-control "/dev/snd/midiC0D0" #:channel 14) ;; Fixtures are normal GOOPS objects, fixture types are GOOPS classes (patch-fixture! foh1 8) (patch-fixture! foh2 7) (patch-fixture! foh3 6) (patch-fixture! foh4 5) (patch-fixture! foh5 4) (patch-fixture! foh6 3) (patch-fixture! foh7 2) (patch-fixture! foh8 1) (patch-fixture! red1 9) (patch-fixture! red2 13) (patch-fixture! red3 20) (patch-fixture! red4 24) (patch-fixture! ltruss1 1 #:universe 1) (patch-fixture! ltruss2 39 #:universe 1) (patch-fixture! ltruss3 77 #:universe 1) (patch-fixture! ltruss4 115 #:universe 1) (patch-fixture! ltruss5 153 #:universe 1) (patch-fixture! ltruss6 191 #:universe 1) (patch-fixture! rtruss1 229 #:universe 1) (patch-fixture! rtruss2 267 #:universe 1) (patch-fixture! rtruss3 305 #:universe 1) (patch-fixture! rtruss4 343 #:universe 1) (patch-fixture! rtruss5 381 #:universe 1) (patch-fixture! rtruss6 419 #:universe 1) (patch-fixture! floor1 100) (patch-fixture! floor2 134) (patch-fixture! floor3 168) (patch-fixture! floor4 202) (patch-fixture! floor5 236) (patch-fixture! floor6 270) ;; Set a parameter (at foh1 'intensity 80) (at floor4 'intensity 100) (at floor4 'cyan 80) ;; If parameter is not specified, 'intensity' is understood (at red1 100) ;; Functions can be assigned to parameters (at foh1 'intensity (lambda (time) (* 50 (+ 1 (sin (* 2 time)))))) ;; Effects library (at floor2 'intensity 100) (at floor2 'yellow 100) (at floor2 'pan 0) (at floor2 'tilt (sinewave 0.5 100 170)) ;; Clean up (clear-state! programmer-state) ;; Fixtures can be grouped together (define rtruss (list rtruss1 rtruss2 rtruss3 rtruss4 rtruss5 rtruss6)) (define floor (list floor1 floor2 floor3 floor4 floor5 floor6)) (define red (list red1 red2 red3 red4)) (define foh (list foh1 foh2 foh3 foh4 foh5 foh6 foh7 foh8)) (at red 100) (at rtruss 100) (at rtruss 'zoom 80) (at rtruss 'magenta 100) (at rtruss 'yellow 40) (at rtruss 'tilt 70) (at rtruss 'pan 200) (at rtruss 'prism #f) ;; Clean up again (clear-state! programmer-state) ;; Control fixtures via MIDI surface (sel ltruss6) (at 100) ;; Without fixture name 'at' applies to selected fixture(s) (sel rtruss1) (sel #f) ;; Record a state to a variable, then clear up (define my-state (state-source programmer-state)) (clear-state! programmer-state) ;; Recall a stored state (apply-state my-state) (clear-state! programmer-state) ;; Put a lighting state on a MIDI fader (state-on-fader 19 my-state) ;; Create a cue list (define my-cue-list (cue-list (cue 1 (lighting-state (at ltruss1 (quote pan) 206) (at rtruss6 (quote pan) 334) (at ltruss1 (quote yellow) 3800/127) (at rtruss6 (quote tilt) 111) (at rtruss6 (quote yellow) 3100/127) (at ltruss1 (quote tilt) 108.0) (at ltruss1 (quote magenta) 600/127) (at ltruss1 (quote intensity) 109) (at red4 (quote intensity) 30) (at red3 (quote intensity) 30) (at red1 (quote intensity) 30) (at rtruss6 (quote intensity) 133) (at rtruss6 (quote zoom) 4200/127) (at rtruss6 (quote magenta) 100/127) (at red2 (quote intensity) 30) (at ltruss1 (quote zoom) 6300/127))) (cue 2 (lighting-state (apply-state my-state)) #:up-time 1 #:down-time 1) (cue 3 (lighting-state (at floor3 (quote magenta) 11500/127) (at floor3 (quote pan) 299) (at floor3 (quote intensity) 156) (at floor3 (quote tilt) 48) (at floor4 (quote magenta) 11200/127) (at floor4 (quote cyan) 200/127) (at floor3 (quote yellow) 100) (at floor4 (quote intensity) 127) (at floor4 (quote yellow) 10000/127) (at floor4 (quote pan) 239) (at floor2 (quote intensity) -58) (at floor4 (quote tilt) 49)) #:up-time 3 #:down-time 3))) (define pb (make-playback my-cue-list)) (cut-to-cue-number! pb 0) ;; Run cues (go! pb) ;: Jump between cues (cut-to-cue-number! pb 1) ;; Run cues out of order (run-cue-number! pb 2)