Mercurial > code > home > repos > light9
view light9/curvecalc/output.py @ 690:847edbfe65c8
refactor subterms
Ignore-this: 632a7fcc1917ceed60970e69e85d03f5
author | drewp@bigasterisk.com |
---|---|
date | Wed, 06 Jun 2012 01:31:51 +0000 |
parents | |
children | 34dacd800505 |
line wrap: on
line source
import time from twisted.internet import reactor from light9 import Submaster, dmxclient from louie import dispatcher class Output: lastsendtime=0 lastsendlevs=None def __init__(self, subterms, music): self.subterms, self.music = subterms, music self.recent_t=[] self.later = None self.update() def update(self): d = self.music.current_time() d.addCallback(self.update2) d.addErrback(self.updateerr) def updateerr(self,e): print e.getTraceback() dispatcher.send("update status",val=e.getErrorMessage()) if self.later and not self.later.cancelled and not self.later.called: self.later.cancel() self.later = reactor.callLater(1,self.update) def update2(self,t): # spot alsa soundcard offset is always 0, we get times about a # second ahead of what's really getting played #t = t - .7 dispatcher.send("update status", val="ok: receiving time from music player") if self.later and not self.later.cancelled and not self.later.called: self.later.cancel() self.later = reactor.callLater(.02, self.update) self.recent_t = self.recent_t[-50:]+[t] period = (self.recent_t[-1] - self.recent_t[0]) / len(self.recent_t) dispatcher.send("update period", val=period) self.send_dmx(t) def send_dmx(self,t): dispatcher.send("curves to sliders", t=t) scaledsubs=[] for st in self.subterms: scl = st.scaled(t) scaledsubs.append(scl) out = Submaster.sub_maxes(*scaledsubs) levs = out.get_levels() now=time.time() if now-self.lastsendtime>5 or levs!=self.lastsendlevs: dispatcher.send("output levels",val=levs) dmxclient.outputlevels(out.get_dmx_list(), twisted=1,clientid='curvecalc') self.lastsendtime = now self.lastsendlevs = levs