annotate light8/Cue.py @ 51:71489bb71528

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