aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/demo.scm58
-rw-r--r--guile/starlet/base.scm39
2 files changed, 77 insertions, 20 deletions
diff --git a/examples/demo.scm b/examples/demo.scm
index cf5658d..17a031f 100644
--- a/examples/demo.scm
+++ b/examples/demo.scm
@@ -10,30 +10,52 @@
(start-ola-output)
(start-midi-control "/dev/snd/midiC1D0")
+
+;; Light up some LEDs on the MIDI controller
+(define led1
+ (make-midi-led #:channel 14
+ #:note-number 23))
+
+(define led2
+ (make-midi-led #:channel 14
+ #:note-number 20))
+
+(set-midi-led! led1 #t)
+(set-midi-led! led2 #t)
+
+
+;; Set up working lights on a MIDI fader
+(define worklight (make-workspace))
+
(define working-light-fader
(make-midi-controller #:channel 14
#:cc-number 19))
+(set-attr! worklight dim11 'intensity
+ (lambda (a)
+ (get-controller-value working-light-fader)))
+(set-attr! worklight dim12 'intensity
+ (lambda (a)
+ (get-controller-value working-light-fader)))
+(set-attr! worklight dim13 'intensity
+ (lambda (a)
+ (get-controller-value working-light-fader)))
+
+
+
+;; Workspace for cue playback
+(define cue-wksp (make-workspace))
+
(define pot1
(make-midi-controller #:channel 14
#:cc-number 7))
-(define wksp (make-workspace))
-
-(define (example-state wksp)
-
- (blackout wksp)
+(define (example-state-1 wksp)
;; Front wash
- (set-attr! wksp dim11 'intensity
- (lambda (a)
- (get-controller-value working-light-fader)))
- (set-attr! wksp dim12 'intensity
- (lambda (a)
- (get-controller-value working-light-fader)))
- (set-attr! wksp dim13 'intensity
- (lambda (a)
- (get-controller-value working-light-fader)))
+ (set-attr! wksp dim11 'intensity 100)
+ (set-attr! wksp dim12 'intensity 100)
+ (set-attr! wksp dim13 'intensity 100)
;; Sidelight
(set-attr! wksp dim7 'intensity (flash 2))
@@ -44,9 +66,7 @@
(get-controller-value pot1))))
-(define (example2 wksp)
-
- (blackout wksp)
+(define (example-state-2 wksp)
;; Front wash
(set-attr! wksp dim1 'intensity 10)
@@ -57,4 +77,6 @@
(set-attr! wksp dim7 'intensity (flash 5))
(set-attr! wksp dim8 'intensity 50))
-(example-state wksp)
+
+(fade-up cue-wksp example-state-1
+ #:fade-time 1)
diff --git a/guile/starlet/base.scm b/guile/starlet/base.scm
index 2138654..fc97542 100644
--- a/guile/starlet/base.scm
+++ b/guile/starlet/base.scm
@@ -8,7 +8,7 @@
#:export (<fixture> <fixture-attribute>
start-ola-output patch-fixture
set-attr! home-attr! home-all! blackout
- make-workspace scanout-freq
+ make-workspace fade-up scanout-freq
percent->dmxval msb lsb chan))
(use-modules (srfi srfi-1))
@@ -70,7 +70,8 @@
(define-class <starlet-state> (<object>)
(hash-table
#:init-form (make-hash-table)
- #:getter get-state-hash-table))
+ #:getter get-state-hash-table
+ #:setter set-state-hash-table!))
(define-generic set-in-state!)
@@ -149,6 +150,40 @@
(when attr (set-in-state! workspace fix attr value))))
+(define (fade-frac fade-time start-time time-now)
+ (min (/ (- time-now start-time)
+ fade-time)
+ 1.0))
+
+
+(define (wrap-fade value fade-time start-time)
+ (lambda (time)
+ (inexact->exact (* (value->number value time)
+ (fade-frac fade-time
+ start-time
+ (hirestime))))))
+
+
+;; "state" is a function with one parameter: a workspace
+;; This function sets up "workspace" to fade in the state
+(define* (fade-up workspace state
+ #:key (fade-time 5))
+ (let ((fade-up-state (make <starlet-state>))
+ (start-time (hirestime)))
+
+ ;; Execute passed-in function to get state
+ (state fade-up-state)
+
+ (state-for-each (lambda (fix attr value)
+ (set-in-state! fade-up-state
+ fix
+ attr
+ (wrap-fade value fade-time start-time)))
+ fade-up-state)
+
+ (set-state-hash-table! workspace
+ (get-state-hash-table fade-up-state))))
+
;; Patch a new fixture
(define* (patch-fixture class