annotate light8/Cue.py @ 53:032b2b67bc10

result of July 7th on-site editing
author dmcc
date Mon, 08 Jul 2002 14:31:20 +0000
parents 71489bb71528
children 3011c1028eb7
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."""
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 51
diff changeset
10 def __init__(self, name, starttime, dur, *fades):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 'Create a cue'
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 51
diff changeset
12
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 51
diff changeset
13 endtime = starttime + dur
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 51
diff changeset
14 dur = endtime - starttime
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
15
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 self.name = name
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 self.starttime = starttime
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
18 self.dur = dur
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 self.endtime = endtime
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 self.fades = fades
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 self.cuestart = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 self.init_levels = None
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 def channels_involved(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 'Return which channels are involved. This is important for marking.'
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 c = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 for fade in self.fades:
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 for f_chan in fade.channels_involved():
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 c[f_chan] = 1
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 return c.keys()
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 def start(self, levels, time):
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 'Mark the beginning of a cue'
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 self.init_levels = levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 self.init_time = time
45b12307c695 Initial revision
drewp
parents:
diff changeset
34
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 for fade in self.fades:
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 subdict = subsetdict(levels, fade.channels_involved())
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 fade.start(subdict, time)
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 def get_levels(self, curtime):
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 'Returns the current levels'
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 d = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 for fade in self.fades:
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 fade_d = fade.get_levels(curtime)
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 for ch, lev in fade_d.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 d[ch] = max(lev, d.get(ch, 0))
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 return d
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
46 def get_end_levels(self):
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
47 'Returns the final levels'
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
48 d = {}
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
49 for fade in self.fades:
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
50 fade_d = fade.get_end_levels()
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
51 for ch, lev in fade_d.items():
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
52 d[ch] = max(lev, d.get(ch, 0))
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
53 return d
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
54
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 class Fade(Cue):
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 'See Cue.__doc__'
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 51
diff changeset
57 def __init__(self, channel, starttime, dur=None, endlevel=0, param=None):
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
58 'Fades are simple Cues'
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 51
diff changeset
59 Cue.__init__(self, "%s -> %f" % (channel, endlevel), starttime, dur)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 self.channel = channel
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 self.endlevel = endlevel
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 self.dur = dur
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 self.param = param
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 def start(self, levels, time):
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 'Mark the beginning of the fade'
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 self.init_levels = levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 self.init_level = levels[self.channel]
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 self.init_time = time
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 def channels_involved(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 'Speaks for itself, I hope'
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 return [self.channel]
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 def get_levels(self, curtime):
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 elapsed = curtime - self.init_time
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 if elapsed <= self.starttime:
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 return self.init_levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 elif elapsed >= self.endtime:
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 return {self.channel : self.endlevel}
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 else:
45
62c47c3a90cb util.py: subsetdict added. see docs
dmcc
parents: 0
diff changeset
79 percent = float(elapsed) / self.dur
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 return {self.channel : self.init_level +
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 percent * (self.endlevel - self.init_level)}
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
82 def get_end_levels(self):
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 46
diff changeset
83 return {self.channel : self.endlevel}
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
84
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 if __name__ == '__main__':
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 f1 = Fade('red', 0, 2, 100)
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 f2 = Fade('green', 1, 3, 50)
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 f3 = Fade('blue', 0, 4, 0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 f4 = Fade('clear', 0, 8, 75)
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 c = Cue("Color shift", 0, 10, f1, f2, f3, f4)
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 tstart = time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 # note how green is not mentioned -- it goes to 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 c.start({'red' : 0, 'blue' : 100, 'clear' : 25}, tstart)
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 while time() - tstart < 15:
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 curtime = time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 levs = c.get_levels(curtime)
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 s = '\t'.join(["%s: %d" % (k[0], v) for k, v, in levs.items()])
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 print "%.1f" % (curtime - tstart), s