Mercurial > code > home > repos > light9
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 |
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 | 2 from time import time |
45 | 3 from util import subsetdict |
0 | 4 |
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 | 7 given time. They contain Fades, which are actually children of Cue, |
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 | 10 def __init__(self, name, starttime, endtime, *fades): |
0 | 11 'Create a cue' |
12 self.name = name | |
13 self.starttime = starttime | |
14 self.endtime = endtime | |
15 self.fades = fades | |
16 self.cuestart = None | |
17 self.init_levels = None | |
18 def channels_involved(self): | |
19 'Return which channels are involved. This is important for marking.' | |
20 c = {} | |
21 for fade in self.fades: | |
22 for f_chan in fade.channels_involved(): | |
23 c[f_chan] = 1 | |
24 return c.keys() | |
25 def start(self, levels, time): | |
26 'Mark the beginning of a cue' | |
27 self.init_levels = levels | |
28 self.init_time = time | |
29 | |
30 for fade in self.fades: | |
31 subdict = subsetdict(levels, fade.channels_involved()) | |
32 fade.start(subdict, time) | |
33 def get_levels(self, curtime): | |
34 'Returns the current levels' | |
35 d = {} | |
36 for fade in self.fades: | |
37 fade_d = fade.get_levels(curtime) | |
38 for ch, lev in fade_d.items(): | |
39 d[ch] = max(lev, d.get(ch, 0)) | |
40 return d | |
41 | |
42 class Fade(Cue): | |
43 'See Cue.__doc__' | |
45 | 44 def __init__(self, channel, starttime, endtime=None, endlevel=0, dur=None, |
45 param=None): | |
46 'Only specify an end time or a duration' | |
47 if not endtime: | |
48 endtime = starttime + dur | |
49 else: | |
50 dur = endtime - starttime | |
51 Cue.__init__(self, "%s -> %f" % (channel, endlevel), starttime, endtime) | |
0 | 52 self.channel = channel |
53 self.endlevel = endlevel | |
54 self.dur = dur | |
55 self.param = param | |
56 def start(self, levels, time): | |
57 'Mark the beginning of the fade' | |
58 self.init_levels = levels | |
59 self.init_level = levels[self.channel] | |
60 self.init_time = time | |
61 def channels_involved(self): | |
62 'Speaks for itself, I hope' | |
63 return [self.channel] | |
64 def get_levels(self, curtime): | |
65 elapsed = curtime - self.init_time | |
66 if elapsed <= self.starttime: | |
67 return self.init_levels | |
68 elif elapsed >= self.endtime: | |
69 return {self.channel : self.endlevel} | |
70 else: | |
45 | 71 percent = float(elapsed) / self.dur |
0 | 72 return {self.channel : self.init_level + |
73 percent * (self.endlevel - self.init_level)} | |
74 | |
75 if __name__ == '__main__': | |
76 f1 = Fade('red', 0, 2, 100) | |
77 f2 = Fade('green', 1, 3, 50) | |
78 f3 = Fade('blue', 0, 4, 0) | |
79 f4 = Fade('clear', 0, 8, 75) | |
80 c = Cue("Color shift", 0, 10, f1, f2, f3, f4) | |
81 tstart = time() | |
82 # note how green is not mentioned -- it goes to 0 | |
83 c.start({'red' : 0, 'blue' : 100, 'clear' : 25}, tstart) | |
84 while time() - tstart < 15: | |
85 curtime = time() | |
86 levs = c.get_levels(curtime) | |
87 s = '\t'.join(["%s: %d" % (k[0], v) for k, v, in levs.items()]) | |
88 print "%.1f" % (curtime - tstart), s |