annotate light8/Cue.py @ 46:cfb00e8cc0ea

(22:36:03) drewp: plaese use stronger quotes """ on Cue:1 to help my highlighter
author dmcc
date Sun, 07 Jul 2002 13:37:04 +0000
parents 62c47c3a90cb
children 71489bb71528
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46
cfb00e8cc0ea (22:36:03) drewp: plaese use stronger quotes """ on Cue:1 to help my highlighter
dmcc
parents: 45
diff changeset
1 """And that's my cue to exit(0)..."""
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
2 from time import time
45
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
3 from util import subsetdict
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
4
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 class Cue:
46
cfb00e8cc0ea (22:36:03) drewp: plaese use stronger quotes """ on Cue:1 to help my highlighter
dmcc
parents: 45
diff changeset
6 """Cues are groups of fades. They can tell you the current levels at a
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 given time. They contain Fades, which are actually children of Cue,
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 meaning that Cues can contain Cues. This is similar to the Light9 concept
46
cfb00e8cc0ea (22:36:03) drewp: plaese use stronger quotes """ on Cue:1 to help my highlighter
dmcc
parents: 45
diff changeset
9 of Cues and Fades, but without all the Nodes."""
45
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
10 def __init__(self, name, starttime, endtime, *fades):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 'Create a cue'
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 self.name = name
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 self.starttime = starttime
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 self.endtime = endtime
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 self.fades = fades
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 self.cuestart = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 self.init_levels = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 def channels_involved(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 'Return which channels are involved. This is important for marking.'
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 c = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 for fade in self.fades:
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 for f_chan in fade.channels_involved():
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 c[f_chan] = 1
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 return c.keys()
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 def start(self, levels, time):
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 'Mark the beginning of a cue'
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 self.init_levels = levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 self.init_time = time
45b12307c695 Initial revision
drewp
parents:
diff changeset
29
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 for fade in self.fades:
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 subdict = subsetdict(levels, fade.channels_involved())
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 fade.start(subdict, time)
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 def get_levels(self, curtime):
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 'Returns the current levels'
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 d = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 for fade in self.fades:
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 fade_d = fade.get_levels(curtime)
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 for ch, lev in fade_d.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 d[ch] = max(lev, d.get(ch, 0))
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 return d
45b12307c695 Initial revision
drewp
parents:
diff changeset
41
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 class Fade(Cue):
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 'See Cue.__doc__'
45
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
44 def __init__(self, channel, starttime, endtime=None, endlevel=0, dur=None,
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
45 param=None):
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
46 'Only specify an end time or a duration'
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
47 if not endtime:
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
48 endtime = starttime + dur
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
49 else:
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
50 dur = endtime - starttime
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
51 Cue.__init__(self, "%s -> %f" % (channel, endlevel), starttime, endtime)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 self.channel = channel
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 self.endlevel = endlevel
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 self.dur = dur
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 self.param = param
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 def start(self, levels, time):
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 'Mark the beginning of the fade'
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 self.init_levels = levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 self.init_level = levels[self.channel]
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 self.init_time = time
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 def channels_involved(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 'Speaks for itself, I hope'
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 return [self.channel]
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 def get_levels(self, curtime):
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 elapsed = curtime - self.init_time
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 if elapsed <= self.starttime:
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 return self.init_levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 elif elapsed >= self.endtime:
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 return {self.channel : self.endlevel}
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 else:
45
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
71 percent = float(elapsed) / self.dur
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 return {self.channel : self.init_level +
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 percent * (self.endlevel - self.init_level)}
45b12307c695 Initial revision
drewp
parents:
diff changeset
74
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 if __name__ == '__main__':
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 f1 = Fade('red', 0, 2, 100)
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 f2 = Fade('green', 1, 3, 50)
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 f3 = Fade('blue', 0, 4, 0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 f4 = Fade('clear', 0, 8, 75)
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 c = Cue("Color shift", 0, 10, f1, f2, f3, f4)
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 tstart = time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 # note how green is not mentioned -- it goes to 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 c.start({'red' : 0, 'blue' : 100, 'clear' : 25}, tstart)
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 while time() - tstart < 15:
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 curtime = time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 levs = c.get_levels(curtime)
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 s = '\t'.join(["%s: %d" % (k[0], v) for k, v, in levs.items()])
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 print "%.1f" % (curtime - tstart), s