/docs · VoiceLab · 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.
Bijgewerkt 13 okt 2026
Het profiel pitch van POST /v1/analyze/profile beantwoordt drie vragen over een stem: waar zit hij, hoeveel beweegt hij en hoe schoon is hij. Het is een betaald preset, zoals elk profiel behalve basic.
curl https://audiolab.tools/v1/analyze/profile \
-H "Authorization: Bearer $AUDIOLAB_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/voice.wav", "profile": "pitch"}'
Wat er terugkomt
| Lens | Wat het is | Status |
|---|---|---|
pitch.f0Hz | De mediaan van de grondfrequentie van de stemhebbende delen, 70 tot 600 Hz. Ongeveer 85 tot 180 Hz bij een man, 165 tot 255 Hz bij een vrouw. | Validated |
pitch.f0LowHz, pitch.f0HighHz | Het 10e en 90e percentiel van de toonhoogte: het bereik dat de stem gebruikte. | Proxy |
pitch.f0VariationSemitones | Hoeveel de toonhoogte beweegt, in halve tonen. Voorgelezen spraak zat tussen 2,2 en 4,3. | Proxy |
pitch.voicedShare | Het aandeel van de frames met geluid dat een toonhoogte heeft. Voorgelezen spraak zat tussen 0,49 en 0,76. | Proxy |
pitch.hnrDb | De harmonics-to-noise ratio: hoeveel van het stemhebbende geluid zich van periode tot periode herhaalt, in dB. Voorgelezen spraak zat tussen 8 en 16 dB. | Validated |
pitch.f0Track | De toonhoogte om de 10 ms, met series: true. | Proxy |
Elk frame telt mee met zijn energie, dus een brom die 15 tot 25 dB onder de stem zit, verschuift de mediaan niet. De toonhoogte wordt elke 10 ms gevolgd met de methode van Boersma (1993), die ook Praat gebruikt, met een tweede ronde die het bereik op de spreker afstemt.
Hoe ver je het kunt vertrouwen
Dit alles is getoetst op 13 oktober 2026, met de criteria opgeschreven vóór de testdata bestond (PREREG-PITCH.md in de engine-repository), op data waarop de maat niet was ontwikkeld.
- De toonhoogte, op 1.092 gebouwde stemmen (een pulsreeks door vijf klinkers, zeven condities): geen grove fouten (meer dan 20 procent ernaast) op schone opnames, geen onder ruis op 20 en 10 dB en hoogstens 1,9 procent over een telefoonlijn. De mediane toonhoogte van een opname week mediaan 0,31 procent af bij zinnen en 0,07 procent bij aangehouden klinkers. De twee volgers die we al hadden, die in de TuneLab-app en die van de zangcoach op deze site, maakten 2,9 tot 3,8 procent grove fouten op dezelfde zinnen en aangehouden klinkers.
- Op echte spraak, 40 lezingen van 30 s uit LibriSpeech: 98,0 procent van de frames die deze volger en een onafhankelijke (YIN) allebei stemhebbend noemen, komt binnen 20 procent overeen. Dat is overeenstemming met een tweede volger, geen laryngograaf. 2,9 procent van de stemhebbende frames ligt boven 1,8 keer de mediaan van hun lezing, waarschijnlijk een hogere harmonische in een luide klinker.
- De harmonics-to-noise ratio, op exact periodieke stemmen met witte ruis in een bekende verhouding: 18 van 19 opnames tussen 8 en 28 dB binnen 1,5 dB van de waarheid, en 5 van 5 tussen 8 en 20 dB binnen 2 dB over een telefoonlijn. Boven ongeveer 28 dB (22 dB op een telefoonlijn) kan hij te laag lezen. Jitter en shimmer verlagen hem ook, omdat een onregelmatige stem niet periodiek is.
pitch.voicedShare hangt af van niveau en ruis: tegen de schone versie van dezelfde opnames bewoog hij tussen plus 13 en min 28 punten over 32 situaties met ruis, galm en niveau, en constante ruis met een toon erin telt als stemhebbend. Daarom is het een proxy.
Wat het achterhoudt: jitter en shimmer
Het register heeft pitch.jitterLocal en pitch.shimmerLocal, de lokale jitter (hoeveel naburige perioden verschillen) en shimmer (hoeveel naburige cycli in amplitude verschillen). Ze worden niet aangeboden via de API of de MCP-server, en het antwoord laat ze weg.
We hebben ze op dezelfde manier getoetst. Op gebouwde aangehouden klinkers lazen ze 1,2 en 1,0 tot 1,1 keer de waarheid, maar de rangorde tegen de waarheid miste de vooraf gestelde criteria met kleine marges (een rangcorrelatie van 0,74 tegen 0,75, een mediane fout van 0,66 tegen 0,6 punt), en in gebouwde lopende spraak zakte de rangcorrelatie over een telefoonlijn naar 0,61. Onder ruis op 20 dB lazen ze tot 1,5 keer te hoog, dus ze worden sowieso alleen op rustige opnames gegeven.
Op echte lopende spraak lezen ze 2,3 procent en 8,2 procent (de mediaan van 35 lezingen), twee tot drie keer de klinische normen van ongeveer 1 en 4 procent, die voor een aangehouden klinker gelden. We weten niet wat daar de ware waarden zijn. Een tweede toets op nieuwe data met een nieuwe voorregistratie kan dat veranderen; zolang die er niet is, blijven ze eruit.
Wat dit niet is
Jitter en shimmer zeggen hoe regelmatig de stembanden trillen. Niets hier zegt iets over stotteren: stotteren is een onderbreking in de tijd en we hebben geen gelabelde data om het te toetsen. De waarden zijn geen oordeel over iemands stem, en zang en instrumenten vallen buiten het bereik (het plafond is 600 Hz).
Verder lezen
Volgende in VoiceLab docs
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 waarom de echo- en slapbackmaat niet wordt aangeboden.
More in VoiceLab docs
- 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.
- Deep
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.
- 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.