changeset 1832:84306c05d229

sequencer http mode: send faster (this gets 13fps) Ignore-this: 42794350c8f87faec4392591184e8065
author drewp@bigasterisk.com
date Sat, 09 Jun 2018 18:42:06 +0000
parents 45fe2cdf6018
children 854bac8c833f
files light9/effect/sequencer.py
diffstat 1 files changed, 28 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/light9/effect/sequencer.py	Sat Jun 09 18:41:38 2018 +0000
+++ b/light9/effect/sequencer.py	Sat Jun 09 18:42:06 2018 +0000
@@ -6,10 +6,12 @@
 from louie import dispatcher
 from rdflib import URIRef
 from twisted.internet import reactor
+from twisted.internet import defer
 from twisted.internet.inotify import INotify
 from twisted.python.filepath import FilePath
 import cyclone.sse
 import logging, bisect, time
+import traceback
 
 from light9.namespaces import L9, RDF
 from light9.vidref.musictime import MusicTime
@@ -160,6 +162,7 @@
 
 
     def updateLoop(self):
+        # print "updateLoop"
         now = time.time()
         self.recentUpdateTimes = self.recentUpdateTimes[-40:] + [now]
         stats.recentFps = len(self.recentUpdateTimes) / (self.recentUpdateTimes[-1] - self.recentUpdateTimes[0] + .0001)
@@ -172,7 +175,11 @@
             self.lastStatLog = now
 
         def done(sec):
-            reactor.callLater(max(0, time.time() - (now + 1 / self.fps)), self.updateLoop)
+            # print "sec", sec
+            # delay = max(0, time.time() - (now + 1 / self.fps))
+            # print 'cl', delay
+            delay = 0.005
+            reactor.callLater(delay, self.updateLoop)
         def err(e):
             log.warn('updateLoop: %r', e)
             reactor.callLater(2, self.updateLoop)
@@ -182,22 +189,27 @@
         
     @stats.update.time()
     def update(self):
-        musicState = self.music.getLatest()
-        song = URIRef(musicState['song']) if musicState.get('song') else None
-        if 't' not in musicState:
-            return
-        t = musicState['t']
-        dispatcher.send('state', update={'song': str(song), 't': t})
+        # print "update"
+        try:
+            musicState = self.music.getLatest()
+            song = URIRef(musicState['song']) if musicState.get('song') else None
+            if 't' not in musicState:
+                return defer.succeed(0)
+            t = musicState['t']
+            dispatcher.send('state', update={'song': str(song), 't': t})
 
-        settings = []
-        songNotes = sorted(self.notes.get(song, []), key=lambda n: n.uri)
-        noteReports = []
-        for note in songNotes:
-            s, report = note.outputSettings(t)
-            noteReports.append(report)
-            settings.append(s)
-        dispatcher.send('state', update={'songNotes': noteReports})
-        return self.sendToCollector(DeviceSettings.fromList(self.graph, settings))
+            settings = []
+            songNotes = sorted(self.notes.get(song, []), key=lambda n: n.uri)
+            noteReports = []
+            for note in songNotes:
+                s, report = note.outputSettings(t)
+                noteReports.append(report)
+                settings.append(s)
+            dispatcher.send('state', update={'songNotes': noteReports})
+            return self.sendToCollector(DeviceSettings.fromList(self.graph, settings))
+        except Exception:
+            traceback.print_exc()
+            raise
 
 class Updates(cyclone.sse.SSEHandler):
     def __init__(self, application, request, **kwargs):