Skip to content
Sign in

/docs · VoiceLab · Practical

Pitch and voice quality: what the profile gives and what it holds back

The pitch profile reads where a voice sits, how much it moves, how voiced the recording is and how clean the voice is. The test numbers, the limits, and why jitter and shimmer are not offered yet.

Updated Oct 13, 2026


The pitch profile of POST /v1/analyze/profile answers three questions about a voice: where does it sit, how much does it move, and how clean is it. It is a paid preset, like every profile except 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"}'

What comes back

LensWhat it isStatus
pitch.f0HzThe median fundamental frequency of the voiced parts, 70 to 600 Hz. About 85 to 180 Hz for a man, 165 to 255 Hz for a woman.Validated
pitch.f0LowHz, pitch.f0HighHzThe 10th and 90th percentile of the pitch: the span the voice used.Proxy
pitch.f0VariationSemitonesHow much the pitch moves, in semitones. Read speech sat between 2.2 and 4.3.Proxy
pitch.voicedShareThe share of the frames with sound that carry a pitch. Read speech sat between 0.49 and 0.76.Proxy
pitch.hnrDbThe harmonics-to-noise ratio: how much of the voiced sound repeats itself period to period, in dB. Read speech sat between 8 and 16 dB.Validated
pitch.f0TrackThe pitch every 10 ms, with series: true.Proxy

Every frame counts with its energy, so a hum 15 to 25 dB under the voice does not move the median. The pitch is tracked every 10 ms with the method of Boersma (1993), the one Praat uses, with a second pass that fits the range to the speaker.

How far to trust it

All of this was tested on 13 October 2026 with the criteria written down before the test data existed (PREREG-PITCH.md in the engine repository), on data the measure was not developed on.

  • The pitch, on 1,092 constructed voices (a pulse train through five vowels, seven conditions): no gross errors (more than 20 percent off) on clean recordings, none under noise at 20 and 10 dB and at most 1.9 percent over a telephone line. The median pitch of a recording was a median 0.31 percent off on sentences and 0.07 percent on held vowels. The two trackers we already had, the one in the TuneLab app and the one of the singing coach on this site, made 2.9 to 3.8 percent gross errors on the same sentences and held vowels.
  • On real speech, 40 readings of 30 s from LibriSpeech: 98.0 percent of the frames that this tracker and an independent one (YIN) both call voiced agree within 20 percent. That is agreement with a second tracker, not a laryngograph. 2.9 percent of the voiced frames lie above 1.8 times the median of their reading, probably a higher harmonic in a loud vowel.
  • The harmonics-to-noise ratio, on exactly periodic voices with white noise added at a known ratio: 18 of 19 recordings between 8 and 28 dB within 1.5 dB of the truth, and 5 of 5 between 8 and 20 dB within 2 dB over a telephone line. Above about 28 dB (22 dB on a telephone line) it can read too low. Jitter and shimmer lower it too, because an irregular voice is not periodic.

pitch.voicedShare depends on level and on noise: against the clean version of the same recordings it moved between plus 13 and minus 28 points across 32 noise, reverberation and level situations, and steady noise with a tone in it counts as voiced. That is why it is a proxy.

What it holds back: jitter and shimmer

The registry has pitch.jitterLocal and pitch.shimmerLocal, the local jitter (how much neighbouring periods differ) and shimmer (how much neighbouring cycles differ in amplitude). They are not offered through the API or the MCP server, and the answer leaves them out.

We tested them the same way. On constructed held vowels they read 1.2 and 1.0 to 1.1 times the truth, but the order against the truth missed the criteria we set in advance by small margins (a rank correlation of 0.74 against 0.75, a median error of 0.66 against 0.6 points), and in constructed running speech the rank correlation fell to 0.61 over a telephone line. Under noise at 20 dB they read up to 1.5 times too high, so they are only given on quiet recordings in any case.

On real running speech they read 2.3 percent and 8.2 percent (the median of 35 readings), two to three times the clinical norms of about 1 and 4 percent, which are for a held vowel. We do not know what the true values are there. A second test on new data with a new preregistration can change that; until it has, they stay out.

What this is not

Jitter and shimmer say how regularly the vocal folds vibrate. Nothing here says anything about stuttering: a stutter is a disfluency in time, and we have no labelled data to test it. The values are not a judgement of anyone’s voice, and singing and instruments are outside the range (the ceiling is 600 Hz).

Next in VoiceLab docs

Find lost packets in a recording →

The chain profile counts the gaps of digital silence that a lost packet leaves in the middle of speech. How it decides, the test numbers, what it cannot see, and why the echo and slapback measure is not offered.

More in VoiceLab docs