from Timeline import * from Submaster import Submasters, sub_maxes class Show: def __init__(self, timelines, submasters): self.timelines = dict([(timeline.name, timeline) for timeline in timelines]) self.submasters = submasters self.current_timeline = None self.current_time = 0 def calc_active_submaster(self): "get levels from the current timeline at the current time" if not (self.current_timeline or self.current_time): return {} tl = self.current_timeline tl.set_time(self.current_time) levels = tl.get_levels() scaledsubs = [self.submasters.get_sub_by_name(sub) * level \ for sub, level in levels.items()] maxes = sub_maxes(*scaledsubs) return maxes def set_timeline(self, name): "select a timeline" self.current_timeline = self.timelines.get(name) if not self.current_timeline: print "Show: '%s' is not the name of a timeline." % name else: self.set_time(0) def set_time(self, time): "set time of current timeline" self.current_time = time if not self.current_timeline: return self.current_timeline.set_time(time) def get_timelines(self): "Get names of all timelines" return self.timelines.keys() # this is the default blender linear = LinearBlender() def T(time, level, **kw): """This used to be a synonym for TimedEvent: T = TimedEvent It now acts in a similar way, except that it will fill in a default blender if you don't. The default blender is a LinearBlender. It also sets frame to MISSING so the track can fill it in.""" if 'blender' not in kw: global linear kw['blender'] = linear return TimedEvent(time, level=level, frame=MISSING, **kw) def translate_tracks_from_file(timelinename): try: f = open('timelines/' + timelinename) except IOError: return [] events = {} current_sub = None current_time = None lines = f.readlines() alltext = ' '.join(lines) for token in alltext.split(): # print 't', token if token.endswith(':'): # print 'sub' current_sub = token[:-1] current_time = None else: if not current_sub: raise "invalid file format", line if current_time is not None: # we now have a level # print 'level' try: level = float(token) except: print "bad level token", token level = 0 # time to write events.setdefault(current_sub, []) events[current_sub].append((current_time, level)) current_time = None else: # print 'time' try: current_time = float(token) except ValueError: print "bad time token", token current_time = 0 tracks = [] for sub, timelevels in events.items(): tracks.append(TimelineTrack(sub, default_frame=sub, *[T(time, level) for time, level in timelevels])) return tracks