Demo mode provides a complete sandbox environment with: - Virtual capture engine (radial rainbow test pattern on 3 displays) - Virtual audio engine (synthetic music-like audio on 2 devices) - Virtual LED device provider (strip/60, matrix/256, ring/24 LEDs) - Isolated data directory (data/demo/) with auto-seeded sample entities - Dedicated config (config/demo_config.yaml) with pre-configured API key - Frontend indicator (DEMO badge + dismissible banner) - Engine filtering (only demo engines visible in demo mode) - Separate entry point: python -m wled_controller.demo (port 8081) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2.0 KiB
2.0 KiB
Phase 3: Virtual Audio Engine
Status: ⬜ Not Started Parent plan: PLAN.md Domain: backend
Objective
Create a DemoAudioEngine that provides virtual audio devices and produces synthetic audio data, enabling audio-reactive visualizations in demo mode.
Tasks
- Task 1: Create
server/src/wled_controller/core/audio/demo_engine.pywithDemoAudioEngineandDemoAudioCaptureStream - Task 2:
DemoAudioEngine.ENGINE_TYPE = "demo",ENGINE_PRIORITY = 1000 - Task 3:
is_available()returnsTrueonly whenis_demo_mode()is True - Task 4:
enumerate_devices()returns 2 virtual devices:- "Demo Microphone" (input, not loopback)
- "Demo System Audio" (loopback)
- Task 5:
DemoAudioCaptureStreamimplements:channels = 2,sample_rate = 44100,chunk_size = 1024read_chunk()produces synthetic audio: a mix of sine waves with slowly varying frequencies to simulate music-like beat patterns- Returns proper float32 ndarray
- Task 6: Register
DemoAudioEngineinaudio/__init__.py
Files to Modify/Create
server/src/wled_controller/core/audio/demo_engine.py— New file: DemoAudioEngine + DemoAudioCaptureStreamserver/src/wled_controller/core/audio/__init__.py— Register DemoAudioEngine
Acceptance Criteria
DemoAudioEngine.is_available()is True only in demo mode- Virtual audio devices appear in audio device enumeration when in demo mode
read_chunk()returns valid float32 audio data that varies over time- Audio analyzer produces non-trivial frequency band data from the synthetic signal
Notes
- Synthetic audio should produce interesting FFT results (multiple frequencies, amplitude modulation)
- Keep it computationally lightweight
- Must conform to
AudioCaptureStreamBaseinterface exactly
Review Checklist
- All tasks completed
- Code follows project conventions
- No unintended side effects
- Build passes
- Tests pass (new + existing)