Changeset - 84306c05d229
[Not reviewed]
default
0 1 0
drewp@bigasterisk.com - 7 years ago 2018-06-09 18:42:06
drewp@bigasterisk.com
sequencer http mode: send faster (this gets 13fps)
Ignore-this: 42794350c8f87faec4392591184e8065
1 file changed with 28 insertions and 16 deletions:
0 comments (0 inline, 0 general)
light9/effect/sequencer.py
Show inline comments
 
@@ -6,10 +6,12 @@ from __future__ import division
 
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 @@ class Sequencer(object):
 

	
 

	
 
    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 @@ class Sequencer(object):
 
            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 @@ class Sequencer(object):
 
        
 
    @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):
0 comments (0 inline, 0 general)