Example #1
0
 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()
Example #2
0
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)
Example #3
0
 def send_levels(self):
     levels = self.show.calc_active_submaster().get_dmx_list()
     
     dmxclient.outputlevels(levels)
Example #4
0
 def send_levels(self):
     if not self.dmxdummy:
         levels = self.get_dmx_list()
         dmxclient.outputlevels(levels)
Example #5
0
    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])