Naar inhoud
Inloggen

/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, segmentalSnrDb en signalToNoiseDb 0,52 tot 0,55 voor beide modellen. 0,50 is een munt opgooien.
  • sceneIntelligibility gaf 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.

VeldWat het zegtWaarden
sceneIntelligibilityEen proxy voor of een luisteraar de voorgrondstem kon volgen (niet voor spraakherkenning)clear, borderline, buried, of null onder twee meetbare frasen
sceneIntelligibilityScoreHetzelfde als een getal0 tot 1; clear vanaf 0,65, borderline vanaf 0,35
speechToBackgroundDbGemiddeld spraakniveau min de gemiddelde pauzevloerdB; 3 leest als 0, 18 leest als 1 in de score
sceneBackgroundWat de pauzes vultquiet, stationary (een machine), program (een tweede stem of muziek), unsteady, of null onder een seconde pauze
clipping.severityDigitale schade, aan de bron makkelijker te herstellen dan laterNone, Low, Medium, High
speechRatioAandeel van het bestand dat überhaupt spraak is0 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èneAchtergrondSpraak boven achtergrondVerstaanbaarheid
College, schoonunsteady (de zaal en het publiek)17,1 dBclear 0,94
plus luchtbehandeling op −20 dBstationary, toon op 120,8 Hz15,4 dBclear 0,85
plus een tweede spreker op −18 dBprogram15,2 dBclear 0,81
plus een clubtrack op −18 dBunsteady15,0 dBclear 0,80
plus een tweede spreker op −6 dBprogram10,0 dBborderline 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 buried terugkomen. Lees muziek elders op sceneBackground en speechRatio, of stuur het hier helemaal niet naartoe.
  • Niet gemeten op korte bestanden. Onder twee meetbare frasen is elk scenesveld null. Behandel null als “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