/docs · VoiceLab · Practical
Lees de audio voor je transcribeert
Eén aanroep voor het model: wat de scènevelden je over een bestand vertellen en wat niet, met de getallen uit onze eigen transcriptietoets.
Bijgewerkt 10 okt 2026
Een transcript kan fout zijn om redenen die al in de audio zaten voordat het model haar zag: een geclipte upload, een tweede stem die over de boodschap heen praat, een spreker die maar een paar dB boven een luide ruimte uitkomt. Een meting vóór het model kan dat laten zien. Ze kan je niet vertellen of het transcript klopt, en deze pagina zegt waar die grens ligt, met getallen.
Wat de velden niet voorspellen
We hebben het getoetst, op 10 oktober 2026. Zestien verzonnen Nederlandse burgermeldingen (straat en nummer, plaats, achternaam, telefoonnummer, e-mailadres), voorgelezen door drie synthetische stemmen in 13 condities: schoon, telefoonband, straatruis en brabbelruis (babble) op 10 en 5 dB, een televisie, vier gemeten nagalmtijden, en combinaties. Dat zijn 624 opnames en 1.248 transcripties door Whisper small en Whisper large-v3-turbo, 48 per conditie en model, dus een marge van ongeveer 13 punten.
- De SNR-maten voorspelden de fouten niet. Voor “straat, nummer of plaats fout” was de AUC van
worstPhraseSnrDb,segmentalSnrDbensignalToNoiseDb0,52 tot 0,55 voor beide modellen. 0,50 is een munt opgooien. sceneIntelligibilitygaf valse alarmen. Het las niet helder (borderline of buried) op 100 procent van de opnames met straatruis op 10 en 5 dB en op 94 tot 100 procent met brabbelruis, terwijl Whisper small de locatie nog steeds goed had op 58 tot 67 procent ervan (schoon: 69) en large-v3-turbo op 71 tot 85 procent (schoon: 81). Over alle opnames markeerde het er 58 procent; van de markeringen had 47 procent (small) of 25 procent (large) een echte locatiefout.- Wat de fouten verklaarde waren de woorden. Op schone opnames kwamen straat, nummer en plaats in 69 procent (small) of 81 procent (large) van de gevallen goed terug, een e-mailadres dat in woorden werd uitgesproken in 21 of 35 procent, een telefoonnummer in 83 of 88, een achternaam in 73 of 81. De keuze van het model woog zwaarder dan de audio: 1,0 s nagalm met brabbelruis gaf 17 procent voor small tegenover 54 procent voor large.
De grenzen van de toets: synthetische stemmen, alleen Whisper, een gesimuleerde telefoonband, Nederlandse tekst, 48 opnames per conditie en model. Echte sprekers, andere herkenners en andere talen zijn niet getoetst. Weiger dus geen bestand op sceneIntelligibility of op een SNR alleen. Ze beschrijven het signaal.
De aanroep
POST https://audiolab.tools/v1/voicelab/qa met een Bearer-sleutel. Stuur het bestand als multipart/form-data (file), of als JSON met een publieke url. Het antwoord is de volledige VoiceLab-analyse; het deel dat hier telt, ingekort, voor een college met een tweede spreker 18 dB achter de boodschap:
{
"sceneBackground": "program",
"sceneProgramScore": 0.92,
"sceneGapHarmonicShare": 0.33,
"speechToBackgroundDb": 15.2,
"sceneIntelligibility": "clear",
"sceneIntelligibilityScore": 0.81
}
Lees het als een zin: er is een tweede stem in de pauzes (program, een derde van de pauze-energie is bewegende toonhoogte), de boodschap zit 15 dB erboven, en de stem op de voorgrond leest als te volgen door een luisteraar. Dat zegt iets over het signaal, niet over wat een herkenner ermee zal doen.
| Veld | Wat het zegt | Waarden |
|---|---|---|
sceneIntelligibility | Een proxy voor of een luisteraar de voorgrondstem kon volgen (niet voor spraakherkenning) | clear, borderline, buried, of null onder twee meetbare frasen |
sceneIntelligibilityScore | Hetzelfde als een getal | 0 tot 1; clear vanaf 0,65, borderline vanaf 0,35 |
speechToBackgroundDb | Gemiddeld spraakniveau min de gemiddelde pauzevloer | dB; 3 leest als 0, 18 leest als 1 in de score |
sceneBackground | Wat de pauzes vult | quiet, stationary (een machine), program (een tweede stem of muziek), unsteady, of null onder een seconde pauze |
clipping.severity | Digitale schade, aan de bron makkelijker te herstellen dan later | None, Low, Medium, High |
speechRatio | Aandeel van het bestand dat überhaupt spraak is | 0 tot 1 |
Gebruiken zonder bestanden te weigeren
const KEY = process.env.AUDIOLAB_API_KEY;
async function check(url) {
const v = await fetch('https://audiolab.tools/v1/voicelab/qa', {
method: 'POST',
headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ url }),
}).then((r) => r.json());
const notes = [];
if (v.speechRatio < 0.2) return { route: 'no-speech', notes }; // niets te transcriberen, factureer geen minuten
if (v.clipping.severity === 'High') notes.push('clipped'); // schade aan de bron
if (v.sceneBackground === 'program') notes.push('second-voice-or-music'); // er praat iets achter de boodschap
if (v.sceneIntelligibility === 'buried') notes.push('voice-close-to-background');
return { route: 'transcribe', notes }; // hang de notities aan het transcript, laat een mens beslissen
}
Twee uitkomsten zijn veilig om op te handelen: een bestand met bijna geen spraak, en een transcript dat meedraagt wat de audio liet zien. Al het andere is informatie om aan het transcript te hangen, geen reden om het bestand te weigeren. Het null-geval doet ertoe: een bestand met één frase is geen slecht bestand, het is een niet-gemeten bestand.
Voorbeeldmetingen
Dit zijn voorbeeldmetingen, geen kalibratie. De labels zijn met de hand gezet op dit materiaal en zijn niet gevalideerd tegen luisteraars of tegen spraakherkenning. Een college opgenomen in een zaal met publiek, daarna gemengd met de dingen die achter een boodschap zitten:
| Scène | Achtergrond | Spraak boven achtergrond | Verstaanbaarheid |
|---|---|---|---|
| College, schoon | unsteady (de zaal en het publiek) | 17,1 dB | clear 0,94 |
| plus luchtbehandeling op −20 dB | stationary, toon op 120,8 Hz | 15,4 dB | clear 0,85 |
| plus een tweede spreker op −18 dB | program | 15,2 dB | clear 0,81 |
| plus een clubtrack op −18 dB | unsteady | 15,0 dB | clear 0,80 |
| plus een tweede spreker op −6 dB | program | 10,0 dB | borderline 0,45 |
En een kamerrecording gemaakt met een telefoon, waar de afspeelluidsprekers maar 5 tot 7 dB boven de eigen vloer van de ruimte uitkwamen: elke take las buried, scores 0,12 tot 0,25. Of een herkenner het zou hebben gered, is niet getoetst.
De score is de zwakste van twee poten: het slechtste tiende van de signaal-ruisverhouding per frase, en de spraak boven de pauzevloer, beide zo afgebeeld dat 3 dB als 0 leest en 18 dB als 1, daarna verlaagd voor een galmende ruimte en voor clipping. Ze is bewust behoudend: één slecht stuk frasen trekt het hele bestand omlaag.
Wat het getal niet is
- Geen voorspeller van transcriptienauwkeurigheid. Zie de toets hierboven.
- Geen STI. Het is een proxy opgebouwd uit niveaus, frase voor frase. Het vertelt je of de stem ver genoeg boven wat erachter zit uitkomt; het modelleert het oor van een luisteraar niet en is niet getoetst tegen luisteraars.
- Geen spraakdetector voor muziek. De frasedetector leest gezongen zang als spraak, dus een muziekbestand met zang kan als
buriedterugkomen. Lees muziek elders opsceneBackgroundenspeechRatio, of stuur het hier helemaal niet naartoe. - Niet gemeten op korte bestanden. Onder twee meetbare frasen is elk scenesveld
null. Behandelnullals “niet gemeten”, nooit als “goed” of “slecht”. - Gelezen na de eerste 0,4 s van elke pauze, zodat de staart van het laatste woord niet als achtergrond telt. Pauzes korter dan een seconde tellen helemaal niet mee.
Achterstanden en agents
Voor een achterstand draait POST /v1/batch dezelfde route over maximaal 20 URL’s in één aanroep en geeft één resultaat per URL terug, op volgorde. Voor een agent geeft de MCP-tool analyze_voice dezelfde velden voor een url (of een lokaal path met het npm-pakket, dat het bestand op je machine leest en het voor de meting naar de API uploadt). De gratis tier bevat 1.000 aanroepen per maand, genoeg om te zien welk aandeel van je instroom elke notitie draagt voordat je iets beslist.
Wil je dezelfde getallen eerst met de hand zien? Sleep een bestand op de werkbank en open de groep Scene in het tabblad Voice, of lees de definities en de status van elke scene.*-lens op /lenses.
Volgende in VoiceLab docs
Wat het envelope-verval na spraak werkelijk meet →
We bouwden een goedkope galmschatter uit het verval na elke frase en toetsten hem tegen 24 gemeten ruimtes. Hij meet geen galm. Hier staan de cijfers en wat we hebben veranderd.
More in VoiceLab docs
- Intro
Voice AI: tien vragen, beantwoord
Wat AudioLab meet voor een voice-agent, wat niet, waar je audio heen gaat, hoe een oordeel tot stand komt en wie de limieten bepaalt, hoe je versies vergelijkt en de checks automatiseert, en wat gratis is.
- Intro
Waarom stopwoorddichtheid belangrijker is dan het aantal stopwoorden
Het tellen van "uhms" is de verkeerde maatstaf. Dichtheid laat zien of ze een probleem vormen.
- Practical
Een pragmatisch loudness-doel voor podcasts
Het juiste loudness-doel voor gesproken-woordpodcasts is niet hetzelfde als voor muziek. Hier zijn de getallen en het waarom.
- Practical
Meet met één klap hoe lang een ruimte nagalmt
Het profiel room leest de nagalmtijd per octaafband uit één klap, een ballonknal, een impulsrespons of een sweep. Hoe je het opneemt, hoe je het antwoord leest en hoe ver de cijfers getoetst zijn.
- Practical
Toonhoogte en stemkwaliteit: wat het profiel geeft en wat het achterhoudt
Het profiel pitch leest waar een stem zit, hoeveel hij beweegt, hoe stemhebbend de opname is en hoe schoon de stem is. De testcijfers, de grenzen en waarom jitter en shimmer nog niet worden aangeboden.
- Practical
Verloren pakketten in een opname vinden
Het profiel chain telt de gaten van digitale stilte die een verloren pakket midden in spraak achterlaat. Hoe het beslist, de testcijfers, wat het niet ziet en de echo- en slapbackmaat.