SpeakerScope - Live Who-Said-What Transcription

Created by team Zrald on September 30, 2026

SpeakerScope answers the question flat transcripts can't: who said what, while they are saying it. The problem: real-time speech-to-text gives you the words, but without speaker attribution a meeting transcript is unusable for recaps, QA, or action items. Cloud diarization services exist, but they post-process audio after upload, bill per minute, and require raw audio to leave the device — a non-starter for privacy-sensitive meetings. The solution: SpeakerScope is a Windows desktop application written in native C++20 that runs two engines in parallel on one audio stream. AssemblyAI Universal Streaming (v3 WebSocket, 16 kHz PCM, word-level timestamps) provides best-in-class transcription. NVIDIA Nemotron-3-Diarization runs entirely on-device through the audio.cpp GGUF runtime — no GPU, no Python — labeling up to 8 concurrent speakers with live open-turn streaming. A custom fusion engine aligns both streams in the timestamp domain: every AssemblyAI word is attributed to the speaker channel active at its midpoint, producing a live, color-coded transcript. Users see animated speaker lanes (Person 1–8), can rename speakers, filter the transcript per person, and export per-speaker or combined transcripts. Engineering highlights: we patched audio.cpp's streaming decoder to emit open (still-growing) turns so labels appear while people talk, not only after pauses; tuned the chunk geometry to reach 7.6x realtime on a 12-core CPU; and designed a GlobalSpeakerResolver layer (voice-embedding clustering) that extends the 8-channel concurrency limit to unlimited total speakers. Verified: 117/117 automated tests, plus a headless end-to-end simulation streaming a 55.8s 4-voice meeting through real AssemblyAI and Nemotron inference, producing a correctly attributed, overlap-flagged transcript. Stack: C++20, CMake/vcpkg, Dear ImGui, miniaudio, IXWebSocket, AssemblyAI Streaming v3, audio.cpp (GGUF), Nemotron-3-Diarization, GoogleTest.

Category tags: