def send_dmx_levels(self, *args): # print "send_dmx_levels", self.current_dmx_levels if self.mute.get(): dmxclient.outputlevels([0] * 68) else: dmxclient.outputlevels(self.current_dmx_levels) self.last_levels_sent = time.time()
from __future__ import division import xmlrpclib,time,socket,sys sys.path.append("../light8") import dmxclient player=xmlrpclib.Server("http://localhost:8040") print "found player" t1=time.time() while 1: try: playtime=player.gettime() except socket.error,e: print "server error %r, waiting"%e time.sleep(2) lev=0 for low,high,func in ((0,20,0), (20,30,(playtime-20)/10), (30,170,1), (170,189,1-(playtime-170)/19), ): if low<=playtime<high: lev=func print "Send",lev dmxclient.outputlevels([lev]) time.sleep(.01)
def send_levels(self): levels = self.show.calc_active_submaster().get_dmx_list() dmxclient.outputlevels(levels)
def send_levels(self): if not self.dmxdummy: levels = self.get_dmx_list() dmxclient.outputlevels(levels)
def changelevel(self, *args): 'Amp trims slider' # load levels from external sliders extlevels = self.slidermapper.get_levels() for name, val in extlevels.items(): if name in self.scalelevels: sl = self.scalelevels[name] sl.set(val) # newstart = time() # learn what changed unchangedgroup = {} changedgroup = {} for name, lastlevel in self.lastsublevels.items(): newlevel = self.scalelevels[name].get() if lastlevel != newlevel: changedgroup[name] = newlevel else: unchangedgroup[name] = newlevel changedeffect = {} if not changedgroup: # should load levels from last time pass else: # calculate effect of new group. this should take no time if # nothing changed for name, level in changedgroup.items(): newlevels = Subs.subs[name].get_levels(level=level) for (ch, fadelev) in newlevels.items(): changedeffect[ch-1] = \ max(changedeffect.get(ch-1, 0), fadelev) if unchangedgroup != self.lastunchangedgroup: # unchanged group changed! (confusing, huh?) # this means: the static subs from the last time are not the same # as they are this time, so we recalculate effect of unchanged group self.unchangedeffect = {} for name, level in unchangedgroup.items(): newlevels = Subs.subs[name].get_levels(level=level) for (ch, fadelev) in newlevels.items(): self.unchangedeffect[ch-1] = \ max(self.unchangedeffect.get(ch-1, 0), fadelev) self.lastunchangedgroup = unchangedgroup # record sublevels for future generations (iterations, that is) for name in self.lastsublevels: self.lastsublevels[name] = self.scalelevels[name] # merge effects together levels = [0] * 68 if changedeffect: levels = [int(max(changedeffect.get(ch, 0), self.unchangedeffect.get(ch, 0))) for ch in range(0, 68)] else: levels = [int(self.unchangedeffect.get(ch, 0)) for ch in range(0, 68)] ''' newend = time() levels_opt = levels oldstart = time() # i tried to optimize this to a dictionary, but there was no speed # improvement levels = [0] * 68 for name, s in Subs.subs.items(): sublevel = self.scalelevels[name].get() newlevels = s.get_levels(level=sublevel) self.lastsublevels[name] = sublevel # XXX remove for (ch, fadelev) in newlevels.items(): levels[ch-1] = max(levels[ch-1], fadelev) levels = [int(l) for l in levels] oldend = time() newtime = newend - newstart oldtime = oldend - oldstart print "new", newtime, 'old', (oldend - oldstart), 'sup', \ oldtime / newtime if levels != levels_opt: raise "not equal" # for l, lo in zip(levels, levels_opt): # print l, lo ''' for lev,lab,oldlev,numlab in zip(levels, self.channel_levels, self.oldlevels, self.leveldisplay.number_labels): if lev != oldlev: lab.config(text="%d" % lev) # update labels in lev display colorlabel(lab) # recolor labels if lev < oldlev: numlab['bg'] = 'blue' else: numlab['bg'] = 'red' else: numlab['bg'] = 'grey40' # replace the elements in oldlevels - don't make a new list # (Subediting is watching it) self.oldlevels[:] = levels[:] if self.jostle_mode: delta = random.randrange(-1, 2, 1) # (-1, 0, or 1) # print "delta", delta levels = [min(100, max(x + delta, 0)) for x in levels] # print "jostled", levels dmxclient.outputlevels([l/100 for l in levels])