On-device Streaming STT

Welke spraak-naar-tekst-engine kies je voor live, lokale transcriptie op de iPhone — en welke architectuur eronder beslist over de kwaliteit? Een keuzehulp plus de lessen uit het zelf bouwen.

Primair-empirisch iPhone 17 Pro Max · ANE Nederlands · on-device Gemeten t/m 7 jun 2026 Lawaai-shootout nog open

Dit gaat niet over kant-en-klare dicteer-apps maar over de modellen en de streaming-architectuur eronder — opgedaan bij het bouwen van een on-device Nederlandse transcriptie-app en zijn experimentele forks (Apple, Whisper, Parakeet). De cijfers zijn eigen metingen op één toestel; gebruik ze als startpunt, niet als wet.

01  Keuzehulp — welke engine past?

Vier vragen. De aanbeveling weegt taalondersteuning, latency-eis, download-budget en kwaliteit. Lawaai is (nog) informatief — die meting staat open.

1 · Welke taal moet hij verstaan?
Nederlands Engels Andere EU-taal / meerdere
2 · Hoe belangrijk is lage latency? — woord-voor-woord vs. een paar seconden lag
Kritisch — moet meteen mee Mag een paar seconden naijlen
3 · Download-budget voor het model?
Geen — alleen ingebouwd ~600–700 MB ok Tot ~3 GB ok
4 · Wat weegt zwaarder?
Hoogste woordkwaliteit Lichtst & snelst
5 · Gebruiksomgeving? — informatief, beïnvloedt de keuze (nog) niet
Vooral stil Hard lawaai (festival, café)
02  De vier engines op een rij

Tik een kaart open voor de details. Latency hangt aan het streaming-type, niet aan de modelgrootte (zie les 03).

Apple Speech — SFSpeechRecognizer
De klassieke iOS-spraak-API · de engine waar productie in de praktijk op draait
INGEBOUWD
NL Streaming echt (woord-voor-woord) Latency laagst Download 0 MB
Details ▾

+ De latency-winnaar voor Nederlands. Echte streaming-recognizer: vrijwel geen extra vertraging, toont woord voor woord. Regelt audio-sessie en error-recovery zelf.

Oude API met scherpe randen: een silence-timeout, een ~60s-tasklimiet, en de beruchte stille-resume-bug (na een stilte valt de herkenning soms stil; speelt per 2026-06 nog steeds, lastig reproduceerbaar). Veel app-complexiteit (task-rotatie, generation-id's, utterance-reset) bestaat puur om die grilligheid te temmen. Closed-box: geen taal-forcing of tuning-knoppen.

Apple SpeechAnalyzer (iOS 26)
De moderne opvolger — maar kent (nog) geen Nederlands
GEEN NL
NL Streaming echt Latency laagst Download 0 MB
Details ▾

+ De moderne, snelle opvolger van SFSpeechRecognizer; echte streaming, ingebouwd in iOS 26.

SpeechTranscriber.supportedLocales bevat geen Nederlands (geverifieerd 2026-06-07: de check faalt op nl-NL). Voor een NL-app dus onbruikbaar — je valt automatisch terug op de klassieke SF-engine. Voor Engels en een aantal andere talen wél de beste keuze.

Whisper — WhisperKit (large-v3-turbo q)
De kwaliteitswinnaar in stilte · grootste woordenschat
~632 MB
NL Streaming nee → re-transcribe Latency ~1s vloer Download 632 MB – 2,9 GB
Details ▾

+ Hoogste kwaliteit in stilte. Grootste woordenschat en sterkste taalmodel → vloeiend Nederlands, en repareert met volle context woorden achteraf (gemeten: "stemmusellaat" werd over twee passes "stemisolatie").

Twee inherente prijskaartjes: niet-monotoon (een latere pass kan een al-correct woord terugdraaien — "Claude" → "Kloot") en proper-noun-drift naar de NL taal-prior ("Parakeet" → "parakiet"). Geen echte streaming → de re-transcribe-loop is verplicht. Hallucineert op stilte → de energie-poort is verplicht (zie 04).

NVIDIA Parakeet — FluidAudio (TDT-0.6b-v3)
Snel, volledig lokaal · 25 EU-talen · NL pseudo-streaming
~600–700 MB
NL ✓ (forced) Streaming echt (EN) / pseudo (NL) Latency ≈ interval Download 600–700 MB
Details ▾

+ Volledig lokaal, snelle TDT-inference, 25 EU-talen met auto-detect. Het echte streaming-model (EOU) is laagste latency — maar Engels-only.

Voor Nederlands zit je vast aan het v3-batch-model in een pseudo-streaming-opzet (re-transcribe). Zonder forcing gokt het meertalige model de taal verkeerd bij koude inzet (Cyrillische rotzooi). Oplossing: NL forceren via de lager-niveau API (language: .dutch) plus de fix-vlaggen melChunkContext: false en dualDecodeArbitration: true tegen dropped clauses en Engels-bias.

03  Architectuur verslaat engine

De grootste les staat los van welk model je kiest. Beide niet-Apple-engines wonnen pas toen we de "slimme streaming"-aanpak (woord-voor-woord bevestigen via longest-common-prefix) lieten vallen. Het patroon dat overbleef is engine-agnostisch.

Patroon

Re-transcribe + commit-op-pauze

Transcribeer elke ~0,5s het hele lopende segment opnieuw, met volle context. Zodra de tekst ~1,6s niet meer verandert (de spreker pauzeert) → vastzetten, schoon segment beginnen. Geen verloren zinsbegin na stilte; bij verkeerde segmentatie raakt nooit tekst kwijt. De "slimme" aanpak faalde juist op wat een gesprek definieert: stilte, dan praten.

Poort

Stilte-poort op energie, niet op confidence

Whisper hallucineert op stilte ("Dank u wel", "Bedankt voor het kijken"). Poort op de piek-energie (RMS), niet op confidence. Gemeten: een hallucinatie had confidence 0,71 (hoog) bij energie 0,0005 (stilte). Een confidence-poort liet 'm door; de energie-poort niet. Speel ermee in 04 ↓.

Latency

Hangt aan het streaming-type, niet de modelgrootte

Echte streaming (Apple) voegt vrijwel geen latency toe. Re-transcribe heeft een latency-vloer = één transcriptie-pass. Verrassend: zelfs het zware Whisper-large-v3-turbo q herleest een groeiend segment in ~1s, vlak tot 20s-segmenten (de ANE kauwt het weg). In lawaai kan een lagere confidence extra trage fallback-passes triggeren.

Gevoel

"Rustiger" is niet "sneller"

Een re-transcribe-engine voelt rustiger dan Apple, maar is objectief niet sneller — Apple streamt echt en heeft lagere latency. De rust komt van lagere update-churn: een paar bezonken updates in plaats van een zenuwachtige woord-voor-woord-stroom die zichzelf constant herschrijft.

04  Waarom een energie-poort en geen confidence-poort?

Elke stip is een gemeten segment: echte spraak of een stilte-hallucinatie. Kies waarop de poort filtert en sleep de drempel. Doel: alle groene stippen toelaten én alle rode tegenhouden.

Echte spraak Stilte-hallucinatie Drempel
05  Het strategische venster: het 3-lagen NL-gat

Apple's nieuwste spraakstack laat Nederlands links liggen

Live Captions (consumenten-functie)geen NL
SpeechAnalyzer (nieuwe iOS 26-engine)geen NL
SFSpeechRecognizer (de oude API)wél NL

Alleen de oudste van de drie doet Nederlands on-device. Dat is precies het venster waarin een on-device NL-transcriptie-app waarde heeft: de moderne, snelle engine bestaat, maar niet voor deze taal — dus je bouwt óf op de grillige oude API, óf je brengt je eigen model mee (Whisper / Parakeet). Bron consumer-talen: Apple feature availability.

06  De openstaande vraag: lawaai
Al het bovenstaande is gemeten in een stille kamer, waar de confidences hoog (0,8–0,98) bleven. De échte gebruikssituatie is hard lawaai. De shootout die nog moet: wie verstaat Nederlands het beste in hard lawaai, met acceptabele latency — Apple, Whisper of Parakeet? Stand 2026-06-07: ongetest. Let bij Whisper op de fallback-count (lagere confidence in lawaai → extra trage decode-passes). Tot die meting er is, baseert de keuzehulp zich op stille-kamer-resultaten.