Recording and level
Peak level.peak ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A sine of known amplitude, and parity with ffmpeg.
What it is not: The register names no limit beyond its validation.
RMS level level.rms ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A sine of known amplitude, and parity with ffmpeg.
What it is not: The register names no limit beyond its validation.
Crest factor level.crest ● Validated dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A sine reads about 3 dB.
What it is not: The register names no limit beyond its validation.
Integrated loudness loudness.integrated ● Validated LUFS · margin ±0.1 LU
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: EBU Tech 3341 cases 1 and 2 plus the absolute and relative gate cases, tolerance ±0.1 LU (loudness benchmark, published on /api).
What it is not: The register names no limit beyond its validation.
Margin: ±0.1 LU, The tolerance of EBU Tech 3341, met by the loudness benchmark on every build.
Short-term max loudness.shortTermMax ● Validated LUFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Parity with ffmpeg ebur128.
Not validated: Not part of the EBU case table.
What it is not: The register names no limit beyond its validation.
Loudness range loudness.range ● Validated LU · margin ±1 LU
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: EBU Tech 3342 case 1, tolerance ±1 LU (loudness benchmark, published on /api).
What it is not: The register names no limit beyond its validation.
Margin: ±1 LU, The tolerance of EBU Tech 3342, met by the loudness benchmark on every build.
True peak loudness.truePeak ● Validated dBTP · margin +0.2 / -0.4 dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: BS.1770 true peak: a 997 Hz tone and an inter-sample peak case, +0.2 / -0.4 dB; parity with ffmpeg on high-frequency material.
What it is not: The register names no limit beyond its validation.
Margin: +0.2 / -0.4 dB, The tolerance for a true-peak meter in ITU-R BS.1770, met by the loudness benchmark on every build.
Momentary max loudness.momentaryMax ● Validated LUFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Parity with ffmpeg ebur128, and it reads a 400 ms window.
Not validated: Not part of the EBU case table.
What it is not: The register names no limit beyond its validation.
Clipped samples voice.clipping ● Validated count
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Sees 3 percent stuck samples, and none on a normalised clean recording.
Not validated: Light clipping, where it reads low: it counts samples stuck at the peak of the file only in runs of at least three in a row, so isolated peaks do not count. On 15 October 2026 (V03-ENG), on 72 recordings with 0 to 36 percent of the samples clipped (24 read sentences at three gains), it found every recording that had such a run and none of 96 recordings without clipping. It read about 0.68 of the samples at full scale when up to 1 percent were clipped (median) and 0.91 to 0.93 of them above 1 percent.
What it is not: The register names no limit beyond its validation.
Has clipping signal.clipping ● Validated bool
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Flat-top detection: silent on a full-scale sine and on noise, finds clipping in proportion, still sees it after the file is turned down.
Not validated: High-frequency clipping is invisible to it, by design.
What it is not: The register names no limit beyond its validation.
Clipping regions signal.clippingRegions ● Validated count
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Flat-top detection, see signal.clipping.
What it is not: Not a measure of how much is clipped. Heavy clipping makes the stretches merge: on 24 read sentences the median was 20 regions with 5 percent of the samples clipped and 12 regions with 25 percent (15 October 2026, V03-ENG).
Phrase clipping segment.clipFraction ● Validated share
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Points at the one clipped phrase of three.
Not validated: Light clipping: it reads low for the same reason as the clipped samples measure, because it counts only runs of at least three samples at the peak of the file.
What it is not: The register names no limit beyond its validation.
DC offset signal.dcOffset ● Validated ratio
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A tone shifted by +0.05 and by -0.03 reads the shift with its sign, within 0.002.
What it is not: The register names no limit beyond its validation.
Mains hum hum.levelDb ● Validated dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: 6 dB more hum reads 6 dB more; null when no window fits in a pause.
What it is not: The register names no limit beyond its validation.
Mains frequency hum.mainsHz ● Validated Hz
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Names 50 or 60 Hz for a harmonic series in the pauses and stays quiet without one.
What it is not: The register names no limit beyond its validation.
Tone prominence tone.prominenceDb ● Validated dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: ISO 1996-2 annex C: 0, 6 and 15 dB above the masking level, and the label boundaries.
What it is not: The register names no limit beyond its validation.
Tone frequency tone.frequencyHz ● Validated Hz
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A tone of known frequency.
What it is not: The register names no limit beyond its validation.
Tonality tone.label ● Validated label
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: The label boundaries of ISO 1996-2 annex C.
What it is not: The register names no limit beyond its validation.
Bandwidth, codec and origin
Bandwidth provenance.bandwidthHz ● Validated Hz
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Fixtures with a known cut-off. Also read, exploratively and not as a pre-registered test, on 168 recordings of read speech put through seven speech codecs (15 October 2026, 24 sentences each, V03-ENG): through the 8 kHz codecs (A-law, AMR narrowband at 4.75 and 12.2 kbit/s, GSM) and Opus at 8 kbit/s it reads 3.8 to 4.9 kHz, through AMR wideband and Opus at 16 kbit/s 6.1 to 8.0 kHz, and 6.3 to 8.0 kHz on the uncoded sentences, so the narrowband and wideband groups do not overlap.
Not validated: Tonal material and very short files. Real phone calls: the codec readings used one set of read English sentences, and a codec outside those seven is untested.
What it is not: The register names no limit beyond its validation.
Lossy source provenance.lossySource ● Validated label
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: One fixture per label (MP3 at 64k to 256k), and clean PCM reads lossless.
Not validated: Telephone-band speech and speech codecs. Checked on 10 October 2026 with one generated sample through G.711, Opus (16 kHz) and MP3 (8 kHz): all read lossless, because the codec wall it looks for sits between 10 kHz and 0.9 of Nyquist. Checked again on 15 October 2026 (V03-ENG) on 168 recordings of read speech through seven speech codecs (A-law, AMR narrowband at 4.75 and 12.2 kbit/s, AMR wideband, GSM, Opus at 8 and 16 kbit/s; 24 sentences each): none read lossy, 141 read lossless and 27 unknown. Lossless here means no such wall was found, not that no codec was used.
What it is not: The register names no limit beyond its validation.
Effective bit depth provenance.effectiveBitDepth ● Validated count
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: 16 for 16-bit and 24 for 24-bit samples, whatever the container says.
Not validated: Whether the audio went through a codec. Speech-codec output decoded to 16-bit PCM reads 16, like any other 16-bit file: all 168 recordings of a reading on 15 October 2026 (V03-ENG; A-law, AMR, GSM and Opus, where A-law has 8 bits per sample before decoding) read 16.
What it is not: The register names no limit beyond its validation.
Upsampled from provenance.upsampled ● Validated Hz
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Finds the original rate behind a resampler for every standard rate.
Not validated: Did not flag one generated sample of 8 kHz telephone speech upsampled to 48 kHz (checked 10 October 2026). On 15 October 2026 (V03-ENG), on 96 recordings of read speech through four 8 kHz speech codecs (A-law, AMR narrowband at 4.75 and 12.2 kbit/s, GSM) decoded back to 16 kHz, it found the 8 kHz origin in 4, all of them GSM.
What it is not: The register names no limit beyond its validation.
Bandwidth splices provenance.spliceCount ● Validated count
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: One join between two sources of different bandwidth.
What it is not: The register names no limit beyond its validation.
Network: lost packets
Dropouts chain.dropoutCount ● Validated count
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Constructed gaps of digital silence cut into read speech, each with a known place and length. Developed on LibriSpeech dev-clean and tested on 13 October 2026 on data it was not developed on, with the criteria fixed beforehand (scripts/validatie/slapback/PREREG-DROPOUT.md and RESULT.md): LibriSpeech test-clean with four kinds of room noise, 160 recordings with 8,411 made gaps that cut sound. It found 99.8 percent of them, and 99.9 percent of the 8,406 gaps it reported were real (a gap counts when its start and length are within 2 ms of the made one); the count was within 5 percent, or one gap, in all 160 recordings. It reported no gap in any of 1,615 recordings that had none: 40 clean, 40 with natural pauses of digital silence, and 1,535 recordings of synthetic voices in 32 situations (noise, reverberation, telephone band, clipping, fast speech). In the situation with simulated packet loss (20 ms packets set to zero, 47 recordings) it found all 1,539 gaps that cut sound and every gap it reported was real; the other 1,015 of the 2,554 made gaps fell in pauses and quiet passages and are not counted.
Not validated: Real recordings of calls with a known amount of packet loss, loss that a codec concealed (repeated, interpolated or filled with comfort noise, which leaves no gap), and noise added after the loss, which fills the gap. The silence a codec puts in pauses is read as pauses: 48 recordings through AMR-NB at 4.75 kbps held 1,936 runs of exact zeros of 8 to 500 ms, none with sound on both sides, and none was counted.
What it is not: Not the number of lost packets: a loss in a pause or a quiet passage cannot be told from a pause, and a loss the codec concealed leaves no gap. It is a lower bound: in the packet loss test 1,539 of the 2,554 made gaps cut sound.
Dropout time chain.dropoutSec ● Validated sec
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: The total length of the gaps counted by chain.dropoutCount, each of which had its start and length within 2 ms of the made gap in 99.9 percent of 8,406 reported gaps (the test is described there).
What it is not: Not the share of the recording that was lost: only gaps that cut sound are added up, and a loss in a pause or a quiet passage does not count.
Longest dropout chain.dropoutMaxMs ● Validated ms · margin ±2 ms
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: The length of the longest gap counted by chain.dropoutCount, which was within 2 ms of the made gap in 99.9 percent of 8,406 reported gaps (the test is described there). On constructed noise the length is exact to 0.1 ms (test/chain.test.ts).
What it is not: Not the longest loss of the call: a long loss in a pause or a quiet passage does not count, and a gap over half a second is read as a pause or an edit.
Margin: ±2 ms, Per gap, as tested: 99.9 percent of 8,406 reported gaps had a start and a length within 2 ms of the made gap. Gaps of 8 to 500 ms only.
Echo and a delayed copy of the voice
Slapback or echo delay chain.slapbackDelayMs ◆ Beta ms
Status: No ground-truth test yet. It may be right; it is not shown to be. It can change. Classical signal processing.
What it is, and what it was tested against: Tested on 13 October 2026 on data it was not developed on, with the criteria fixed beforehand (scripts/validatie/slapback/PREREG.md and RESULT.md). The copies it should find, it found: constructed copies in read speech through real rooms (LibriSpeech test-clean, delays of 60 to 500 ms) were reported in all 120 recordings (a plain copy, a copy under room noise at 10 dB, a copy in the first 8 seconds), the delay within 2 ms in every one (largest error 0.03 ms), and the slapback of two simulated rooms (170 and 300 ms, 95 recordings of synthetic voices) in all 95, the delay within 5 ms. It did not meet the pre-registered limit on false alarms: of 1,575 recordings without a copy, 430 (27 percent) were reported as having one. None of the 40 recordings of real speech was reported, but 430 of the 1,535 recordings of synthetic voices were (46 of 48 in the worst situation), against a limit of 2 percent overall and 6 of 48 per situation. Nothing was adjusted after the test. A second attempt on 14 October 2026 (PREREG-SB2.md, RESULT-SB2.md) added a test that a copy gives one peak in the autocorrelation where a periodic structure gives many: every one of the 438 false alarms of the two tests lay on a multiple of 12.5 ms, a frame grid in some synthetic voices (Dutch and French) and not an echo. On 150 new synthetic recordings without a copy the first version reported 39 (26 percent) and the second 8 (5 percent), against a limit of 6 in 302 and 3 of 30 per voice (Fenna had 4 of 30); it found 146 of 150 constructed copies, the delay within 2 ms and the level within 2 dB in every one, and lost 4 faint copies (60 ms at -16 dB) to the new test. It still stays at beta and is not offered through the API or the MCP server until a test on new data meets the limit.
Not validated: A real slapback or echo with a known delay (in 283 measured rooms the strongest single echo stood 25 to 40 dB under the direct sound), music (a loop or a beat repeats itself: 3 of 20 clips were reported), speakers on separate channels (the channels are mixed), an echo that is another voice coming back (14 of 48 recordings of a loudspeaker echo were reported), and any recording under 6 seconds, which gets no reading.
What it is not: Not a measure of the room: a delayed copy of the sound, whether it comes from a wall, a delay effect or a call. Not a safe reading on synthetic voices: they were read as carrying a faint copy (median -29 dB) at delays that all lie on multiples of 12.5 ms, the frame grid of some synthetic voices, and still were in 5 percent of the recordings of a second test.
Slapback or echo level chain.slapbackLevelDb ◆ Beta dB
Status: No ground-truth test yet. It may be right; it is not shown to be. It can change. Classical signal processing.
What it is, and what it was tested against: Tested with the same data as chain.slapbackDelayMs. For constructed copies made before the room it read within 2 dB of the true level in all 40 recordings (largest error 0.9 dB), and in 37 of 40 under room noise at 10 dB (the noise pulls it down, by a median 0.3 dB). The false copies it reported on synthetic voices read at a median -29 dB (from -34 to -19.5 dB); the weakest copy made before the room was -16 dB, and copies made in the room read as low as -24.8 dB against the whole recording. The status of chain.slapbackDelayMs says why this lens is not offered.
What it is not: Not relative to the direct sound alone: a copy made in the room reads lower, because it is judged against the direct sound and the reverberation together.
Slapback or echo score chain.slapbackScore ◆ Beta ratio
Status: No ground-truth test yet. It may be right; it is not shown to be. It can change. Classical signal processing.
What it is, and what it was tested against: Tested with the same data as chain.slapbackDelayMs. Real read speech through real rooms without a copy scored 3.4 to 4.9 (40 recordings; at most 7.4 in development), constructed copies made before the room 13.8 to 73.2 (120 recordings) and the two simulated slapback rooms 43 to 77 (95 recordings). Synthetic voices without a copy scored up to 28.3, which is why the limit of 12 gave 430 false alarms in 1,535 recordings of them.
What it is not: Not a probability. Music with a loop or a beat repeats itself and scored up to 32 (3 of 20 clips reached the limit), and synthetic voices without a copy scored up to 28. Since 14 October 2026 a peak that has equals elsewhere in the autocorrelation (a periodic structure) is not a copy and its score stays under 12 (1 of the 20 music clips still reached it).
Noise
Noise floor voice.noiseFloor ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Rises with added noise; noise floors land on the true level of stationary synthetic noise. On 40 read recordings with real background noise (SNR-1, 12 October 2026) it sits 1 to 8 dB below the average level of that noise, because it reads the quietest tenth of the frames.
What it is not: The register names no limit beyond its validation.
Signal to noise voice.snr ● Validated dB · margin ±6 dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A 12 dB noise addition reads 14 dB, within 6 dB. On 40 read recordings with real background noise added at known ratios (SNR-1, 12 October 2026): within 6 dB in 90 percent of cases when the true ratio is 10 to 30 dB with steady noise (kitchen, living room, hallway) or babble at 20 dB. It reads too high when the true ratio is lower: about 3 to 7 dB high at 10 dB, 6 to 9 dB at 5 dB, 5 to 12 dB at 0 dB. On a very clean recording it reads about 2 dB low. A second test (SNR-2 on the SC-1 files, 13 October 2026, 1,344 files: 48 synthetic utterances in nine DEMAND environments, six of them new, at 20, 10 and 5 dB, plus clean controls) confirmed it with other speech and mostly new environments: on average 1.6 dB too high at 20 dB, 3.2 dB at 10 dB and 5.6 dB at 5 dB. A hybrid estimator that switches to a minimum statistic when the first estimate is below 16 dB cut the 5 dB error to 2.5 dB (90th percentile, from 7.1 dB) but over-corrected at 10 dB (6.2 dB against the 6.0 dB bar), so it was not adopted and the measure stays as it is. With the K2 detector (see Speech ratio) it reads 0.5 dB lower on clean audio and 0.6 dB lower at 20 dB, the same shift as the speech level because it is that level minus the noise floor, and below 16 dB it is corrected (SNR-3, 13 October 2026): a combination of that first reading and a second one from the minimum statistic of the smoothed power, fitted on the first two tests with cross-validation and tested once on 520 mixtures of 40 new speakers in three environments that were in no earlier set (a town square, street traffic, a metro). It met all four pre-registered criteria: at 5 dB the mean error went from +5.95 to +1.87 dB (90th percentile 7.44 to 2.98 dB, paired difference 4.08 dB with an interval of 3.93 to 4.21), at 10 dB from +3.52 to -0.18 dB (90th percentile 5.28 to 2.01 dB), and at 20 dB and on clean audio nothing changed. Against the default detector the 90th percentile at 5 dB goes from 8.23 to 2.98 dB and at 10 dB from 6.10 to 2.01 dB. On the 680 mixtures of known noises (kitchen, living room, hallway, cafeteria) it went from 8.26 to 4.37 dB at 5 dB and stayed at 6.25 dB at 10 dB. Not solved: at 0 dB it still reads 5.6 dB too high (90th percentile 6.7 dB), a clean recording reads 0.7 dB worse at the 90th percentile than with the default detector, and the metro is the hardest environment (90th percentile 7.3 dB at 10 dB, because 7 of its 40 files have a first reading above 16 dB and fall outside the correction). The coefficients belong to the K2 mask and apply only with it.
Not validated: Predicting speech-recognition errors: in our own test of 10 October 2026: 16 invented Dutch citizen reports (street and number, town, surname, phone, email), read by 3 synthetic voices in 13 conditions (clean, telephone band, street noise and babble at 10 and 5 dB, television, four measured reverberation times, combinations): 624 recordings, 1,248 transcriptions by Whisper small and large-v3-turbo, 48 per condition and model, margin about 13 points. It did not predict errors in street, number and town (AUC 0.52 to 0.55; 0.50 is a coin flip). Synthetic voices, Whisper only, simulated telephone band, Dutch text; real speakers, other recognisers and languages are untested.
What it is not: Not a predictor of speech-recognition accuracy.
Margin: ±6 dB, Holds for read speech with steady background noise at a true ratio of 10 to 30 dB (90 percent of cases). Below 10 dB it reads too high, by 3 dB or more. With the K2 detector it holds from 5 dB for a town square and for street traffic, and pooled over kitchen, living room, hallway and cafeteria (90th percentile 4.4 dB at 5 dB); at 10 dB the pooled value over those four is 6.25 dB and a metro reaches 7.3 dB; at 0 dB it still reads about 6 dB too high.
Segmental SNR voice.segmentalSnr ● Validated dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Lands near the true burst-to-bed ratio and exposes a bed that gets louder. With the K2 detector (see Speech ratio) the phrases reach into their soft edges, and the value shifts by up to about 1 dB either way per recording (136 test mixtures).
Not validated: Predicting speech-recognition errors: in our own test of 10 October 2026: 16 invented Dutch citizen reports (street and number, town, surname, phone, email), read by 3 synthetic voices in 13 conditions (clean, telephone band, street noise and babble at 10 and 5 dB, television, four measured reverberation times, combinations): 624 recordings, 1,248 transcriptions by Whisper small and large-v3-turbo, 48 per condition and model, margin about 13 points. It did not predict errors in street, number and town (AUC 0.52 to 0.55; 0.50 is a coin flip). Synthetic voices, Whisper only, simulated telephone band, Dutch text; real speakers, other recognisers and languages are untested.
What it is not: Not a predictor of speech-recognition accuracy.
SNR per phrase voice.segmentSnr ● Validated series
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Differs by 12.03 dB for phrases 12.04 dB apart.
What it is not: The register names no limit beyond its validation.
Worst phrases SNR scene.worstPhraseSnr ● Validated dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Follows from the per-phrase SNR.
Not validated: Predicting speech-recognition errors: in our own test of 10 October 2026: 16 invented Dutch citizen reports (street and number, town, surname, phone, email), read by 3 synthetic voices in 13 conditions (clean, telephone band, street noise and babble at 10 and 5 dB, television, four measured reverberation times, combinations): 624 recordings, 1,248 transcriptions by Whisper small and large-v3-turbo, 48 per condition and model, margin about 13 points. It did not predict errors in street, number and town (AUC 0.52 to 0.55; 0.50 is a coin flip). Synthetic voices, Whisper only, simulated telephone band, Dutch text; real speakers, other recognisers and languages are untested.
What it is not: Not a predictor of speech-recognition accuracy.
Speech over background scene.speechToBackground ▲ Proxy dB
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Speech level minus pause level reads within 2 dB on built recordings (35 dB at a bed of minus 55 dBFS, 10 dB at minus 30). The pauses come from the speech detector. Measured against word alignments (40 read recordings, 17 noise conditions), about 95 percent of the frames used as pause are truly non-speech in clean audio and with steady noise at 20 dB, and 80 to 91 percent at 10 dB; soft speech that leaks in lifts the level of a very quiet background by about 3 dB. Against the signal-to-noise ratio that was added to real read speech it is biased: about 1 to 3 dB low at 20 dB, close at 10 dB with steady noise, 2 to 8 dB high at 5 and 0 dB, and about 7 dB low on a very quiet background. With the K2 detector (see Speech ratio) the reading shifts by +1.9 dB on clean audio, +0.2 dB at 20 dB, and by 0.8 to 1.4 dB down at 10 dB noise and below (mean shift on 680 test mixtures; the bias against the added ratio was not measured for K2). On the 12 sample recordings of the site (synthetic voices with digital silence between the phrases) it reads 6 to 47 dB higher, and it is empty for 2 of them because no pause frame is left.
Not validated: Real recordings with a known level difference.
What it is not: A level difference, not intelligibility.
Another voice, television, babble, music
What fills the pauses scene.background ▲ Proxy label
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Synthetic scenes: quiet, air handling reads stationary, a television reads program. On real environment recordings (SC-1, 12 October 2026) machine environments mostly read unsteady (washing machine 41 of 48, car 39 of 48 at 20 dB), babble and a living room often read program, and quiet appeared in no environment.
What it is not: Stationary means a constant level and spectrum, not a machine. Not a reliable reading of what the background is.
Program in the background scene.programScore ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Synthetic scenes.
What it is not: Not tested on real recordings.
Spectral movement in the pauses scene.gapSpectralFlux ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Music against a machine, in synthetic scenes.
What it is not: The register names no limit beyond its validation.
Steady tone in the pauses scene.gapTone ▲ Proxy Hz
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A fixed 180 Hz tone in the pauses is found within 4 percent, and noise alone gives null. Built beds only. The pauses come from the speech detector. Measured against word alignments (40 read recordings, 17 noise conditions), about 95 percent of the frames used as pause are truly non-speech in clean audio and with steady noise at 20 dB, and 80 to 91 percent at 10 dB; soft speech that leaks in lifts the level of a very quiet background by about 3 dB.
Not validated: Real machines (fans, transformers, compressors) recorded behind speech.
What it is not: The register names no limit beyond its validation.
Constant background noise scene.stationaryScore ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Synthetic scenes. Tested on real environment recordings (SC-1, 12 October 2026, one run, 1,344 files): it measures whether the level and the spectrum in the pauses stand still, not whether a machine is playing. Real machine recordings (washing machine, car) read 0.10 to 0.35, dense babble (restaurant, station) 0.5 to 0.7 and white noise 0.996; machine against babble reached an AUC of 0.23 at 20 dB and 0.27 at 10 dB where the bar was 0.80, so it works the wrong way round.
What it is not: Not a machine detector. Read it as a constant background (a steady hum or hiss, or a dense crowd), not as a machine.
Pause level spread scene.gapStabilityDb ▲ Proxy dB
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A flat bed reads under 0.5 dB. A bed that swings 6 dB up and down reads 1.85 dB within 0.6, the value the definition gives for the quieter half of the pause frames. The 1 dB and 3.5 dB limits in the reading guide were chosen by hand. The pauses come from the speech detector. Measured against word alignments (40 read recordings, 17 noise conditions), about 95 percent of the frames used as pause are truly non-speech in clean audio and with steady noise at 20 dB, and 80 to 91 percent at 10 dB; soft speech that leaks in lifts the level of a very quiet background by about 3 dB.
Not validated: Real backgrounds, and whether the limits separate a still background from a moving one.
What it is not: The register names no limit beyond its validation.
Intelligibility (proxy) scene.intelligibility ▲ Proxy label
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Synthetic scenes: buried when a television sits almost as loud.
Not validated: Speech-recognition accuracy, and human listeners. In our own test of 10 October 2026: 16 invented Dutch citizen reports (street and number, town, surname, phone, email), read by 3 synthetic voices in 13 conditions (clean, telephone band, street noise and babble at 10 and 5 dB, television, four measured reverberation times, combinations): 624 recordings, 1,248 transcriptions by Whisper small and large-v3-turbo, 48 per condition and model, margin about 13 points, it flagged not clear (borderline or buried) on 100 percent of recordings with street noise at 10 and 5 dB and on 94 to 100 percent with babble, while Whisper small still got the location right on 58 to 67 percent (clean 69) and large-v3-turbo on 71 to 85 percent (clean 81). Over all recordings it flagged 58 percent; of the flags, 47 percent (small) or 25 percent (large) had a real location error. Synthetic voices, Whisper only, simulated telephone band, Dutch text; real speakers, other recognisers and languages are untested.
What it is not: Not a predictor of speech-recognition accuracy, and not an STI. A proxy built from levels for how well a listener could follow the voice; that is itself not tested against listeners.
Intelligibility score (proxy) scene.intelligibilityScore ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Same proxy.
Not validated: Speech-recognition accuracy, and human listeners. In our own test of 10 October 2026: 16 invented Dutch citizen reports (street and number, town, surname, phone, email), read by 3 synthetic voices in 13 conditions (clean, telephone band, street noise and babble at 10 and 5 dB, television, four measured reverberation times, combinations): 624 recordings, 1,248 transcriptions by Whisper small and large-v3-turbo, 48 per condition and model, margin about 13 points, it flagged not clear (borderline or buried) on 100 percent of recordings with street noise at 10 and 5 dB and on 94 to 100 percent with babble, while Whisper small still got the location right on 58 to 67 percent (clean 69) and large-v3-turbo on 71 to 85 percent (clean 81). Over all recordings it flagged 58 percent; of the flags, 47 percent (small) or 25 percent (large) had a real location error. Synthetic voices, Whisper only, simulated telephone band, Dutch text; real speakers, other recognisers and languages are untested.
What it is not: Not a predictor of speech-recognition accuracy, and not an STI. A proxy built from levels for how well a listener could follow the voice; that is itself not tested against listeners.
Also used here: Speech over background, its card is in step 5.
Content type signal.contentType ▲ Proxy label
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Signal processing with a small learned model inside.
What it is, and what it was tested against: Two models give the file verdict. The first (v1) is what the API returns until 15 January 2027: a frame classifier with a file verdict: vocals over a beat read as mixed, never more than 0.85 confidence. A small learned model (multinomial logistic regression over eight features, 27 numbers) is part of the file verdict. It was trained on 57 labelled files (30 speech, 15 music, 12 noise) and agreed with the labels on 96 percent in leave-one-out, against 77 percent for the rule alone. It only speaks where the rule abstains or picks noise, and shows as model:v1 in the evidence. That 96 percent is on its own training files. Tested on 12 October 2026 against 600 excerpts of 20 seconds from MUSAN (200 speech, 200 music, 200 noise; one run, nothing tuned): speech recall 0.82 and precision 0.56, music recall 0.46 and precision 0.65, noise recall 0.015 (3 of 200). It did not meet its pre-registered criterion (recall and precision of 0.80 or more for all three classes), for any class. Audiobook speech (LibriVox) is called voice on 98 of 100 excerpts, US government speech on 66 of 100. Music is called voice on 55 of 200 excerpts and noise on 75 of 200. The second model (v2) is a two-step learned model over 25 simple features per 10-second window (voice, music or sound; then steady noise or not), trained on MUSAN files outside the first test, ten DEMAND environments, and synthetic babble and steady noise. The website's tools use it now, and the API offers it as contentModel v2 and returns it by default from 15 January 2027. It was tested on the same 600 excerpts plus 90 excerpts of three environments it had never seen (a square, street traffic, the metro; 12 October 2026, one run, nothing tuned): speech recall 0.99 and precision 0.95, music 0.95 and 0.86, steady noise recall 0.44 (40 of 90; street traffic and the metro mostly read unknown) and precision 1.00. It meets its pre-registered criterion for speech and music, not for noise.
Not validated: Noise: v1 hit 3 of 200 MUSAN noise excerpts and v2 found 40 of 90 excerpts of three steady environments. MUSAN noise is varied (environmental sound, machines, tones, effects), wider than steady background noise, so part of the first miss is a difference in what noise means. Also untested: speech and music at the same moment (v1's mixed label was tested on constructed mixtures, MX-1, and v2 does not detect speech over music), languages other than English, telephone and conference recordings, and files shorter than 3 seconds (v2 gives no verdict there and v1 answers). The training material of v2 comes from the same collections as the test material (other files, other environments), so how it holds up on other recordings is not shown. Whether MUSAN files were in the training set of v1 is unknown, because no training manifest was kept.
What it is not: Not a classifier to rely on for every recording. On the test material v2 is right on speech and music, and gives noise only for steady background noise it recognises: it found 40 of 90 and called the rest unknown. Noise means steady background noise (hum, hiss, air conditioning, a crowd), not every sound without speech or music. Mixed means that part of the file reads as speech and part as music; it does not detect speech over music (on 500 constructed mixtures v1 called speech with music 6 dB quieter mixed in 29 of 100 cases, MX-1, 12 October 2026).
Speech detection and the start and end of an utterance
Speech ratio voice.speechRatio ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Measured against word alignments (LibriSpeech dev-clean, 40 read recordings, 17 noise conditions). On clean audio the speech detector finds speech frames with F1 0.92, but it counts only the louder parts of phrases: soft word starts and endings count as pause, so the ratio reads about 12 points below the true share (mean absolute error 0.125). With steady noise it keeps F1 0.90 or better down to 20 dB signal-to-noise, 0.79 to 0.90 at 10 dB, and it is unreliable at 5 dB and below. A second version of the detector (K2: a phrase runs on while the envelope stays above 0.3 of the threshold, at most 100 ms per side) was tested once on 13 October 2026 on LibriSpeech test-clean (40 new speakers, 17 noise conditions, 680 mixtures; the noise pieces were the same as in development): on clean audio and noise at 20 and 10 dB the F1 of the speech frames went from 0.878 to 0.941, the purity of the frames called pause from 0.608 to 0.756 and the mean absolute error of the speech ratio from 0.170 to 0.082; at 5 dB F1 from 0.637 to 0.773 and the error from 0.389 to 0.258. It met its pre-registered criteria but not the original bar (purity 0.95, error 0.04). The website uses K2 now, the API offers it as speechDetector k2 and returns it by default from 15 January 2027; the speech ratio then reads about 5 to 14 points higher, depending on the noise. Everything computed from the speech frames or the pauses moves with it, as the other lenses say; brightness, sibilance risk, the noise floor and the peak do not.
Not validated: Other languages, phone-band audio, music or television behind the voice, reverberant rooms, real conversations. K2 was tested on new speakers but with the same four noise recordings as in development.
What it is not: Not the share of time someone is talking: it reads low, because soft word starts and endings count as pause.
Speech duration voice.speechSec ▲ Proxy sec
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Follows from the speech detector, measured against word alignments: it counts only the louder parts of phrases, so on clean read speech it reads about 12 percent of the duration low (see Speech ratio). Reliable only for clean audio and steady noise down to 20 dB signal-to-noise. With the K2 detector (see Speech ratio) it reads 2.6 to 6.9 seconds more on test recordings of about 50 seconds.
What it is not: Not the time someone is talking: soft word starts and endings count as pause.
Silence duration voice.silenceSec ▲ Proxy sec
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Follows from the speech detector (duration minus speech seconds), measured against word alignments: on clean read speech it reads about 12 percent of the duration high, because soft speech counts as silence (see Speech ratio). With the K2 detector it reads correspondingly less (2.6 to 6.9 seconds on test recordings of about 50 seconds).
What it is not: Not silence: about a third of what the detector calls pause is soft speech.
Speech segments voice.segments ▲ Proxy series
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Phrase boundaries from the speech detector, measured against word alignments: it finds the louder parts of phrases, often splits one phrase into several segments, and ends segments early because soft word endings fall below its threshold. With the K2 detector the segments reach into the soft word starts and endings, by at most 100 ms on each side, so neighbouring segments sometimes merge into fewer, longer ones.
What it is not: Voice activity, not speaker turns: it tells when, not who.
Long pauses voice.longSilences ▲ Proxy count
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Counts pauses over 1.5 s between segments. Against word alignments (40 recordings with gaps of 0.8 to 2.2 s) the count was exact in 68 to 80 percent of recordings on clean audio and with noise at 20 dB (within one in 97.5 to 100 percent), and in 38 to 58 percent with noise at 10 dB. With the K2 detector it counts 0.15 to 0.73 fewer long pauses per recording on 680 test mixtures; the accuracy of the count was not tested for K2.
What it is not: The register names no limit beyond its validation.
Cut off at the start voice.startsInSpeech ● Validated bool
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Sees a file that starts mid-speech.
Not validated: A shallow cut. On 15 October 2026 (V03-ENG), 24 read sentences cut 100, 250 and 500 ms into the speech were flagged 13, 18 and 20 times out of 24 (12, 15 and 18 with the default detector), and none of 24 uncut recordings were. The level at the edge (see Level at the start) separated the 72 cut starts from the 24 uncut ones better (AUC 0.96).
What it is not: The register names no limit beyond its validation.
Cut off at the end voice.endsInSpeech ● Validated bool
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Sees a file that stops mid-speech.
Not validated: A shallow cut. On 15 October 2026 (V03-ENG), 24 read sentences cut 250 ms into the speech were flagged 17 times out of 24 (12 with the default detector), and none of 24 uncut recordings were. The level at the edge (see Level at the end) separated them better (AUC 0.97).
What it is not: The register names no limit beyond its validation.
Level at the start voice.edgeStartDb ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A tone at minus 15.05 dBFS RMS at the start reads that level within 1 dB at the start and below minus 80 dBFS at the end. Also read on 24 read sentences cut 100, 250 and 500 ms into the speech against 24 uncut ones (15 October 2026, V03-ENG, exploratory): it separated the 72 cut starts from the uncut ones with an AUC of 0.96 (median -29, -27 and -24 dBFS against -59 dBFS).
What it is not: The register names no limit beyond its validation.
Level at the end voice.edgeEndDb ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A tone at minus 15.05 dBFS RMS at the end reads that level within 1 dB at the end and below minus 80 dBFS at the start. Also read on 24 read sentences cut 250 ms into the speech against 24 uncut ones (15 October 2026, V03-ENG, exploratory): it separated the cut ends from the uncut ones with an AUC of 0.97 (median -32 dBFS against -57 dBFS).
What it is not: The register names no limit beyond its validation.
Room and reverberation
Reverberation time (mid) room.rt60Mid ● Validated sec · margin ±10 percent
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Constructed rooms with a known reverberation time per band (0.3 to 2.0 s): a clap recording reads the mid value within 12 percent (test/room.test.ts). Tested on 13 October 2026 on 385 real impulse responses (MIT Reverb Survey and EchoThief, scripts/validatie/room-ir/RESULT.md): each one struck with a clap spectrum and low-weighted room noise and measured as a recording, against the same method on the bare impulse response. In 155 rooms the mid value was a median 3.9 percent off (86 percent within 10 percent, 98 percent within 20 percent, the same bands on both sides). Readings that gave themselves high confidence (at least 35 dB of decay, 278 band readings) were a median 1.5 percent off. Against an independent numpy implementation on 167 measured responses the Schroeder curve agreed within 5 percent in all 112 rooms with 35 dB of decay or more (median 0.3 percent). The measure is a port of the RoomLab app and equals it exactly on all 385 responses.
Not validated: Speech or music in place of a clap (this is not the estimate from the tail of a spoken phrase), a real phone and a real clap (the clap was simulated with a clap spectrum and room noise), and 125 and 250 Hz from a clap, which the measure refuses. With less than 35 dB of decay the reading is an indication: 210 band readings at low confidence were a median 5.7 percent off, 74 percent within 10 percent and 90 percent within 20 percent.
What it is not: Not a sound level and not a verdict on the room. Not the estimate from the tail of a spoken phrase (segment.tailDecay), which is a weaker measure of something related.
Margin: ±10 percent, Of 278 band readings with high confidence, 91 percent were within 10 percent and 97 percent within 20 percent of the reading on the bare impulse response. With low confidence (under 35 dB of decay) 74 percent were within 10 percent and 90 percent within 20 percent.
Reverberation time per band room.rt60Bands ● Validated matrix · margin ±10 percent
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: As room.rt60Mid, per band. From a clap, 500 Hz to 4 kHz against the same method on the bare impulse response of 168 real rooms, at high confidence: a median 1.8 percent off at 500 Hz (13 readings), 1.0 percent at 1 kHz (46), 1.3 percent at 2 kHz (89) and 1.9 percent at 4 kHz (130); at low confidence 10, 6.0, 3.6 and 3.8 percent. A constructed room reads within 20 percent in every band from 500 Hz. 125 and 250 Hz from an impulse response use the same method and read a constructed room of 0.6 s within 0.15 s. From a sweep (each of the 168 real rooms convolved with the engine's sweep and recorded with room noise at -65 dBFS) every band from 125 Hz to 4 kHz was a median 0.0 to 0.2 percent off the same method on the bare response, 97 to 100 percent within 10 percent.
Not validated: 125 and 250 Hz from an impulse response against an independent per-band reference (only a broadband one exists), an impulse response that ends while the room still rings (the noise floor is then read from signal and the cut-off lands too early), a clap anywhere but in a quiet room, and a sweep played through a real loudspeaker and recorded with a real microphone (the sweep recordings were constructed: linear, with steady noise). 500 Hz is the weakest band from a clap: at low confidence a median 10 percent off and 72 percent within 20 percent.
What it is not: Not a sound level. The decay curve is for drawing, not for computing with.
Margin: ±10 percent, 1 to 4 kHz at high confidence: 87 to 97 percent of the readings within 10 percent. 500 Hz is weaker: 85 percent within 10 percent at high confidence (13 readings) and 50 percent at low confidence. Bands under 500 Hz need an impulse response.
Decay slope segment.tailDecay ▲ Proxy dB/s
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A slope with reverb, null without a tail. Tested on 12 October 2026 against 24 real rooms with measured reverberation times (0.18 to 1.71 s; 120 clean sentences, synthetic voices played through measured room impulse responses, no noise; one run, nothing tuned): Spearman rank correlation with the reverberation time 0.56 (95% interval 0.12 to 0.81) and a value for 119 of the 120 files. It did not meet its pre-registered criterion (correlation of 0.70 or more with a lower bound of 0.50 or more).
Not validated: Noise, real speakers, and files where the pause behind a phrase is short or noisy: on real recordings only about one phrase in ten has a usable gap. 24 rooms is few for a rank correlation, which is why the interval is wide.
What it is not: Ranks rooms roughly by reverberation but is not calibrated to RT60. The measured slope divided by the theoretical -60/RT60 slope is 0.20 at 0.18 s, 0.41 at 0.26 s, 0.73 at 0.70 s and 0.87 at 1.71 s, so dry rooms read far too shallow and rooms between 0.5 and 1.0 s overlap.
Energy in the pauses after speech voice.roomEcho ✖ Withdrawn share
Status: Failed its test. Kept in the changelog, no longer shown as a result. Classical signal processing.
What it is, and what it was tested against: Tested 27 September 2026 against 24 rooms with measured reverberation times: Spearman 0.06, AUC 0.52, and it rises with noise.
What it is not: Not a reverb measure. The label was withdrawn from the engine, the apps, the API and the MCP server.
The voice and its quality
Pitch pitch.f0Hz ● Validated Hz · margin ±3 percent
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Constructed voices with a known pitch (a pulse train through five vowels, 1,092 recordings in seven conditions, built for the test with the criteria fixed beforehand: scripts/validatie/pitch/PREREG-PITCH.md and RESULT-PITCH.md). No gross errors (more than 20 percent off) on clean recordings at 16 and 48 kHz, none under noise at 20 and 10 dB and at most 1.9 percent over a telephone line (8 kHz, 300 to 3,400 Hz). The median of a whole recording was a median 0.31 percent off on sentences and 0.07 percent on held vowels (90th percentile 2.2 and 0.34 percent), also under noise at 20 dB and over the telephone band. The trackers we already had (the TuneLab tuner and the singing coach of the site) made 2.9 to 3.8 percent gross errors on the same sentences and vowels where this one made none. On 40 readings of real speech (LibriSpeech test-clean, 30 s each) 98.0 percent of the frames that this tracker and an independent one (YIN) both call voiced agree within 20 percent, and the median of a reading differs by a median 0.69 percent (90th percentile 3.2 percent).
Not validated: A voice against a laryngograph (no such data here), singing and instruments (the range stops at 600 Hz), creaky or very irregular voices, and voices unlike the five vowels of the generator. On real speech 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 median is robust against that, the high end of the span less so.
What it is not: Not a note and not a measure of the age or sex of the speaker: the median over the whole recording.
Margin: ±3 percent, Against the constructed voices the median error of the median pitch was 0.07 to 0.33 percent and the 90th percentile 0.34 percent on held vowels and 2.2 to 2.6 percent on sentences (the worst over a telephone line).
Harmonics-to-noise ratio pitch.hnrDb ● Validated dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Constructed voices that are exactly periodic with white noise added at a known ratio, 36 recordings per condition, built for the test with the criteria fixed beforehand (scripts/validatie/pitch/PREREG-PITCH.md and RESULT-PITCH.md). At 16 kHz 18 of 19 recordings with a true ratio of 8 to 28 dB read within 1.5 dB of it (median error -0.3 dB) and the order against the truth agreed at Spearman 0.97; over a telephone line (8 kHz, 300 to 3,400 Hz) 5 of 5 recordings with 8 to 20 dB read within 2 dB. On real read speech the lens read 8.4 / 11.3 / 15.8 dB (10th / median / 90th percentile of 40 readings).
Not validated: Voices with jitter and shimmer (the reading is then lower than the added noise alone, by about 5 dB for held vowels and 8 dB for sentences, because an irregular voice is not periodic either), real breathy or hoarse voices against a clinical rating, and ratios above about 28 dB, or above about 22 dB over a telephone line, where it can read too low (by up to 7 dB and up to 18 dB).
What it is not: Not the background noise alone: it counts everything that does not repeat itself from period to period, jitter and shimmer included. Not the HNR of Praat to the decimal: the same definition on another tracker, as a median over the voiced frames weighted by energy.
Jitter pitch.jitterLocal ◆ Beta percent
Status: No ground-truth test yet. It may be right; it is not shown to be. It can change. Classical signal processing.
What it is, and what it was tested against: Tested on 13 October 2026 on data it was not developed on, with the criteria fixed beforehand (scripts/validatie/pitch/PREREG-PITCH.md and RESULT-PITCH.md). On constructed held vowels at 16 kHz and over a telephone line it read 1.2 times the truth with a median error of 0.14 to 0.15 points, but the order against the truth agreed only at Spearman 0.74 (criterion 0.75). In constructed running speech it read 1.34 and 1.47 times the truth, at Spearman 0.70 and 0.61 (criterion 0.7). Under noise at 20 dB it gave no value for any vowel and read 1.5 times too high for sentences. It stays at beta and is not offered through the API or the MCP server until a later test on new data meets the criteria.
Not validated: A real voice with a known perturbation, a clinical rating, and stuttering (jitter says nothing about it). A recording that is not quiet (under 30 dB between the loud and the quiet frames) gets no value. On real read speech the lens read 1.6 / 2.3 / 2.7 percent (10th / median / 90th percentile of the 35 of 40 readings that got a value), two to three times the clinical norm of about 1 percent, which is for a held vowel.
What it is not: Not a measure of stuttering and not a clinical judgement.
Shimmer pitch.shimmerLocal ◆ Beta percent
Status: No ground-truth test yet. It may be right; it is not shown to be. It can change. Classical signal processing.
What it is, and what it was tested against: Tested on 13 October 2026 on data it was not developed on, with the criteria fixed beforehand (scripts/validatie/pitch/PREREG-PITCH.md and RESULT-PITCH.md). On constructed held vowels at 16 kHz and over a telephone line it read 1.04 and 1.07 times the truth at Spearman 0.90, but with a median error of 0.66 and 0.75 points (criterion 0.6). In constructed running speech it read 1.35 and 1.46 times the truth with a median error of 1.6 and 2.0 points (criterion 2 points) at Spearman 0.94 and 0.88. Under noise at 20 dB it gave no value for any vowel and read 1.3 times too high for sentences. It stays at beta and is not offered through the API or the MCP server until a later test on new data meets the criteria.
Not validated: A real voice with a known perturbation, a clinical rating, and stuttering (shimmer says nothing about it). A recording that is not quiet (under 30 dB between the loud and the quiet frames) gets no value. On real read speech the lens read 6.8 / 8.2 / 9.9 percent (10th / median / 90th percentile of the 35 of 40 readings that got a value), about twice the clinical norm of about 4 percent, which is for a held vowel.
What it is not: Not a measure of stuttering and not a clinical judgement.
Voice brightness voice.brightness ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Direction tested: little treble against a lot reads 0.08 against 1.00. With digitally silent pauses it follows the mean spectral centre per frame divided by 2500 Hz within 0.06. Every frame above 1e-4 RMS counts, pauses included, so a real noise floor pulls it up: white noise at minus 55 dBFS between the bursts makes 1250 Hz speech read 1.
Not validated: Real speech with a noise floor, and against listeners.
What it is not: A spectral-centroid measure of every non-silent frame, not a quality verdict.
Sibilance risk voice.sibilance ▲ Proxy label
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Direction tested: energy around 7 kHz moves Low to High.
What it is not: A risk label, not a sibilance measurement in dB.
The recogniser itself
No measure of ours sits here. AudioLab measures the audio, not the recogniser. The stress test measures the recogniser.
The test material itself
No measure of ours sits here.
What we do not cover
No measure of ours sits here.
Not on the voice path: 91 measures for music, mixes, loops, rooms and stereo
The same engine measures what creators and broadcasters need. These sit outside the path to a recogniser, grouped by the profile that uses them.
Basic check (5)
Duration file.duration ● Validated sec
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Matches the true length of the file.
What it is not: The register names no limit beyond its validation.
Channels file.channels ● Validated count
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Decoder tests, mono and stereo.
What it is not: The register names no limit beyond its validation.
Waveform series.waveform ● Validated series
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A tone that steps from 0.2 to 0.8 in amplitude: each of the 480 points sits within 5 percent below the true peak of its stretch and never above it.
What it is not: The register names no limit beyond its validation.
Content confidence signal.contentConfidence ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Signal processing with a small learned model inside.
What it is, and what it was tested against: Capped at 0.85, and at 0.5 under 3 seconds.
Not validated: Part of the file verdict that includes a small learned model, described under signal.contentType. On the 600 MUSAN excerpts (12 October 2026) the mean confidence of v1 was 0.76 where the verdict was right and 0.62 where it was wrong or abstained, so it hardly separated the two; for v2 it was 0.70 and 0.47, which separates better but is still not a probability.
What it is not: A confidence of the classifier, not a probability.
Total silence signal.silenceTotalSec ● Validated sec
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: The same two silences (1.5 s in all) read between 1.3 and 1.7 s; continuous sound reads 0.
What it is not: The register names no limit beyond its validation.
Voice & podcast (27)
Loudness over time series.shortTermLufs ● Validated series
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Same computation as the short-term maximum.
Not validated: No test of its own.
What it is not: The register names no limit beyond its validation.
Left/right balance stereo.balance ● Validated dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Zero on a centred file, signed on a leaning one.
What it is not: The register names no limit beyond its validation.
Channel layout stereo.layout ● Validated label
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Five stereo shapes, each named correctly.
What it is not: The register names no limit beyond its validation.
Harshness issue.harshness ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A bump at 3.2 kHz moves it from 0.04 to 0.86.
What it is not: Thresholds chosen by hand.
Muddiness issue.muddiness ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Direction only: a 12 dB bump between 200 and 400 Hz raises the score by more than 0.3 over a flat spectrum. The thresholds were chosen by hand.
Not validated: Real mixes that listeners judged muddy or clear.
What it is not: Not a listener verdict on a mix.
Speech bursts per second voice.syllableRate ▲ Proxy ratio
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Counts built speech bursts with deep silences between them at 2.5 and 4 per second within 0.5. Across twelve reference reads it lands between 2 and 5.
Not validated: Real speech against a counted text.
What it is not: Not a syllable count.
Speaking rate voice.speakingRate ▲ Proxy label
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Labels change with tempo on a built signal.
What it is not: Derived from the syllable-rate proxy; not speech recognition.
Voice peak voice.peak ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Matches the true peak of a clean recording.
What it is not: The register names no limit beyond its validation.
Speech level voice.speechLevel ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Matches the RMS of a known tone (-9.07 against -9.03 dB) and follows a 12 dB drop. It is the average over the frames the speech detector calls speech, so a detector that counts more of the soft word starts and endings lowers it: with the K2 detector (see Speech ratio) it reads 0.5 dB lower on clean audio and up to 1.4 dB lower in noise (136 test mixtures).
Not validated: Very quiet recordings. At an active speech level of -60 dBFS the K2 speech detector keeps about 9 percent of the speech seconds (median 0.45 s of 4.5 s; 24 read sentences, 15 October 2026, V03-ENG), so the level is the average of the loudest parts only: compared with the same sentences at -26 dBFS it reads 5.4 dB too high (median over the 22 recordings that have a level; 2.9 to 10.5 dB), and 6.6 dB too high with the default detector. In 2 of the 24 recordings it found no speech at all and gave no level. At -50 dBFS the K2 detector keeps 97 percent and the level follows the gain to within 0.2 dB (median; worst of 24: 2.2 dB).
What it is not: The register names no limit beyond its validation.
SNR spread voice.segmentalSnrSpread ● Validated dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Shows a noise bed that changes halfway through.
What it is not: The register names no limit beyond its validation.
Gap level voice.gapLevel ▲ Proxy dBFS
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: On built recordings with hard speech bursts and a white bed at minus 55 and minus 40 dBFS it reads the bed within 2.5 dB. It averages whatever the speech detector calls a pause, so on real speech the tail of the last word and the room decay count as background. The pauses come from the speech detector. Measured against word alignments (40 read recordings, 17 noise conditions), about 95 percent of the frames used as pause are truly non-speech in clean audio and with steady noise at 20 dB, and 80 to 91 percent at 10 dB; soft speech that leaks in lifts the level of a very quiet background by about 3 dB. With the K2 detector (see Speech ratio) the soft tails of phrases no longer count as pause and the level reads lower: 0.4 to 2.6 dB on the test mixtures, and 1 to 15 dB on the 12 sample recordings of the site (synthetic voices with digital silence between the phrases), where it is also empty when no pause frame is left.
Not validated: Real recordings with a known background level.
What it is not: The register names no limit beyond its validation.
Background speech rhythm voice.gapModulation ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Separates flat noise from a rhythmic background.
What it is not: The register names no limit beyond its validation.
Background clatter voice.gapModulationHigh ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Direction only: a bed that flutters at 12 Hz reads more than 0.3 above flat noise. Flat noise already reads about 0.48, not 0. Only pauses of at least 1.4 s are measured (shorter pauses read 0) and only movement up to 16 Hz. The pauses come from the speech detector. Measured against word alignments (40 read recordings, 17 noise conditions), about 95 percent of the frames used as pause are truly non-speech in clean audio and with steady noise at 20 dB, and 80 to 91 percent at 10 dB; soft speech that leaks in lifts the level of a very quiet background by about 3 dB.
Not validated: Recordings of keyboards, cutlery or footsteps.
What it is not: The register names no limit beyond its validation.
Background cadence voice.gapPeriodicity ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Separates a continuous background from a single clap.
What it is not: The register names no limit beyond its validation.
What the active material looks like voice.activeKind ▲ Proxy label
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A voice with rhythm keeps the voice label; steady noise gets none (tested). Tested on 12 October 2026 against 600 excerpts of 20 seconds from MUSAN (200 speech, 200 music, 200 noise; one run, nothing tuned): speech recall 0.91 and precision 0.53, music recall 0.59 and precision 0.55, noise recall 0.015 (3 of 200). It did not meet its pre-registered criterion (recall and precision of 0.80 or more for all three classes), for any class. Audiobook speech (LibriVox) is called voice on all 100 excerpts, US government speech on 81 of 100. Music is called voice on 69 of 200 excerpts and noise on 92 of 200. On 500 constructed mixtures of read speech and instrumental music (MX-1, 12 October 2026) it called speech with music 6 dB quieter mixed in 16 of 100 cases and with music at equal level in 18 of 100; speech with soft music mostly reads voice, and pure speech and pure music were wrongly called mixed 6 percent of the time.
Not validated: Noise: the label hits 3 of 200 on this data. MUSAN noise is varied (environmental sound, machines, tones, effects), which is wider than the steady noise the rule was tested on, so part of the miss is a difference in what noise means. Speech over music was tested only on constructed mixtures (MX-1), not on real recordings of people talking over music. Also untested: languages other than English, telephone and conference recordings.
What it is not: A frame classifier, not ground truth. A voice label on clean read speech holds up; the noise label does not. Noise means steady background noise (hum, hiss, air conditioning, a crowd), not every sound without speech or music.
Voice envelope series.rmsEnvelope ● Validated series
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: About 50 frames per second (95 to 105 for a 2 s file). The value is the RMS per frame: tones of 0.2 and 0.02 amplitude read their RMS within 3 and 5 percent.
What it is not: The register names no limit beyond its validation.
Voice activity mask series.voicedMask ▲ Proxy series
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: The mask from the speech detector, measured against word alignments: frame F1 0.92 on clean audio, but it marks only the louder parts of phrases, so soft word starts and endings are unmasked. With the K2 detector (see Speech ratio) the mask reaches up to 100 ms further into word starts and endings: frame F1 0.941 against 0.878 on clean audio and noise at 20 and 10 dB (test-clean).
What it is not: The register names no limit beyond its validation.
Phrase level segment.level ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Matches the computed RMS per phrase.
What it is not: The register names no limit beyond its validation.
Energy after this phrase segment.decayScore ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Rises with reverb behind the phrase in a synthetic test. Tested on 12 October 2026 against 24 real rooms with measured reverberation times (0.18 to 1.71 s; 120 clean sentences, synthetic voices played through measured room impulse responses, no noise; one run, nothing tuned): Spearman rank correlation with the reverberation time 0.30 (95% interval -0.20 to 0.71). A link with the reverberation time is not shown.
Not validated: Noise (a noisy pause raises it as well as a live room), real speakers (the sentences are synthetic) and use per phrase. 24 rooms is few for a rank correlation, which is why the interval is wide.
What it is not: Not a reverb time and not a measure of the room: read it as the energy after this phrase. Same family as the withdrawn room-echo score (rank correlation 0.06 in the same set).
Background character segment.flankFlatness ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Separates room noise from something tonal underneath.
What it is not: The register names no limit beyond its validation.
Timeline regions signal.regions ▲ Proxy series
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: The same frame classifier: voice, silence, music, noise, clipping.
What it is not: Not validated on a labelled corpus of real recordings.
Spectrum lane grid.terrain ● Validated matrix
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: For a 1 kHz tone the loudest of the 48 bands is the one around 1 kHz in every block (within one log band, 15.5 percent), and the maximum reads 0 dB.
What it is not: The register names no limit beyond its validation.
Level lane grid.level ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Tones of 0.5 and 0.05 amplitude read their RMS in dBFS (amplitude over the square root of 2) within 0.1 dB in every block.
What it is not: The register names no limit beyond its validation.
Noise floor lane grid.noiseFloor ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Terrain lanes: noise floors land on the true level of stationary noise, hum separates from hiss, flux peaks at a splice, headroom never reads above the level.
What it is not: The register names no limit beyond its validation.
Headroom lane derived.headroom ● Validated dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Terrain lanes: noise floors land on the true level of stationary noise, hum separates from hiss, flux peaks at a splice, headroom never reads above the level.
What it is not: The register names no limit beyond its validation.
Noise character lane derived.bandFlatness ● Validated share
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Terrain lanes: noise floors land on the true level of stationary noise, hum separates from hiss, flux peaks at a splice, headroom never reads above the level.
What it is not: The register names no limit beyond its validation.
Mix & master (23)
Third-octave spectrum series.thirdOctave ● Validated series
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: IEC 61260: a full-scale sine reads -3.01 dBFS in its own band, white noise rises 3 dB per octave, nominal centres.
What it is not: The register names no limit beyond its validation.
Peak to loudness ratio dynamics.plr ● Validated LU
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Exactly the distance it claims.
What it is not: The register names no limit beyond its validation.
Peak to short-term ratio dynamics.psr ● Validated LU
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Exactly the distance it claims.
What it is not: The register names no limit beyond its validation.
Stereo correlation stereo.correlation ● Validated ratio
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Identical channels read about 1, noise channels decorrelate.
What it is not: The register names no limit beyond its validation.
Stereo width stereo.width ● Validated share
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Mono reads 0, opposite phase 1, independent noise of equal level 2/3 (within 0.03) and one channel at half strength 2/9 (within 0.01), as the side/mid definition gives.
What it is not: The register names no limit beyond its validation.
Mono compatible stereo.monoCompatible ▲ Proxy bool
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Derived from the bass correlation and the broad correlation.
What it is not: The register names no limit beyond its validation.
Bass mono compatibility stereo.bassCorrelation ● Validated ratio
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: An out-of-phase low end and a genuinely mono low end.
What it is not: The register names no limit beyond its validation.
Platform normalisation platform.normalisation ● Validated matrix
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Reproduces Spotify’s own published example; says nothing where a platform does not publish its behaviour; every target carries a source.
What it is not: The register names no limit beyond its validation.
Spectrum spectrum.curve ● Validated series
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Follows the broadband shape: flat material is flat within 12 percent from octave to octave, pink material (minus 3 dB per octave) within 7 percent, material that stops at 4 kHz drops to under 2 percent above it, and a broad bump between 900 and 1100 Hz puts the maximum of the curve inside it.
Not validated: A narrow peak can fall between two of the 128 log-spaced points and be missed. The curve is made for the shape of broadband material.
What it is not: The register names no limit beyond its validation.
Spectral centroid spectrum.centroid ● Validated Hz
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A sine reads its own frequency within 1 percent; two equal sines at 500 and 2000 Hz read the midpoint within 2 percent.
What it is not: The register names no limit beyond its validation.
Spectral rolloff spectrum.rolloff ● Validated Hz
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: On a flat spectrum from 100 to 4000 Hz the 85 percent point lands at 3415 Hz within 3 percent, and a sine reads its own frequency within two FFT bins. It adds up magnitude, not power.
What it is not: The register names no limit beyond its validation.
Tonal balance spectrum.bands ● Validated series
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Noise inside one band puts that band at 1 and every other band under 0.08; tested for bass, mid, presence and air.
What it is not: The register names no limit beyond its validation.
Beat stability signal.beatStability ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A click track at 120 bpm reads above 0.9, irregular clicks below 0.7, and files under 24 s read null. Clicks only.
Not validated: Music.
What it is not: Not shown to recognise a real tempo; that needs music.
Brightness signal.brightnessBucket ▲ Proxy label
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A bucket on a spectral-centroid measure.
What it is not: The register names no limit beyond its validation.
Dynamics signal.dynamicsBucket ▲ Proxy label
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A bucket on a dynamics measure.
What it is not: The register names no limit beyond its validation.
Rough band label signal.dominantBand ▲ Proxy label
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: It follows the zero-crossing rate: tones at 100, 1000, 3000 and 8000 Hz read Sub / bass, Mid, Upper-mid and High. It is not the band with the most energy: a loud bass with a quiet 5 kHz tone on top does not read as bass.
What it is not: Not the band with the most energy; the spectrum bands lens gives that.
Peak lane grid.peak ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Tones of 0.5 and 0.05 amplitude read their peak in dBFS within 0.1 dB in every block.
What it is not: The register names no limit beyond its validation.
Dynamics lane grid.crest ● Validated dB
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A sine reads 3.01 dB within 0.1 and a square wave 0 dB within 0.15, in every block.
What it is not: The register names no limit beyond its validation.
Brightness lane grid.centroid ● Validated Hz
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A tone reads its own frequency within 2 percent in every block, at 1000 and 4000 Hz.
What it is not: The register names no limit beyond its validation.
Stereo lane grid.correlation ● Validated ratio
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Equal channels read above 0.999, opposite channels below minus 0.999, and independent noise within 0.05 of zero.
What it is not: The register names no limit beyond its validation.
Width lane grid.width ● Validated share
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Mono reads 0, opposite phase 1 and independent noise 2/3 (within 0.04), the same side/mid rule as the whole-file stereo width.
What it is not: The register names no limit beyond its validation.
Clipping lane grid.clipFraction ● Validated share
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A sine of 1.5 clipped at 1 reads the clipped share of the samples, 0.54, within 0.02 in every block; an unclipped sine reads 0.
What it is not: The register names no limit beyond its validation.
Change lane derived.flux ● Validated share
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Terrain lanes: noise floors land on the true level of stationary noise, hum separates from hiss, flux peaks at a splice, headroom never reads above the level.
What it is not: The register names no limit beyond its validation.
Provenance (14)
Sample rate file.sampleRate ● Validated Hz
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Decoder tests at 44.1 and 48 kHz.
What it is not: The register names no limit beyond its validation.
Bit depth (guess) file.bitDepth ▲ Proxy label
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A guess from the file type: "16/24-bit guess" for WAV and "lossy" for compressed formats. The same samples rounded to 8 bits still read 16/24, so it says nothing about the samples.
What it is not: Not read from the samples and not a header reading.
Format file.format ● Validated label
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Read from the container.
What it is not: The register names no limit beyond its validation.
File size file.sizeKb ● Validated count
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: The size of the bytes.
What it is not: The register names no limit beyond its validation.
Input hash file.inputHash ● Validated label
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: SHA-256 of the bytes, the same for a buffer as for a path.
What it is not: The register names no limit beyond its validation.
Spectral flatness spectrum.flatness ● Validated share
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Broadband noise reads above 0.9 and a pure tone below 0.01.
What it is not: The register names no limit beyond its validation.
Evidence signal.contentEvidence ▲ Proxy text
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Signal processing with a small learned model inside.
What it is, and what it was tested against: The independent checks behind the verdict.
Not validated: Part of the file verdict that includes a small learned model, described under signal.contentType.
What it is not: The register names no limit beyond its validation.
Mono-in-disguise score signal.monophonic ● Validated share
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Identical channels read above 0.999, independent noise under 0.05, opposite phase 0, and channels with a correlation of 0.5 read 0.5 within 0.05.
What it is not: Not a probability: it is the left-right correlation, never below zero.
Energy envelope series.energyEnvelope ● Validated series
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Four times the amplitude reads four times the value, within 8 percent, and the series covers the whole file at 6, 12 and 40 s without zero padding. This test found a bug (the series stopped after the first 480 frames and short files ended in zeros), fixed on 11 October 2026.
What it is not: The register names no limit beyond its validation.
Brightness envelope series.centroidEnvelope ● Validated series
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: The value is the zero-crossing rate per frame: a sine reads 2f/fs within 8 percent at 500 and 4000 Hz, and it rises with pitch.
What it is not: Not a spectral centre in Hz; it follows the zero-crossing rate.
Bandwidth lane grid.bandwidth ● Validated Hz
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Terrain lanes: noise floors land on the true level of stationary noise, hum separates from hiss, flux peaks at a splice, headroom never reads above the level.
What it is not: The register names no limit beyond its validation.
Flatness lane grid.flatness ● Validated share
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Terrain lanes: noise floors land on the true level of stationary noise, hum separates from hiss, flux peaks at a splice, headroom never reads above the level.
What it is not: The register names no limit beyond its validation.
DC lane grid.dcOffset ● Validated ratio
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A tone shifted by 0.1 reads 0.1 within 0.005 in every block.
What it is not: The register names no limit beyond its validation.
Novelty lane derived.novelty ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Identical material reads 0 (under 0.02 away from the change) and a change gives a peak above 0.2 within 2 s of it. Only blocks that stand at least 6 dB above their own noise floor and above minus 70 dBFS count, so a file at a steady level reads 0 everywhere.
Not validated: Real edits and transitions, where the right peak is not known in advance.
What it is not: The register names no limit beyond its validation.
Dataset QA (6)
Seam ratio loop.seamRatio ● Validated ratio
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Near zero on a loop that ends where it began, a click on the same loop cut short.
What it is not: The register names no limit beyond its validation.
Silence at start loop.edgeSilenceStartMs ● Validated ms
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: 120 ms of leading silence, to the sample.
What it is not: The register names no limit beyond its validation.
Silence at end loop.edgeSilenceEndMs ● Validated ms
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: 120 ms of trailing silence, to the sample.
What it is not: The register names no limit beyond its validation.
Spectral flatness (opening) signal.tonality ● Validated share
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: The spectral flatness of the opening of the file: a pure tone reads below 0.01 and noise above 0.9.
What it is not: The register names no limit beyond its validation.
Silent regions signal.silenceRegions ● Validated count
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Silences of 1 s and 0.5 s between stretches of sound read as two regions; continuous sound reads zero regions.
What it is not: The register names no limit beyond its validation.
Loop & sample-pack QC (1)
Bar fit loop.barFit ○ Planned label
Status: In the registry, not built. Classical signal processing.
What it is, and what it was tested against: In the registry as planned.
What it is not: The register names no limit beyond its validation.
Room acoustics (10)
Flutter echo strength room.flutterStrength ▲ Proxy share
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Constructed echoes between two walls (5, 9, 20 and 35 ms) read 0.47 to 0.68, and constructed rooms without an echo read 0.10 to 0.28 (test/room.test.ts, test/fixtures/room-parity.json). The thresholds of 0.2 and 0.3 were chosen by hand.
Not validated: Real rooms: 47 of 384 measured impulse responses report a flutter period and there is no list of which of them really flutter. A constructed room with a strongly uneven decay read 0.26, and a clipped clap 0.28, without any echo.
What it is not: Not how loud or how annoying the flutter is: the strength of the repetition in the decay envelope above 500 Hz.
Flutter echo period room.flutterPeriodMs ▲ Proxy ms
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Constructed echoes of 5, 9, 20 and 35 ms were found exactly (test/room.test.ts).
Not validated: Periods in real rooms. Below a flutter strength of 0.3 the period is not reliable: two constructed rooms without any echo reported 9 and 3 ms at strengths of 0.26 and 0.28.
What it is not: The register names no limit beyond its validation.
Room noise floor room.noiseFloor ● Validated dBFS
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Constructed noise of a known level: uniform noise of 0.0005 amplitude (RMS -70.8 dBFS) reads within 0.5 dB, also in a recording with a click shortly after the start (test/room.test.ts).
Not validated: A calibrated sound pressure level: the number is relative to full scale.
What it is not: Not a sound level in dB(A) or dB SPL.
Clap position room.clapAt ● Validated sec
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Constructed claps at 1.5 s and 2 s are found within 0.05 s, also with a click 30 ms after the start of the recording (test/room.test.ts).
Not validated: A real clap on a real phone, and a door or a tap on the phone close to the clap.
What it is not: The register names no limit beyond its validation.
Clap prominence room.clapProminence ▲ Proxy dB
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A constructed clap reads more than 20 dB above the quiet of the recording (test/room.test.ts); the dB value itself has no outside reference.
What it is not: The register names no limit beyond its validation.
Overload on the clap room.clipped ● Validated bool
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: A constructed clap at full scale is flagged and constructed claps at normal level are not (test/room.test.ts).
What it is not: The register names no limit beyond its validation.
Sweep measurement range room.sweepRange ▲ Proxy dB
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A clean constructed sweep leaves more than 40 dB between the peak and the noise, and the other sources give null (test/room.test.ts); the dB value has no outside reference.
What it is not: Not the decay range of a band: that is in room.rt60Bands.
Direct sound against early reverberation room.directToReverb ▲ Proxy dB
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A constructed room that rings reads under 30 dB and one that is dry in the first 150 ms reads over it (test/room.test.ts). The 30 dB threshold was chosen by hand.
Not validated: A real loudspeaker and phone at known distances.
What it is not: The register names no limit beyond its validation.
Microphone too close to the speaker room.tooCloseToSpeaker ▲ Proxy bool
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: True exactly when the direct sound is more than 30 dB above the early reverberation (test/room.test.ts). The threshold was chosen by hand.
Not validated: A real loudspeaker and phone at known distances.
What it is not: The register names no limit beyond its validation.
Room measurement method room.method ● Validated label
Status: Tested against a standard or a known value, with the source named. Classical signal processing.
What it is, and what it was tested against: Echoes the source the caller asked for (test/room.test.ts).
What it is not: The register names no limit beyond its validation.
Pitch and voice quality (5)
Pitch, low end pitch.f0LowHz ▲ Proxy Hz
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A percentile (the 10th, weighted by energy) of the tracked pitch, so the quality of the tracker carries it (see pitch.f0Hz). Not tested on its own against a truth. On real speech 2.9 percent of the voiced frames lie above 1.8 times the median of their reading, probably a higher harmonic; the 10th percentile is the steadier end of the span.
What it is not: The register names no limit beyond its validation.
Pitch, high end pitch.f0HighHz ▲ Proxy Hz
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: A percentile (the 90th, weighted by energy) of the tracked pitch, so the quality of the tracker carries it (see pitch.f0Hz). Not tested on its own against a truth. On real speech 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, and that pulls this end up first.
What it is not: The register names no limit beyond its validation.
Pitch variation pitch.f0VariationSemitones ▲ Proxy st
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: Derived from the tracked pitch (see pitch.f0Hz) and not tested on its own against a truth. On real read speech it read 2.2 / 3.3 / 4.3 semitones (10th / median / 90th percentile of 40 readings). A slip to a higher harmonic inflates it.
What it is not: Not a verdict on how expressive a speaker is: the same number can be a lively voice or a tracker that slipped.
Pitch over time pitch.f0Track ▲ Proxy series
Status: Approximates something. Only the direction is tested, or the thresholds were chosen by hand. Classical signal processing.
What it is, and what it was tested against: The frames of the tracker behind pitch.f0Hz, judged frame by frame against the construction: no gross errors on clean recordings, a fine error of 8 to 9 cents on voices with jitter, no missed voiced frames and no false ones on clean recordings. Under noise 6 to 19 percent of the frames without a voice read as voiced (a hum is periodic too).
What it is not: The register names no limit beyond its validation.