Een transcript vertelt wat er is gezegd. Bij interviews, vergaderingen en podcasts moet je ook weten wie het zei. Spraakonderzoekers noemen dat sprekerdiarisatie. Vanaf iPhone 1.8.5, Mac App Store 1.3.2 en de rechtstreeks gedownloade Mac-versie 1.5.1 voert Whisper Notes de diarisatie volledig op het apparaat uit.
In dit artikel leggen we uit hoe dat werkt, delen we onze benchmarkresultaten tegenover een referentie uit de cloud en beschrijven we de ene fout die we technisch niet konden wegwerken — plus de oplossing die we daarvoor kozen.
Wat de functie doet
Open een notitie — een opname, een geïmporteerd audio- of videobestand of een vergaderopname — en tik op de sprekerknop. Een paar seconden later heeft elke alinea een sprekerlabel en tijdstempel.
Sprekerlabels op Mac en iPhone. Tik op een zin om de audio vanaf dat moment af te spelen.
Labels beginnen als Spreker 1 en Spreker 2. Als je er één hernoemt, wordt het hele transcript bijgewerkt. Tik op een zin om de audio precies naar dat moment te verplaatsen; zo controleer je een citaat eenvoudig aan de hand van de oorspronkelijke stem.
Een spreker hernoemen werkt elke alinea in de notitie bij.
Bij vergaderopnamen start de sprekerherkenning automatisch zodra het gesprek is afgelopen; dit kun je uitschakelen in Instellingen. De labels blijven bij export behouden: Transcript met sprekers kopiëren zet ze op het klembord, en SRT- en VTT-bestanden nemen ze mee in de ondertiteling.
Diarisatie werkt met stemmen, niet met woorden. De functie gedraagt zich daarom hetzelfde in de ruim 100 talen die de app transcribeert.
Een model van 19 MB op de Neural Engine
Diarisatie beantwoordt de vraag ‘wie sprak wanneer?’ in drie stappen. Eerst wordt de audio in segmenten met spraak verdeeld. Daarna wordt elk segment omgezet in een stemafdruk: een compacte vector die de stem beschrijft, niet de woorden. Tot slot worden de afdrukken gegroepeerd; segmenten in dezelfde cluster krijgen hetzelfde label.
Whisper Notes gebruikt de community-1-pipeline van pyannote, omgezet naar Core ML zodat beide fasen op de Neural Engine draaien. De eenmalige download is 19 MB. Een gesprek van 5.7 minuten kost 2 tot 4 seconden op een Mac met M-chip.
Audio → spraaksegmenten → stemafdrukken → clusters → labels
Elke stap draait op het apparaat.
Dat is bij diarisatie nog belangrijker dan bij transcriptie. Een stemafdruk is biometrisch: die kan iemand identificeren zoals een vingerafdruk dat doet. Omdat de pipeline lokaal draait, worden de stemafdrukken van jou, je collega’s en je gesprekspartners op het apparaat berekend, gegroepeerd en weggegooid. Ze worden nooit ergens heen gestuurd.
Wat we hebben gemeten
Voor sprekerdiarisatie gebruiken we een vaste benchmark met twee bestanden. De referentie komt van een cloudservice voor ASR en diarisatie (ElevenLabs) en is handmatig gecontroleerd. De score wijst elke 10 ms spraak aan een spreker toe en kiest de beste koppeling tussen uitvoer en referentie. Twee bestanden vormen een kleine steekproef; we zien de cijfers daarom als indicatie, niet als definitief oordeel.
Het eerste bestand is de gangbare situatie: een Engelstalige podcast van vijf minuten met twee duidelijk verschillende stemmen. De meeste interviews, podcasts en één-op-éénvergaderingen klinken zo.
| Engelstalige podcast met twee sprekers (5 min) | Resultaat |
|---|---|
| Toewijzing op frameniveau (resolutie van 10 ms) | 96.7% |
| Nauwkeurigheid per zin (wat je leest) | 99.1% |
| Verwerkingstijd, Neural Engine uit de M-serie | 2–4 s |
De resterende 0.9% bestaat uit drie verschuivingen bij zinsgrenzen van samen 3.4 seconden — binnen de resolutie van de referentie zelf. Bij dit soort materiaal komt het lokale resultaat overeen met de cloudservice die onze referentie heeft gemaakt.
De moeilijke situatie
Het tweede bestand is bewust moeilijk: twee vergelijkbare mannenstemmen in een galmende ruimte, met een presentator die 19 keer kort tussenbeide komt, gemiddeld 2.3 seconden per keer. De gast spreekt 272 seconden; de presentator 43. Dit is het akoestische profiel dat sprekerdiarisatie in elke taal doet mislukken: vergelijkbare stemmen die korte beurten afwisselen.
Automatische clustering stort hier in. De twee stemafdrukken liggen zo dicht bij elkaar dat het algoritme ze samenvoegt en vrijwel het hele gesprek één label geeft. De opname blijkt een Chinese interviewshow te zijn, zodat we de voor de hand liggende hypothese konden testen: een taalspecifiek model zou beter presteren. Daarom vergeleken we in een CPU-pipeline twee sprekermodellen die specifiek op Chinese spraak zijn getraind:
| Model | Engelstalige podcast | Moeilijke situatie* | Tijd (5.7 min audio) |
|---|---|---|---|
| pyannote community-1 (ons model, Neural Engine) | 96.7% | 81–82% | 2–4 s |
| CAM++ (getraind op Chinees, CPU) | 93.9% | 81.2% | 36–103 s |
| ERes2NetV2 (getraind op Chinees, CPU) | — | 80.5% | 220–290 s |
* Toewijzing op frameniveau bij de moeilijke situatie met het aantal sprekers opgegeven. Zonder die informatie vallen alle modellen terug op één spreker.
Beide storten op dezelfde manier in en gebruiken 10 tot 100 keer zoveel rekenkracht. De moeilijkheid is akoestisch, niet taalkundig — de grens ligt bij wat huidige stem-embeddings kunnen onderscheiden, in elke taal.
Daarmee viel de voor de hand liggende oplossing af en kwam een andere in beeld: geef de pipeline een gegeven dat hij niet zelf kan afleiden, namelijk het aantal mensen in de ruimte. Met een opgegeven aantal (een menuoptie van 2 tot 6) gaat het moeilijke bestand van een mislukking naar 89% nauwkeurigheid per zin. Automatische detectie blijft de standaard, omdat die bij gangbaar materiaal goed werkt.
Sprekerdetectie opnieuw uitvoeren met het exacte aantal. In hetzelfde menu exporteer je SRT en VTT met sprekerlabels.
Korte tussenkomsten verfijnen
Met het aantal vastgelegd zat ongeveer de helft van de resterende fouten in tussenkomsten korter dan drie seconden. Een fragment van twee seconden geeft het embeddingmodel weinig signaal; bij snelle gesprekken neemt de stemafdruk bovendien iets van de aangrenzende spreker over.
Na de clustering bekijkt de pipeline daarom elke zin onder 3.5 seconden opnieuw. Hij berekent de stemafdruk opnieuw met een masker precies over de frames van die zin, vergelijkt die met het anker van elke spreker — het gemiddelde van diens langste spreekbeurten — en wijzigt het label alleen bij een overtuigend verschil. Het bestaande model wordt hergebruikt; er is geen extra download.
| Nauwkeurigheid per zin, van begin tot eind | Vóór verfijning | Erna |
|---|---|---|
| Moeilijke situatie (aantal sprekers opgegeven) | 89.0% | 94.8% |
| Engelstalige podcast (automatisch) | 98.5% | 99.1% |
De drempel is bewust voorzichtig: over beide bestanden wijzigde de verfijner 21 labels zonder nieuwe fouten te veroorzaken.
Beperkingen
• Labels verschijnen pas nadat een opname is afgelopen, niet tijdens een gesprek. Heb je tijdens een lopende vergadering live ondertiteling met sprekernamen nodig, dan is een cloudservice zoals Otter of Notta de juiste keuze.
• Als mensen door elkaar praten, krijgt elke zin maar één label.
• Vergelijkbare stemmen blijven moeilijk. De 94.8% op ons moeilijke bestand is met een opgegeven aantal sprekers het huidige plafond, geen opgelost probleem.
Beschikbaarheid
Sprekerherkenning zit in de eenmalige aankoop van $6.99, samen met de drie transcriptiemodellen van de app — Parakeet V3, Whisper Large V3 Turbo en SenseVoice — en lokale AI-bewerking. Er is geen apart abonnement en geen account nodig.
• iPhone: App Store, versie 1.8.5 of nieuwer.
• Mac App Store: versie 1.3.2 of nieuwer.
• Directe download voor Mac (DMG): versie 1.5.1 of nieuwer via whispernotes.app, met een gratis proefversie.
Lees ons artikel over offline transcriptie van vergaderingen voor meer uitleg over vergaderopnamen.