docs: record LevelMeterFab landing in COMPLETED.md and update CLAUDE.md

This commit is contained in:
daniel-c-harvey
2026-06-08 07:21:12 -04:00
parent cef4d243f3
commit f1da2382d2
3 changed files with 11 additions and 201 deletions
+10
View File
@@ -6,6 +6,16 @@ Newest entries at the top. Group by phase/wave header (mirroring `PLAN.md` / `CM
---
## LevelMeterFab — Reactive audio-level-tint FAB
**Status:** Fully landed on 2026-06-08 (feature complete, component + integration, merged to dev).
- **What:** A new `LevelMeterFab` Blazor component that replaces the static music-note FAB in the minimized player dock (`AudioPlayerBar.razor`). Reactively tints the icon based on live audio output level: green (−∞ to 18 dB), yellow (18 to 6 dB), orange (above 6 dB). When idle (no track, paused, stopped), reverts to static untinted state.
- **Why it matters:** The minimized dock is always visible in the UI; adding a live level indicator gives real-time visual feedback on the audio stream's loudness, and the three-band color coding immediately communicates whether the output is quiet, normal, or hot.
- **Implementation:** No TypeScript or `AudioInteropService` changes — reuses the existing spectrum callback infrastructure (`StartSpectrumAnimationAsync` / `StopSpectrumAnimationAsync`). The component subscribes to live spectrum buckets at ~30fps, reduces the peak bucket to a reconstructed dB value via the inverse of the spectrum normalization formula, applies attack-fast/release-slow smoothing, and updates the icon color class. CSS transitions on the color (120ms ease-out) smooth the band changes. Follows the identical state-subscription pattern as `SpectrumVisualizer` — observes `IPlayerService.StateChanged` to toggle animation on play and off on pause/stop/track-end.
---
## Phase 2.5 — "Stream Now" — random-track instant play
**Status:** Fully landed on 2026-06-07 (feature complete, endpoints + service methods + menu wiring, merged to dev).