diff --git a/lightsync/main.py b/lightsync/main.py index bf5db44..6f1ed8b 100644 --- a/lightsync/main.py +++ b/lightsync/main.py @@ -1,4 +1,3 @@ -import asyncio import os from contextlib import asynccontextmanager from pathlib import Path @@ -8,36 +7,27 @@ from fastapi.staticfiles import StaticFiles from lightsync.devices.registry import DeviceRegistry from lightsync.store.show_store import ShowStore -from lightsync.audio.engine import MPVEngine # Module-level containers populated in lifespan registry: DeviceRegistry | None = None show_store: ShowStore | None = None -engine: MPVEngine | None = None @asynccontextmanager async def lifespan(app: FastAPI): - global registry, show_store, engine + global registry, show_store # Startup registry = DeviceRegistry(Path("devices.json")) await registry.load() show_store = ShowStore(Path("shows")) show_store.ensure_dir() - ao = os.environ.get("MPV_AO", "null") - engine = MPVEngine(ao=ao) - engine.start() - app.state.engine = engine - from lightsync.api.ws import broadcast_loop - task = asyncio.create_task(broadcast_loop(lambda: engine)) + + # Beat analysis cache: filepath -> {"tempo": float, "beats": [float, ...]} + app.state.beats = {} + yield + # Shutdown - task.cancel() - try: - await task - except asyncio.CancelledError: - pass - engine.stop() await registry.save() @@ -51,6 +41,11 @@ def create_app() -> FastAPI: app.include_router(ws.router) app.include_router(audio.router, prefix="/api/audio") + # Serve uploaded audio files so