Changeset - a88e082d2507
[Not reviewed]
default
0 1 0
drewp@bigasterisk.com - 8 years ago 2017-06-11 19:16:11
drewp@bigasterisk.com
a little more sequencer reload speed
Ignore-this: 1a9c21c58bff0b430b20798b1898eec
1 file changed with 7 insertions and 5 deletions:
0 comments (0 inline, 0 general)
light9/effect/sequencer.py
Show inline comments
 
@@ -83,30 +83,32 @@ class Note(object):
 
        self.effectEval = effectevalModule.EffectEval(
 
            graph, g.value(uri, L9['effectClass']), sharedEffectOutputs)
 
        self.baseEffectSettings = {}  # {effectAttr: value}
 
        for s in g.objects(uri, L9['setting']):
 
            settingValues = dict(g.predicate_objects(s))
 
            ea = settingValues[L9['effectAttr']]
 
            self.baseEffectSettings[ea] = settingValues[L9['value']]
 
            
 
        floatVal = lambda s, p: float(g.value(s, p).toPython())
 
        originTime = floatVal(uri, L9['originTime'])
 
        self.points = []
 
        for curve in g.objects(uri, L9['curve']):
 
            if g.value(curve, L9['attr']) != L9['strength']:
 
            po = list(g.predicate_objects(curve))
 
            if dict(po).get(L9['attr'], None) != L9['strength']:
 
                continue
 
            for point in g.objects(curve, L9['point']):
 
            for point in [row[1] for row in po if row[0] == L9['point']]:
 
                po2 = dict(g.predicate_objects(point))
 
                self.points.append((
 
                    originTime + floatVal(point, L9['time']),
 
                    floatVal(point, L9['value'])))
 
                    originTime + float(po2[L9['time']]),
 
                    float(po2[L9['value']])))
 
            self.points.sort()
 
        
 
    def activeAt(self, t):
 
        return self.points[0][0] <= t <= self.points[-1][0]
 

	
 
    def evalCurve(self, t):
 
        i = bisect.bisect_left(self.points, (t, None)) - 1
 

	
 
        if i == -1:
 
            return self.points[0][1]
 
        if self.points[i][0] > t:
 
            return self.points[i][1]
 
@@ -166,26 +168,26 @@ class Sequencer(object):
 
        self.update()
 

	
 
        self.codeWatcher = CodeWatcher(
 
            onChange=lambda: self.graph.addHandler(self.compileGraph))
 

	
 
    def compileGraph(self):
 
        """rebuild our data from the graph"""
 
        log.info('compileGraph start')
 
        t1 = time.time()
 
        g = self.graph
 

	
 
        sharedEffectOutputs = {}
 

	
 
        for song in g.subjects(RDF.type, L9['Song']):
 
            # ideally, wrap this (or smaller) in a sub-handler to run less on each patch
 
            self.notes[song] = []
 
            for note in g.objects(song, L9['note']):
 
                self.notes[song].append(Note(g, note, effecteval, sharedEffectOutputs))
 
        log.info('compileGraph done %.2f ms', 1000 * (time.time() - t1))
 

	
 
    @stats.update.time()
 
    def update(self):
 
        now = time.time()
 
        self.recentUpdateTimes = self.recentUpdateTimes[-20:] + [now]
 
        stats.recentFps = len(self.recentUpdateTimes) / (self.recentUpdateTimes[-1] - self.recentUpdateTimes[0] + .0001)
 
        if now > self.lastStatLog + 10:
 
            log.info("%.2f fps", stats.recentFps)
0 comments (0 inline, 0 general)