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)