teamsiso/src/TeamsISO.Engine
Zac Gaetano 2c607a70ff
Some checks failed
CI / build-and-test (push) Failing after 31s
Audio peak: high-water mark across UI poll interval
The audio capture loop runs at ~50Hz publishing every buffer's peak via overwrite; the UI stats poll reads at 1Hz. With overwrite semantics the UI sees one of every ~50 audio frames per second — loud transients between reads were invisible to the VU meter.

New design: NdiReceiver maintains an atomic high-water mark, max-updated on each audio frame via CompareExchange CAS loop. IsoPipeline.GetStats now calls ConsumeAudioPeak() which atomically reads + resets to 0, so the next UI tick reflects the loudest sample seen in the next 1s window.

Added PeekAudioPeak() for non-consuming reads (e.g. external diagnostics dashboards that poll faster than the UI).

FakeNdiInterop gained a ReceiverAudioPeaks queue + CaptureAudioPeak override so tests can drive the audio path. 4 new tests in NdiReceiverTests cover: empty case, single-frame consume+reset, max-hold across 3 frames, no-frame leaves high-water mark untouched. 104 + 46 + 9 = 159/159 passing.
2026-05-10 14:04:04 -04:00
..
Controller feat(engine): refresh discovery affordance + idempotent re-Add handling 2026-05-10 09:41:29 -04:00
Discovery feat(engine): refresh discovery affordance + idempotent re-Add handling 2026-05-10 09:41:29 -04:00
Domain test+feat: App.Tests project + audio VU scaffold + MF recorder stub 2026-05-10 09:41:33 -04:00
Interop Wire engine audio peak metering — UI VU bars now animate 2026-05-10 13:28:26 -04:00
Logging fix: address review findings on tonight's commits 2026-05-08 01:01:00 -04:00
Persistence feat(persistence): add ConfigStore with atomic JSON writes and corruption-safe load 2026-05-07 15:12:01 +00:00
Pipeline Audio peak: high-water mark across UI poll interval 2026-05-10 14:04:04 -04:00
TeamsISO.Engine.csproj feat(logging): rolling file sink under %LOCALAPPDATA%\\TeamsISO\\Logs 2026-05-08 00:47:25 -04:00