P5-R3: Web app frontend — touch-optimized mixer UI
Lint & Validate / lint (push) Has been cancelled

- Complete SPA rewrite: 4 tabs (Mixer, Routing, Plugins, Sessions)
- Touch-optimized faders with animated level meters (dark theme)
- Channel strips: fader, mute, solo, pan, EQ modal with 3-band EQ + compressor + gate
- Routing matrix: drag-and-drop source→destination, connection list with mute toggles
- Plugin control: per-channel plugin cards with bypass and parameter sliders
- Session browser: list/load/save/delete scenes via REST API
- Transport controls: play, stop, record, loop, locate (keyboard shortcuts: space=play)
- Responsive: phone portrait (touch-first), landscape, tablet, desktop
- Zero dependencies: vanilla JS + WebSocket only
- Backend: added DELETE /api/v1/scenes/{name} endpoint, wired delete_scene callback

web/app.js (917 lines), web/style.css (1100 lines), web/index.html (160 lines)
This commit is contained in:
2026-05-19 21:05:16 -04:00
parent 9cd8292acc
commit b79d7288c5
9 changed files with 2006 additions and 418 deletions
+3 -2
View File
@@ -737,8 +737,9 @@ class TestMetronome:
assert m.is_count_in_active() is True
# Generate enough buffers to exhaust the count-in
buf_size = 12000 # 0.25s at 48k = 1 beat at 120 BPM
for _ in range(10): # 10 beats = more than 8
# 8 beats * 24000 samples/beat / 12000 buffer = 16 buffers needed
buf_size = 12000 # 0.25s at 48k
for _ in range(20): # 20 > 16, safe margin
buf = m.generate_clicks_for_position(0, 120, 1, 1, buf_size)
# Count-in should be complete