Two-Channel Meeting Capture
Two-channel local capture. Transcription and diarisation never leave the machine
Built with
Not public
The repository is small enough to be uninteresting on its own, and the recordings it was built against are client calls.
Recording a call on a Mac is easy until it is not. The naive setup captures your microphone and nothing else, and the ways it silently breaks are worse than the ways it obviously breaks.
This builds a macOS aggregate device that captures the far end and your own microphone as two separate channels, so they can be transcribed and attributed independently. Whisper handles transcription locally and pyannote handles diarisation, so nothing leaves the machine.
The interesting part is the defensive work. A preflight tone check confirms the routing before the call rather than after it. Output device selection is automatic, because reconnecting headphones will quietly steal the system output and take the far end with it. A watchdog re-pins the device every ten seconds and raises a notification if the far-end channel goes silent while you are still talking. Stopping the recording prints a per-channel verdict.
That matters because a silent channel is not an empty transcript. Whisper hallucinates plausible speech from near-silence, so an undetected routing failure produces a confident transcript of a conversation that never happened.
It is in daily use and it is not finished. On a 53-minute call recorded in speakers mode, diarisation attributed 1,056 turns to a single speaker, me, because the far-end channel was 25 times quieter than the microphone channel (mean norms of 0.000021 against 0.000525) and the model reasonably concluded there was only one person in the room. The channel evidence made the cause obvious within minutes, which is the argument for capturing two channels in the first place. The bug itself is still open.
What this does not show
- Diarisation still mislabels speakers on speakers-mode recordings. Diagnosed, not fixed.
- macOS only, and dependent on a specific aggregate-device setup.
- Built for one person's calls. No accuracy benchmark has been run against a labelled dataset.