Mercurial > code > home > repos > light9
comparison light8/Cue.py @ 45:62c47c3a90cb
util.py: subsetdict added. see docs
util.py: subsetdict added. see docs
Cue.py: Cues and Fades created. see docs
author | dmcc |
---|---|
date | Sun, 07 Jul 2002 13:33:19 +0000 |
parents | 45b12307c695 |
children | cfb00e8cc0ea |
comparison
equal
deleted
inserted
replaced
44:6540879e336e | 45:62c47c3a90cb |
---|---|
1 """And that's my cue to exit(0)...""" | 1 '''And that's my cue to exit(0)...''' |
2 from time import time | 2 from time import time |
3 from util import subsetdict, scaledict | 3 from util import subsetdict |
4 | 4 |
5 class Cue: | 5 class Cue: |
6 """Cues are groups of fades. They can tell you the current levels at a | 6 '''Cues are groups of fades. They can tell you the current levels at a |
7 given time. They contain Fades, which are actually children of Cue, | 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 | 8 meaning that Cues can contain Cues. This is similar to the Light9 concept |
9 of Cues and Fades, but without all the Nodes.""" | 9 of Cues and Fades, but without all the Nodes.''' |
10 def __init__(self, name, starttime, dur, *fades): | 10 def __init__(self, name, starttime, endtime, *fades): |
11 'Create a cue' | 11 'Create a cue' |
12 | |
13 endtime = starttime + dur | |
14 dur = endtime - starttime | |
15 | |
16 self.name = name | 12 self.name = name |
17 self.starttime = starttime | 13 self.starttime = starttime |
18 self.dur = dur | |
19 self.endtime = endtime | 14 self.endtime = endtime |
20 self.fades = fades | 15 self.fades = fades |
21 self.cuestart = None | 16 self.cuestart = None |
22 self.init_levels = None | 17 self.init_levels = None |
23 def channels_involved(self): | 18 def channels_involved(self): |
27 for f_chan in fade.channels_involved(): | 22 for f_chan in fade.channels_involved(): |
28 c[f_chan] = 1 | 23 c[f_chan] = 1 |
29 return c.keys() | 24 return c.keys() |
30 def start(self, levels, time): | 25 def start(self, levels, time): |
31 'Mark the beginning of a cue' | 26 'Mark the beginning of a cue' |
32 # print "cue marked with", levels | |
33 self.init_levels = levels | 27 self.init_levels = levels |
34 self.init_time = time | 28 self.init_time = time |
35 | 29 |
36 for fade in self.fades: | 30 for fade in self.fades: |
37 subdict = subsetdict(levels, fade.channels_involved()) | 31 subdict = subsetdict(levels, fade.channels_involved()) |
42 for fade in self.fades: | 36 for fade in self.fades: |
43 fade_d = fade.get_levels(curtime) | 37 fade_d = fade.get_levels(curtime) |
44 for ch, lev in fade_d.items(): | 38 for ch, lev in fade_d.items(): |
45 d[ch] = max(lev, d.get(ch, 0)) | 39 d[ch] = max(lev, d.get(ch, 0)) |
46 return d | 40 return d |
47 def get_end_levels(self): | |
48 'Returns the final levels' | |
49 d = {} | |
50 for fade in self.fades: | |
51 fade_d = fade.get_end_levels() | |
52 for ch, lev in fade_d.items(): | |
53 d[ch] = max(lev, d.get(ch, 0)) | |
54 return d | |
55 | 41 |
56 class Fade(Cue): | 42 class Fade(Cue): |
57 'See Cue.__doc__' | 43 'See Cue.__doc__' |
58 def __init__(self, channel, starttime, dur=None, endlevel=0, param=None): | 44 def __init__(self, channel, starttime, endtime=None, endlevel=0, dur=None, |
59 'Fades are simple Cues' | 45 param=None): |
60 Cue.__init__(self, "%s -> %.1f" % (channel, endlevel), starttime, dur) | 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) | |
61 self.channel = channel | 52 self.channel = channel |
62 self.endlevel = endlevel | 53 self.endlevel = endlevel |
63 self.dur = dur | 54 self.dur = dur |
64 self.param = param | 55 self.param = param |
65 def start(self, levels, time): | 56 def start(self, levels, time): |
66 'Mark the beginning of the fade' | 57 'Mark the beginning of the fade' |
67 # print "fade", self.name, "marked with", levels | |
68 self.init_levels = levels | 58 self.init_levels = levels |
69 self.init_level = levels[self.channel] | 59 self.init_level = levels[self.channel] |
70 self.init_time = time | 60 self.init_time = time |
71 def channels_involved(self): | 61 def channels_involved(self): |
72 'Speaks for itself, I hope' | 62 'Speaks for itself, I hope' |
76 if elapsed <= self.starttime: | 66 if elapsed <= self.starttime: |
77 return self.init_levels | 67 return self.init_levels |
78 elif elapsed >= self.endtime: | 68 elif elapsed >= self.endtime: |
79 return {self.channel : self.endlevel} | 69 return {self.channel : self.endlevel} |
80 else: | 70 else: |
81 percent = float((curtime - self.init_time) - self.starttime) / \ | 71 percent = float(elapsed) / self.dur |
82 self.dur | |
83 return {self.channel : self.init_level + | 72 return {self.channel : self.init_level + |
84 percent * (self.endlevel - self.init_level)} | 73 percent * (self.endlevel - self.init_level)} |
85 def get_end_levels(self): | |
86 return {self.channel : self.endlevel} | |
87 | |
88 class SimpleCue(Cue): | |
89 'See Cue.__doc__' | |
90 def __init__(self, name, target, dur, **info): | |
91 Cue.__init__(self, name, 0, dur) | |
92 self.target = target | |
93 self.dur = dur | |
94 self.info = info | |
95 def start(self, levels, time): | |
96 'Mark the beginning of the fade' | |
97 self.init_levels = levels | |
98 self.init_time = time | |
99 def channels_involved(self): | |
100 'Speaks for itself, I hope' | |
101 return self.target.keys() | |
102 def get_levels(self, curtime): | |
103 elapsed = curtime - self.init_time | |
104 if elapsed >= self.endtime: | |
105 return self.target | |
106 else: | |
107 percent = float((curtime - self.init_time) - self.starttime) / \ | |
108 self.dur | |
109 return dict([(n, self.init_levels[n] + | |
110 percent * (lev - self.init_levels[n])) | |
111 for n, lev in self.target]) | |
112 # return {self.channel : self.init_level + | |
113 # percent * (self.endlevel - self.init_level)} | |
114 def get_end_levels(self): | |
115 return self.target | |
116 | 74 |
117 if __name__ == '__main__': | 75 if __name__ == '__main__': |
118 f1 = Fade('red', 0, 2, 100) | 76 f1 = Fade('red', 0, 2, 100) |
119 f2 = Fade('green', 1, 3, 50) | 77 f2 = Fade('green', 1, 3, 50) |
120 f3 = Fade('blue', 0, 4, 0) | 78 f3 = Fade('blue', 0, 4, 0) |