Changeset - 9b6f4b3c329c
[Not reviewed]
default
0 3 0
drewp@bigasterisk.com - 20 months ago 2023-05-24 06:42:33
drewp@bigasterisk.com
correct some output loop rates; clean up
3 files changed with 13 insertions and 32 deletions:
0 comments (0 inline, 0 general)
light9/collector/output.py
Show inline comments
 
@@ -86,8 +86,10 @@ class BackgroundLoopOutput(Output):
 

	
 
    async def _loop(self):
 
        while True:
 
            t1 = time.time()
 
            self._loop_one()
 
            await asyncio.sleep(.1)
 
            remain = max(0, 1 / self.rate - (time.time() - t1))
 
            await asyncio.sleep(remain)
 

	
 
    def _loop_one(self):
 
        start = time.time()
light9/effect/sequencer/eval_faders.py
Show inline comments
 
@@ -38,11 +38,8 @@ class FaderEval:
 
    """
 
    def __init__(self,
 
                 graph: SyncedGraph,
 
                 sendToCollector: Callable[[DeviceSettings], Coroutine[None ,None,None]],
 
                 ):
 
        self.graph = graph
 
        self.sendToCollector = sendToCollector
 

	
 
        self.faders: List[Fader] = []
 

	
 
        # self.simpleOutputs = SimpleOutputs(self.graph)
 
@@ -85,7 +82,6 @@ class FaderEval:
 
                raise TypeError('f.value should be set by now')
 
            effectSettings = EffectSettings(self.graph, [(f.effect, f.setEffectAttr, f.value)])
 

	
 
            print(f'{effectSettings=}')
 
            notesSettings.append(f.ee.compute(effectSettings))
 

	
 
            # ee = effecteval.EffectEval(self.graph, f.effectClass, self.simpleOutputs)
 
@@ -98,11 +94,3 @@ class FaderEval:
 
            # if deviceSettings:
 
            #     notesSettings.append(deviceSettings)
 
        return DeviceSettings.merge(self.graph, notesSettings)
 

	
 

	
 
    # @metrics('update_call_fader').time()
 
    # async def update(self):
 
    #     log.info(f'update {len(self.notes)=}')
 
    #     devSettings = self.computeOutput()
 
    #     with metrics('update_s3_send_fader').time():  # our measurement
 
    #         sendSecs = await self.sendToCollector(devSettings)
light9/effect/sequencer/service.py
Show inline comments
 
@@ -7,7 +7,6 @@ import json
 
import logging
 
import time
 

	
 
import aiohttp
 
from louie import dispatcher
 
from rdfdb.syncedgraph.syncedgraph import SyncedGraph
 
from sse_starlette.sse import EventSourceResponse
 
@@ -15,15 +14,16 @@ from starlette.applications import Starl
 
from starlette.routing import Route
 
from starlette_exporter import PrometheusMiddleware, handle_metrics
 

	
 
from lib.background_loop import loop_forever
 
from light9 import networking
 
from light9.collector.collector_client_asyncio import sendToCollector
 
from light9.effect.sequencer.eval_faders import FaderEval
 
from light9.effect.sequencer.sequencer import Sequencer, StateUpdate
 
from light9.effect.settings import DeviceSettings
 
from light9.metrics import metrics
 
from light9.run_local import log
 

	
 
from lib.background_loop import loop_forever
 
RATE = 30
 

	
 

	
 
async def changes():
 
    state = {}
 
@@ -48,18 +48,6 @@ async def send_page_updates(request):
 
    return EventSourceResponse(changes())
 

	
 

	
 
###################################################################
 

	
 

	
 
async def _send_one(faders: FaderEval):
 
    ds = faders.computeOutput()
 
    await sendToCollector('effectSequencer', session='0', settings=ds)
 

	
 

	
 

	
 
####################################################################
 

	
 

	
 
def main():
 
    graph = SyncedGraph(networking.rdfdb.url, "effectSequencer")
 
    logging.getLogger('autodepgraphapi').setLevel(logging.INFO)
 
@@ -67,11 +55,14 @@ def main():
 
    logging.getLogger('sse_starlette.sse').setLevel(logging.INFO)
 

	
 
    # seq = Sequencer(graph, send)  # per-song timed notes
 
    faders = FaderEval(graph)  # bin/fade's untimed notes
 
    faders = FaderEval(graph)  # bin/fade's untimed effects
 

	
 
    async def so(first_run):
 
        await _send_one(faders)
 
    faders_loop = loop_forever(so, metric_prefix='faders', sleep_period=.05, log_fps=True)
 
    #@metrics('computeAndSend').time() # needs rework with async
 
    async def update(first_run):
 
        ds = faders.computeOutput()
 
        await sendToCollector('effectSequencer', session='0', settings=ds)
 

	
 
    faders_loop = loop_forever(update, metric_prefix='faders', sleep_period=1 / RATE)
 

	
 
    app = Starlette(
 
        debug=True,
0 comments (0 inline, 0 general)