66c912e2799cb622a6fa810675281d7b261a7862
The mixer ran at the fixed 20ms playback cadence and pushed an AudioLevels event every tick — ~50/sec — each waking the iced runtime for a full re-render. Levels are now peak-held per peer across a 100ms window and emitted once per window (~10/sec), cutting UI-bound events 5x. Peak-hold (rather than last-sample) means a brief speech transient inside a window still registers, so the speaking indicator stays responsive. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>