The problem with the convenient option
The quickest way to get meeting notes is to let a cloud note-taker join the call. It is also the option that sends every word your team says — client names, prices, personnel matters — to a third party, and in a German or Norwegian organisation that is a conversation with the works council and the data-protection officer before it is a conversation about features.
The alternative is unglamorous and works: run the analysis on the machine the recording is already on.
What the pipeline does
Everything below runs locally through AudioAnalyzer, CPU only, no network call and no account:
- Decode the recording — any of 20+ formats, including the m4a a phone or a conferencing tool produces.
- Diarize it: speech-activity and speaker-change segmentation, one speaker embedding per segment, clustering into "who spoke when".
- Transcribe with Whisper on the same decoded buffer, so every transcript segment already carries the speaker it belongs to.
- Name the speakers: enrolled voiceprints turn
SPEAKER_00into a person, across recordings; whatever stays unnamed can be renamed by hand from a small mapping file.
The result is a timecoded transcript where each line says who said it — the thing you actually want when writing minutes or when checking what was agreed three weeks ago.
What it costs in practice
Measured on a 53-minute German meeting with five speakers, on an ARM CPU with eight threads:
- 2:44 wall time for the diarization pass — about twenty times faster than listening — at roughly 3 GB peak memory.
- 9–10% diarization error against a reference, with all five real speakers correctly separated, plus a few tiny leftover clusters amounting to about one percent of talk time.
- Whisper transcription is the slower half; with checkpointing it writes results as it goes, so an interrupted run keeps what it already produced.
What you have to know to get that
This is the part product pages leave out. The clustering threshold decides everything, and its default is wrong for meeting audio: at the out-of-the-box setting the same recording produced 146 "speakers" instead of five. Tuned, it produced five. Three further lessons from the same test:
- Thresholds are specific to the embedding model — a different model needs different values and in our test did worse at every setting.
- Fixing the speaker count instead of tuning the threshold made things worse: one cluster swallowed 78% of the speech.
- Quiet participants get merged into louder ones. That is where voiceprints earn their keep: enrolling the quiet person by name recovered them in a recording where clustering alone had lost them.
Voiceprints are biometric data
A voiceprint identifies a person the way a fingerprint does, and GDPR Article 9 treats it that way. The implementation is built around that: enrolment is explicit and opt-in, the store is a single file that lives only where you point it, each entry records which model produced it, one command deletes a person, and a store is never something to commit to a repository. Consent before enrolling someone else's voice is not a formality — it is the condition for using this at all.
For a company that means: fine for your own notes with your own team's agreement, a documented process before it touches customers' or third parties' voices.
Where this fits
Small and medium companies get meeting documentation without handing recordings to anyone. Archives and media houses get the same machinery pointed at interviews and raw footage — the same tools we use to catalogue untagged recordings. Both run on a laptop, a server in your own rack, or a small ARM box under a desk.
Interested in a setup for your team? Office@ITs4BM.com.