Skip to content
Sign in

/lenses

Everything we can see.

157 measurements, each one stating what it measures, how to read it, and why it is worth measuring. A lens that cannot answer the third question does not ship. Each one also says how far to trust it: 94 are validated, 56 are proxies and 5 are beta, with what they were tested against and what they were not.

Using these measures for a speech recogniser or a voice agent? See the Voice AI map: the path audio takes to a recogniser, with the status of every measure and the tests behind it.

How far to trust each measure

Beta means there is no ground-truth test yet. It does not mean the measure is wrong, and a measure only becomes validated with a recorded test against a known value, with a tolerance. How we decide.

Validated
94 of 157. Tested against a standard or a known value, with the source named.
Proxy
56 of 157. Approximates something. Only the direction is tested, or the thresholds were chosen by hand.
Beta
5 of 157. No ground-truth test yet. It may be right; it is not shown to be. It can change.
Withdrawn
1 of 157. Failed its test. Kept in the changelog, no longer shown as a result.
Planned
1 of 157. In the registry, not built.
Show
Pick what you are here for

Nobody needs all 157 at once. Each profile is a working set: choose one to see only the lenses that answer its question.

File facts

What the container says, and what it cannot tell you.

Duration Validated
file.duration
Voice & podcastMix & masterProvenanceDataset QAEnvironmentBroadcast & film postLoop & sample-pack QC

Measures Length of the audio.

Reading it Seconds.

Why Sets what else can be claimed: below three seconds most verdicts are guesses.

Tested against Matches the true length of the file.

How it works Classical signal processing.

Sample rate Validated
file.sampleRate
ProvenanceDataset QABroadcast & film postLoop & sample-pack QC

Measures Samples per second.

Reading it 44.1k and 48k are standard; 8k or 16k means it came through a phone or a codec.

Why Caps the highest frequency that can exist at all, so it bounds every spectral reading.

Tested against Decoder tests at 44.1 and 48 kHz.

How it works Classical signal processing.

Channels Validated
file.channels
Mix & masterProvenanceDataset QABroadcast & film postLoop & sample-pack QC

Measures Number of audio channels.

Reading it 1 = mono, 2 = stereo.

Why A mono file makes every stereo lens meaningless, which is worth saying out loud rather than showing a flat line.

Tested against Decoder tests, mono and stereo.

How it works Classical signal processing.

Bit depth (guess) Proxy
file.bitDepth
ProvenanceDataset QABroadcast & film postLoop & sample-pack QC

Measures A guess from the file type, not read from the samples.

Reading it "16/24-bit guess" for WAV and "lossy" for compressed formats. It is neither a header reading nor an estimate from the sample values.

Why Flags a compressed file at a glance. For the true depth, read the file header.

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.

How it works Classical signal processing.

What it is not Not read from the samples and not a header reading.

Format Validated
file.format
ProvenanceBroadcast & film postLoop & sample-pack QC

Measures Container format as reported by the caller.

Reading it wav, mp3, m4a and so on.

Why The container says nothing about what happened before it; the bandwidth lens does.

Tested against Read from the container.

How it works Classical signal processing.

File size Validated
file.sizeKb
Provenance

Measures Size on disk in kilobytes.

Reading it Compare against duration to infer the bitrate.

Why Cheap sanity check: a small file with a long duration was compressed hard.

Tested against The size of the bytes.

How it works Classical signal processing.

Input hash Validated
file.inputHash
ProvenanceDataset QALoop & sample-pack QC

Measures SHA-256 of the file bytes, when the caller supplied it. Null otherwise.

Reading it Same bytes, same hash, whatever the file is called. The engine cannot compute it from PCM; the decoder or the host fills it in.

Why It is the key that lets a library of 178,000 files be measured once and never again, and a rename cannot break it.

Tested against SHA-256 of the bytes, the same for a buffer as for a path.

How it works Classical signal processing.

Loudness

How loud it is by the standards platforms actually apply.

Integrated loudness Validated
loudness.integrated
Voice & podcastMix & masterDataset QABroadcast & film postLoop & sample-pack QC

Measures Loudness over the whole file, BS.1770-4 gated.

Reading it Streaming targets sit near −14 LUFS, broadcast near −23, podcasts near −16.

Why The single number platforms use to turn your audio up or down, so it decides how you are heard.

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).

Margin ±0.1 LU. The tolerance of EBU Tech 3341, met by the loudness benchmark on every build.

How it works Classical signal processing.

Short-term max Validated
loudness.shortTermMax
Mix & masterBroadcast & film post

Measures Loudest 3-second window.

Reading it Far above the integrated value means one passage dominates.

Why Finds the moment that will make a listener reach for the volume.

Tested against Parity with ffmpeg ebur128.

How it works Classical signal processing.

Not validated Not part of the EBU case table.

Loudness range Validated
loudness.range
Mix & masterVoice & podcastBroadcast & film post

Measures Spread between the quiet and loud parts, EBU 3342.

Reading it Under 3 LU is very even; over 15 LU is a wide dynamic piece.

Why Predicts whether the quiet parts survive in a car or on a phone.

Tested against EBU Tech 3342 case 1, tolerance ±1 LU (loudness benchmark, published on /api).

Margin ±1 LU. The tolerance of EBU Tech 3342, met by the loudness benchmark on every build.

How it works Classical signal processing.

True peak Validated
loudness.truePeak
Mix & masterDataset QABroadcast & film postLoop & sample-pack QC

Measures Peak of the reconstructed waveform, 4× oversampled.

Reading it Above −1 dBTP a lossy encoder can clip what looked clean.

Why Sample peak can read fine while the played-back signal distorts; this is the number that catches it.

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.

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.

How it works Classical signal processing.

Momentary max Validated
loudness.momentaryMax
Mix & masterBroadcast & film postLoop & sample-pack QC

Measures Loudest 400 ms window (EBU Tech 3341 "M").

Reading it Sits above the short-term max by definition; a gap over about 6 LU means one hit or one syllable spikes.

Why Broadcast delivery specs cap this separately, and it catches the single stab that a 3-second window averages away.

Tested against Parity with ffmpeg ebur128, and it reads a 400 ms window.

How it works Classical signal processing.

Not validated Not part of the EBU case table.

Levels

Peaks, averages, and the distance between them.

Peak Validated
level.peak
Mix & masterDataset QABroadcast & film postLoop & sample-pack QC

Measures Highest sample value.

Reading it 0 dBFS is the ceiling; at exactly 0 the file is probably already damaged.

Why The crudest headroom check there is, and still the first one worth doing.

Tested against A sine of known amplitude, and parity with ffmpeg.

How it works Classical signal processing.

RMS level Validated
level.rms
Mix & masterDataset QA

Measures Average energy over the file.

Reading it Closer to perceived level than peak, but blind to frequency weighting.

Why Baseline for the crest factor, and the fastest read on "is this too quiet".

Tested against A sine of known amplitude, and parity with ffmpeg.

How it works Classical signal processing.

Crest factor Validated
level.crest
Mix & masterDataset QABroadcast & film postLoop & sample-pack QC

Measures Distance between peak and average.

Reading it Above 14 dB it breathes; below 8 dB a compressor or limiter flattened it.

Why Tells you whether the life was mastered out of it, independent of how loud it is.

Tested against A sine reads about 3 dB.

How it works Classical signal processing.

Stereo

What survives when someone listens on one speaker.

Stereo correlation Validated
stereo.correlation
Mix & masterBroadcast & film postLoop & sample-pack QC

Measures How alike the left and right channels are, −1 to +1.

Reading it +1 is mono, around +0.5 is a normal wide mix, below 0 the channels fight each other.

Why Negative correlation hollows out or disappears when someone listens in mono, which most phones and speakers do.

Tested against Identical channels read about 1, noise channels decorrelate.

How it works Classical signal processing.

Stereo width Validated
stereo.width
Mix & master

Measures How much energy sits in the side signal rather than the middle.

Reading it 0 is fully mono; above about 0.4 is a deliberately wide image.

Why Says how much of the mix you lose the moment it is folded to mono.

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.

How it works Classical signal processing.

Mono compatible Proxy
stereo.monoCompatible
Mix & masterBroadcast & film post

Measures Whether the mix survives a fold to mono.

Reading it False means audible cancellation.

Why One boolean that saves a listener wondering why the vocal vanished on a kitchen speaker.

Tested against Derived from the bass correlation and the broad correlation.

How it works Classical signal processing.

Left/right balance Validated
stereo.balance
Mix & masterVoice & podcastBroadcast & film post

Measures RMS of the left channel minus the right, in dB. Positive means left is louder.

Reading it Within 1 dB is centred. Beyond 3 dB the image leans; beyond 20 dB one channel is effectively not playing.

Why A lopsided export is invisible on a single speaker and obvious to every listener on headphones.

Tested against Zero on a centred file, signed on a leaning one.

How it works Classical signal processing.

Channel layout Validated
stereo.layout
Mix & masterVoice & podcastDataset QABroadcast & film postLoop & sample-pack QC

Measures What kind of stereo file this is: mono, dual-mono, one-sided, stereo, or silent.

Reading it dual-mono means two identical channels, so the file is twice the size for nothing. one-sided means a dead channel.

Why Names the export mistake instead of leaving two numbers for the reader to combine, and it is the classic podcast fault: the voice only on the left.

Tested against Five stereo shapes, each named correctly.

How it works Classical signal processing.

Bass mono compatibility Validated
stereo.bassCorrelation
Mix & masterLoop & sample-pack QC

Measures Correlation between the channels below 120 Hz, after a 4th-order low-pass. Null on mono or with no energy there.

Reading it Above 0.5 the low end sums cleanly. Below that it thins out in mono, and below 0 it cancels.

Why Broad correlation is dominated by mid and high energy, so a fully out-of-phase bass hides in it. Clubs and vinyl cutting ask this question separately, so the engine measures it separately.

Tested against An out-of-phase low end and a genuinely mono low end.

How it works Classical signal processing.

Spectrum

Where the energy sits across frequency.

Spectrum Validated
spectrum.curve
Mix & masterProvenanceEnvironment

Measures Average energy per frequency over the file.

Reading it Read the slope: a hump is a resonance, a cliff at the top is a codec.

Why The tonal fingerprint of the recording in one picture.

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.

How it works Classical signal processing.

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.

Spectral centroid Validated
spectrum.centroid
Mix & masterEnvironmentLoop & sample-pack QC

Measures Where the weight of the spectrum sits.

Reading it Speech lands roughly 500–2000 Hz; cymbals and sibilance push it far higher.

Why One number for "bright or dark", comparable between takes and microphones.

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.

How it works Classical signal processing.

Spectral rolloff Validated
spectrum.rolloff
Mix & master

Measures Frequency below which 85% of the summed spectral magnitude sits.

Reading it Moves with brightness but is less sensitive to a single loud high frequency.

Why A steadier brightness measure than the centroid when there is percussion in the file.

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.

How it works Classical signal processing.

Spectral flatness Validated
spectrum.flatness
EnvironmentProvenance

Measures How noise-like the spectrum is, 0 to 1.

Reading it Near 0 is a clear pitch; near 1 is broadband noise.

Why Separates a tone from a hiss without needing to know what either one is.

Tested against Broadband noise reads above 0.9 and a pure tone below 0.01.

How it works Classical signal processing.

Tonal balance Validated
spectrum.bands
Mix & master

Measures Energy in seven named bands from sub to air.

Reading it Compare the bars against each other, not against an absolute.

Why Turns "it sounds thin" into which band is actually missing.

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.

How it works Classical signal processing.

Issues

The two complaints listeners make without knowing why.

Harshness Proxy
issue.harshness
Mix & masterVoice & podcast

Measures Excess energy in the 2–5 kHz range where the ear is most sensitive.

Reading it High means fatiguing after a few minutes.

Why Catches the thing listeners describe as tiring but cannot point at.

Tested against A bump at 3.2 kHz moves it from 0.04 to 0.86.

How it works Classical signal processing.

What it is not Thresholds chosen by hand.

Muddiness Proxy
issue.muddiness
Mix & masterVoice & podcast

Measures Build-up around 200–500 Hz.

Reading it High means the mix lacks definition.

Why The most common self-produced recording problem, and the easiest to fix once named.

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.

How it works Classical signal processing.

Not validated Real mixes that listeners judged muddy or clear.

What it is not Not a listener verdict on a mix.

Voice

Speech, pacing, levels, and what is behind them.

Speech ratio Proxy
voice.speechRatio
Voice & podcastDataset QABroadcast & film post

Measures Share of the file where someone is talking.

Reading it Near 1 means wall-to-wall speech; near 0 means mostly silence or noise.

Why Sets what the file is for. A 0.2 ratio in a dataset take is usually a failed recording.

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.

How it works Classical signal processing.

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 Proxy
voice.speechSec
Voice & podcastDataset QA

Measures Total voiced time.

Reading it Seconds of actual talking.

Why What you are paying a transcriber or a recogniser for.

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.

How it works Classical signal processing.

What it is not Not the time someone is talking: soft word starts and endings count as pause.

Silence duration Proxy
voice.silenceSec
Voice & podcastDataset QA

Measures Total unvoiced time.

Reading it Seconds between and around the phrases.

Why Where every background measurement has to be taken, so it bounds their reliability.

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).

How it works Classical signal processing.

What it is not Not silence: about a third of what the detector calls pause is soft speech.

Speech segments Proxy
voice.segments
Voice & podcastDataset QA

Measures Start and end of every detected phrase.

Reading it One row per phrase.

Why The unit everything per-phrase hangs off, and the thing an editor actually clicks.

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.

How it works Classical signal processing.

What it is not Voice activity, not speaker turns: it tells when, not who.

Speech bursts per second Proxy
voice.syllableRate
Voice & podcast

Measures Roughly how many separate bursts of speech per second, counted from dips in the envelope.

Reading it Only gaps deep enough to read as silence are counted, so this tracks word and phrase pace rather than every syllable. Across twelve reference reads it lands between 2 and 5.

Why Pace is the first thing listeners complain about, and the speaker never hears it.

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.

How it works Classical signal processing.

Not validated Real speech against a counted text.

What it is not Not a syllable count.

Speaking rate Proxy
voice.speakingRate
Voice & podcast

Measures The syllable rate as a word.

Reading it Slow, Normal, Fast or Very fast.

Why A label travels further than a number in a report someone else reads.

Tested against Labels change with tempo on a built signal.

How it works Classical signal processing.

What it is not Derived from the syllable-rate proxy; not speech recognition.

Long pauses Proxy
voice.longSilences
Voice & podcast

Measures Number of gaps longer than 1.5 seconds.

Reading it A count, not a judgement.

Why Points an editor straight at the cuts worth making.

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.

How it works Classical signal processing.

Voice peak Validated
voice.peak
Voice & podcastDataset QA

Measures Loudest sample in the recording.

Reading it Above −1 dBFS the take is at risk.

Why The recording-level check, before anything else can be trusted.

Tested against Matches the true peak of a clean recording.

How it works Classical signal processing.

Speech level Validated
voice.speechLevel
Voice & podcastDataset QABroadcast & film post

Measures Average level during speech only.

Reading it A comfortable take sits near −20 dBFS; below −35 the mic was too far or too quiet.

Why Unlike the file average, this is not dragged down by the silence between phrases.

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).

How it works Classical signal processing.

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).

Noise floor Validated
voice.noiseFloor
Voice & podcastDataset QAEnvironmentBroadcast & film post

Measures Level of the quietest parts.

Reading it Lower is quieter. A treated room sits far below a normal one, and a step upward means something switched on.

Why Everything you cannot remove later lives here.

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.

How it works Classical signal processing.

Signal to noise Validated
voice.snr
Voice & podcastDataset QABroadcast & film post

Measures Speech level against the noise floor, measured globally.

Reading it Above 30 dB reads as clean, below 15 dB as noisy. Do not use it to predict speech-recognition accuracy: in our own test it did not (see its status).

Why The headline number, though the segmental version below is the honest one.

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.

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.

How it works Classical signal processing.

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.

Segmental SNR Validated
voice.segmentalSnr
Voice & podcastDataset QA

Measures Every phrase measured against the noise immediately around it, then taken as a median.

Reading it Same scale as the global SNR, but it does not flatter a take with a changing background.

Why One global average hides exactly what matters: a TV that comes on halfway, a passing car, someone talking next door.

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).

How it works Classical signal processing.

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 spread Validated
voice.segmentalSnrSpread
Voice & podcastDataset QA

Measures Difference between the best and worst phrases (p90 minus p10).

Reading it Small means a consistent background; large means it changed during the take.

Why Decides whether the fix is one filter for the file or a hunt for individual phrases.

Tested against Shows a noise bed that changes halfway through.

How it works Classical signal processing.

SNR per phrase Validated
voice.segmentSnr
Voice & podcastDataset QA

Measures The segmental SNR for each phrase separately.

Reading it Aligned with the segment list; null where the phrase was too short to measure.

Why Turns a file-level complaint into a timestamp you can jump to.

Tested against Differs by 12.03 dB for phrases 12.04 dB apart.

How it works Classical signal processing.

Clipped samples Validated
voice.clipping
Voice & podcastDataset QA

Measures Samples stuck at the peak of the file, in runs of at least three in a row.

Reading it Any count above a handful is audible damage. Isolated peaks do not count, so light clipping reads low.

Why The one defect no processing can undo. It means re-record, not repair.

Tested against Sees 3 percent stuck samples, and none on a normalised clean recording.

How it works Classical signal processing.

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.

Gap level Proxy
voice.gapLevel
Voice & podcastDataset QAEnvironment

Measures How loud the "silence" between phrases really is: the level of the frames the speech detector calls a pause. The tail of the last word and the room decay count as part of it.

Reading it Read it against the speech level. The smaller the distance, the more the background competes; a comfortable take leaves a wide gap.

Why The room is only quiet if you measured it, and this measures it where the speaker is not talking.

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.

How it works Classical signal processing.

Not validated Real recordings with a known background level.

Background speech rhythm Proxy
voice.gapModulation
Voice & podcastDataset QAEnvironment

Measures Share of energy in the gaps that moves at 2–8 Hz, the rate of syllables.

Reading it High means something in the background has the cadence of talking.

Why A television or a second person in the room reads as ordinary noise on every level meter, but not on this one.

Tested against Separates flat noise from a rhythmic background.

How it works Classical signal processing.

Background clatter Proxy
voice.gapModulationHigh
Voice & podcastEnvironment

Measures Share of the movement in the pauses that lies between 8 and 16 Hz, out of 0.5 to 16 Hz. Only pauses of at least 1.4 s are measured.

Reading it Higher means faster movement in the pauses, as from keyboards, cutlery or footsteps. Flat noise already reads about 0.5, so compare files rather than reading it from zero. Shorter pauses are not measured and read 0.

Why Guards the lens above. Clatter is fast and speech is not, so the pair tells them apart.

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.

How it works Classical signal processing.

Not validated Recordings of keyboards, cutlery or footsteps.

Background cadence Proxy
voice.gapPeriodicity
Voice & podcastEnvironment

Measures How regularly the gap energy repeats at syllable spacing.

Reading it High means a steady rhythm rather than random bursts. Weak on its own: a speaker’s own breath tail is more periodic than a distant television, and broadcast compression makes radio almost aperiodic.

Why Kept as a supporting number rather than a test. Measured across a corpus it does not separate background speech by itself; it earns its place only in combination with the levels around it.

Tested against Separates a continuous background from a single clap.

How it works Classical signal processing.

Energy in the pauses after speech Withdrawn
voice.roomEcho
Voice & podcastDataset QA

Measures The 60 to 420 ms tail after each phrase, against the phrase itself. Noise or reverb, and this number does not separate the two.

Reading it It rises with background noise as readily as with a live room, so read it as "how much is left in the pauses", not as a room verdict.

Why Not a reverb measure: against 24 measured room responses without noise it tracked the measured RT60 at Spearman 0.06, and a 1.71 s room scored below a 0.18 s booth. It stays because energy left in the pauses is worth seeing; the room claim was withdrawn on 27 Sep 2026 until a validated measure passes its check.

Tested against Tested 27 September 2026 against 24 rooms with measured reverberation times: Spearman 0.06, AUC 0.52, and it rises with noise.

How it works Classical signal processing.

What it is not Not a reverb measure. The label was withdrawn from the engine, the apps, the API and the MCP server.

What the active material looks like Proxy
voice.activeKind
Voice & podcastDataset QA

Measures voice, music, noise or mixed: the frame labels of everything above the silence gate, as one word.

Reading it Read the voice numbers as numbers about the material rather than about a voice as soon as this is not "voice". "mixed" means a voice AND something else, which is the honest answer when neither side is close to dominant.

Why Voice QA assumes speech input, and on a music mix or on steady noise that assumption is false while every number still looks like a measurement of a voice. These are the same labels the timeline is built from, so the labs cannot disagree about it.

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.

How it works Classical signal processing.

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 share of the active material Proxy
voice.activeVoiceShare
Voice & podcastDataset QA

Measures The share of active frames labelled voice, 0 to 1.

Reading it Near 1 is speech, near 0 is music or noise, and the middle is honest about material that is both.

Why A single word has to choose. Music with vocals genuinely is both, and a share says so.

Tested against Same frame classifier.

How it works Classical signal processing.

Voice brightness Proxy
voice.brightness
Voice & podcast

Measures Mean spectral centre of every non-silent frame, divided by 2500 Hz and capped at 1. Pauses with any noise in them count too.

Reading it Low is muffled or off-axis; high is thin or too close to a bright microphone. A noise floor above about -80 dBFS pulls the number up, because the pauses are part of the average.

Why Catches a badly placed microphone that every level meter calls perfect.

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.

How it works Classical signal processing.

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 Proxy
voice.sibilance
Voice & podcast

Measures Energy concentration in the 5–9 kHz range.

Reading it Low, Medium or High.

Why Harsh S sounds survive every later processing step and make long listening painful.

Tested against Direction tested: energy around 7 kHz moves Low to High.

How it works Classical signal processing.

What it is not A risk label, not a sibilance measurement in dB.

Cut off at the start Validated
voice.startsInSpeech
Voice & podcastDataset QABroadcast & film post

Measures Whether speech is already running on the very first frame.

Reading it True means the recording started too late.

Why A missing first word is invisible in every waveform view and fatal in a dataset.

Tested against Sees a file that starts mid-speech.

How it works Classical signal processing.

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).

Cut off at the end Validated
voice.endsInSpeech
Voice & podcastDataset QABroadcast & film post

Measures Whether speech is still running on the last frame.

Reading it True means the recording stopped too early.

Why Same as above, at the other end, and just as easy to miss.

Tested against Sees a file that stops mid-speech.

How it works Classical signal processing.

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).

Level at the start Validated
voice.edgeStartDb
Dataset QABroadcast & film post

Measures Envelope level on the first frames.

Reading it Loud means a hard cut; quiet means a natural start.

Why Separates a truncated take from one that simply begins softly.

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).

How it works Classical signal processing.

Level at the end Validated
voice.edgeEndDb
Dataset QABroadcast & film post

Measures Envelope level on the last frames.

Reading it Loud means a hard cut; quiet means it faded out.

Why The counterpart at the end, same reasoning.

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).

How it works Classical signal processing.

Pitch

The pitch of a voice, how much of the recording is voiced, and how much of the sound is harmonic. Jitter and shimmer are still in testing and not offered.

Pitch Validated
pitch.f0Hz
Pitch and voice quality

Measures The median fundamental frequency of the voiced parts, in Hz: where the voice sits. Every frame counts with its energy, so a periodic hum well under the voice does not.

Reading it Between 70 and 600 Hz. About 85 to 180 Hz for a man and 165 to 255 Hz for a woman, higher for a child. Null when less than 0.2 s of the recording is voiced.

Why Tells voices apart by register, shows that a recording was pitch-shifted or played at the wrong speed, and is where every reading that depends on pitch starts.

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).

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).

How it works Classical signal processing.

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.

Pitch, low end Proxy
pitch.f0LowHz
Pitch and voice quality

Measures The 10th percentile of the fundamental frequency over the voiced parts, weighted by energy.

Reading it Hz. With the high end it gives the span the voice used in this recording.

Why The floor of the voice: a speaker who drops to the bottom of their range reads differently from one who stays level.

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.

How it works Classical signal processing.

Pitch, high end Proxy
pitch.f0HighHz
Pitch and voice quality

Measures The 90th percentile of the fundamental frequency over the voiced parts, weighted by energy.

Reading it Hz. A tracker that slips to a higher harmonic in a loud vowel pulls this end up before it moves the median.

Why The top of the voice: stress, a question and excitement show here, and so does a voice that is pushed.

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.

How it works Classical signal processing.

Pitch variation Proxy
pitch.f0VariationSemitones
Pitch and voice quality

Measures How much the pitch moves: the standard deviation of the pitch around its median, in semitones.

Reading it Read speech sat between 2.2 and 4.3 semitones (10th to 90th percentile of 40 readings). Under about 1.5 reads as monotone, over 5 as animated.

Why The first number of prosody: a flat delivery loses an audience and a pitch that swings can be nerves or emotion.

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.

How it works Classical signal processing.

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.

Voiced share Proxy
pitch.voicedShare
Pitch and voice quality

Measures The share of the frames with sound that carry a pitch, 0 to 1.

Reading it Read speech sat between 0.49 and 0.76. Consonants and breath are not voiced. Steady noise with a tone in it counts as voiced, and a recording that is much quieter or louder than usual reads differently (see the status).

Why How much of the sound is voice: a whisper, a recording of mostly pauses and a recording of mostly vowels read differently.

Tested against Counts the frames with sound (within 35 dB of the 95th percentile frame) that carry a pitch. It depends on the level of the recording and on noise: against the clean version of the same synthetic recordings it moved between plus 13 and minus 28 points across 32 noise, reverberation and level situations (a recording 30 dB quieter read 24 points lower), and steady noise with a tone in it is counted as voiced. On real read speech 0.49 / 0.66 / 0.76 (10th / median / 90th percentile of 40 readings).

How it works Classical signal processing.

What it is not Not the share of speech: a recording of steady noise with a tone in it reads voiced.

Harmonics-to-noise ratio Validated
pitch.hnrDb
Pitch and voice quality

Measures How much of the voiced sound repeats itself from one period to the next, as the energy of the periodic part over the energy of the rest, in dB. Median over the voiced frames, weighted by energy.

Reading it Read speech sat between 8 and 16 dB. Breathiness, hoarseness, background noise and a rough recording lower it, and so do jitter and shimmer, because an irregular voice is not periodic. It can read too low above about 28 dB (about 22 dB over a telephone line).

Why One number for how clean the voice is: a noisy room, a breathy microphone and a worn voice all show up in it.

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).

How it works Classical signal processing.

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 Beta
pitch.jitterLocal
Pitch and voice quality

Measures Local jitter: how much neighbouring periods of the voice differ in length, in percent of the period.

Reading it Percent. Only given when the recording is quiet enough (at least 30 dB between the loud and the quiet frames) and holds 20 pairs of cycles, otherwise null. The clinical norm of about 1 percent is for a held vowel; in running speech the number reads two to three times that.

Why Roughness of the voice at the level of single cycles: hoarse and tired voices read high.

Status 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.

How it works Classical signal processing.

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 Beta
pitch.shimmerLocal
Pitch and voice quality

Measures Local shimmer: how much neighbouring cycles of the voice differ in amplitude, in percent of the amplitude.

Reading it Percent. Only given when the recording is quiet enough (at least 30 dB between the loud and the quiet frames) and holds 20 pairs of cycles, otherwise null. The clinical norm of about 4 percent is for a held vowel; in running speech the number reads about twice that.

Why Unsteadiness of the voice at the level of single cycles: a breathy or strained voice reads high.

Status 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.

How it works Classical signal processing.

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.

Pitch over time Proxy
pitch.f0Track
Pitch and voice quality

Measures The pitch every 10 ms from time 0, in Hz, null where the frame is unvoiced.

Reading it One value per 10 ms. A series: left out of a summary.

Why The contour: where the voice rises and falls, for plots, for intonation and for the singing coach.

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).

How it works Classical signal processing.

Scene

What fills the pauses (a machine, a program, nothing) and whether the voice in front can still be followed. The intelligibility number is a proxy and says so.

What fills the pauses Proxy
scene.background
Voice & podcastEnvironmentDataset QA

Measures One word for the background, read in the speech pauses after the first 0.4 s of each: quiet, stationary, program or unsteady.

Reading it Stationary is a level and spectrum that barely move: a steady hum or hiss, or a dense crowd; machines that change speed or run in cycles read unsteady. Program is a level that moves in the cadence of talking: a television, a radio, a second person, also music with a beat. Unsteady moves without cadence: traffic, clatter. Null when less than a second of pause is left to read.

Why A recordist needs to know whether to switch off the television or the ventilation before the next take, and a level meter cannot tell those two apart.

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.

How it works Classical signal processing.

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 Proxy
scene.programScore
Voice & podcastEnvironmentDataset QA

Measures How strongly the pauses carry a program: movement in the level times either the 2 to 8 Hz cadence of speech or a pitch (a second voice, music), 0 to 1.

Reading it A steady hiss scores 0: its level does not move. A speaker’s own breath moves but has neither cadence above the flat-noise floor nor a pitch, so it stays low. Above 0.5 the label reads program.

Why This is the number that says "there is a television on", which no noise floor in dB can say.

Tested against Synthetic scenes.

How it works Classical signal processing.

What it is not Not tested on real recordings.

Voices or notes in the pauses Proxy
scene.gapHarmonicShare
Voice & podcastEnvironmentDataset QA

Measures Share of the 40 ms pause frames with a clear, moving pitch between 70 and 400 Hz, read from the normalised autocorrelation after the first 0.4 s of each pause.

Reading it Breath, audience murmur and air handling have no pitch; a second voice does, and so does music with clear notes. Above roughly 0.35 the program score reads it as a program. Dense or bass-heavy music can stay low here and read as a steady floor instead: measured 0.07 on a club track at 18 dB under a lecture, which the label then called stationary. A pitch that does not move is a tone, not a voice, and is reported separately.

Why On real recordings the modulation cadence alone barely separated a television from the speaker’s own residue; a moving pitch in the pauses does.

Tested against Finds a second voice by its pitch in the pauses, in synthetic scenes.

How it works Classical signal processing.

What it is not Says that a voice or music is present, not whose.

Spectral movement in the pauses Proxy
scene.gapSpectralFlux
Voice & podcastEnvironment

Measures How much the shape of the pause spectrum changes from one 0.4 s window to the next, 0 to 1: eight log bands from 60 Hz to 4 kHz, averaged first so the flicker of steady noise cancels out.

Reading it Under 0.06 the shape stands still (a fan, a fridge, hiss); above 0.2 it keeps changing (music, speech, traffic). Stationary needs both a still level and a still shape; a club track at 18 dB under a lecture held its level within 1.7 dB and read as a machine until this number said otherwise.

Why Level alone cannot tell a steady bass line from a steady compressor; the shape of the spectrum can.

Tested against Music against a machine, in synthetic scenes.

How it works Classical signal processing.

Steady tone in the pauses Proxy
scene.gapTone
Voice & podcastEnvironment

Measures One fixed pitch that fills the pauses: more than 80% of the pitched pause frames within 4% of one frequency.

Reading it A fan blade, a transformer, a compressor. Null when the pauses carry no pitch or a moving one. Read it with the mains hum lens: 50 or 60 Hz and their harmonics are hum, anything else is a machine.

Why A fixed tone has a pitch like a voice does, and without this split a lecture with a 120 Hz fan behind it read as a program in the background.

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.

How it works Classical signal processing.

Not validated Real machines (fans, transformers, compressors) recorded behind speech.

Constant background noise Proxy
scene.stationaryScore
Voice & podcastEnvironmentDataset QA

Measures How still the pause level stands, 0 to 1: 1 when it varies less than 0.75 dB, 0 above 3.5 dB.

Reading it Read it with the low-band share: a constant background with most of its power under 500 Hz rumbles (a hum, air handling); one without sizzles (hiss, a dense crowd). It cannot tell a machine from a crowd: a washing machine or a car that changes speed scores low.

Why Stationary noise is the one kind a denoiser removes well and a listener stops hearing; knowing it is stationary changes what you do about it.

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.

How it works Classical signal processing.

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.

Rumble in the pauses Proxy
scene.gapLowBandShare
Voice & podcastEnvironment

Measures Share of the pause power below 500 Hz.

Reading it Above 0.5 the background is mostly rumble: air handling, traffic, a compressor. Speech and most television sit higher.

Why Where the background lives in frequency decides whether a high-pass filter helps or destroys the voice.

Tested against White noise reads 0.02 (500 of 24000 Hz) within 0.03 and a bed under 250 Hz reads above 0.9. 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. Tested on real environment recordings (SC-1, 12 October 2026, one run, 1,344 files: nine DEMAND environments with synthetic speech mixed in at 20, 10 and 5 dB): car against babble, AUC 0.81 at 20 dB (lower bound 0.74) and 0.92 at 10 dB (0.87). With the K2 detector (see Speech ratio) the same test gives 0.90 at 20 dB (0.85) and 0.97 at 10 dB (0.93).

How it works Classical signal processing.

Not validated Real rumble (air handling, traffic, a compressor) behind real speech or television; SC-1 used synthetic speech.

What it is not A rank measure for groups of environments, not a verdict on one recording.

Speech band in the pauses Proxy
scene.gapSpeechBandShare
Voice & podcastEnvironment

Measures Share of the pause power between 300 and 3400 Hz, where speech carries its words.

Reading it High together with a program score means the background talks in the same band as the foreground and will mask it; high with a stationary score means a broadband hiss.

Why A background in the speech band costs intelligibility at a far lower level than a rumble does.

Tested against A bed from 1 to 3 kHz reads above 0.9, white noise 0.13 (3100 of 24000 Hz) within 0.05, and a bed under 250 Hz reads under 0.05. 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. Tested on real environment recordings (SC-1, 12 October 2026, one run, 1,344 files: nine DEMAND environments with synthetic speech mixed in at 20, 10 and 5 dB): babble (restaurant, cafeteria) has a higher share in the speech band in the pauses than machine noise (washing machine, car), AUC 0.80 at 20 dB (lower bound 0.74) and 0.87 at 10 dB (0.80). With the K2 detector (see Speech ratio) the same test gives 0.88 at 20 dB (0.81) and 0.94 at 10 dB (0.90).

How it works Classical signal processing.

Not validated Real speech or television behind a speaker; SC-1 used synthetic speech and no television or music.

What it is not A rank measure for groups of environments, not a verdict on one recording.

Pause level spread Proxy
scene.gapStabilityDb
Voice & podcastEnvironment

Measures Standard deviation, in dB, of the quieter half of the pause frames (20 ms each).

Reading it Under about 1 dB the background stands still; above 3.5 dB it moves. The stationary and program scores are built on this number.

Why It is the raw measurement behind the label, kept visible so the label can be checked against it.

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.

How it works Classical signal processing.

Not validated Real backgrounds, and whether the limits separate a still background from a moving one.

Speech over background Proxy
scene.speechToBackground
Voice & podcastEnvironmentDataset QA

Measures Mean speech level minus mean pause level, dB.

Reading it Above 45 dB the pauses count as quiet whatever else they contain. Around 20 dB a listener works; around 10 dB they miss words.

Why The simplest honest number for "how far in front is the voice", and the one to quote when the segmental SNR is too fine-grained for the reader.

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.

How it works Classical signal processing.

Not validated Real recordings with a known level difference.

What it is not A level difference, not intelligibility.

Intelligibility (proxy) Proxy
scene.intelligibility
Voice & podcastEnvironmentDataset QABroadcast & film post

Measures Clear, borderline or buried: whether the foreground speech is likely to be followed, read from the recording itself.

Reading it A proxy, not a Speech Transmission Index: that needs a test signal. The weaker of two readings, the worst tenth of the per-phrase SNR and the speech level over the mean pause level (3 dB reads 0, 18 dB reads 1 on both), then reduced for a reverberant room and for clipping. No penalty for a narrow band: telephone speech is followable. Null under two measurable phrases.

Why The one question behind a voice message in a noisy room is whether it can still be understood; this answers it as far as a recording can, and says that it is a proxy.

Tested against Synthetic scenes: buried when a television sits almost as loud.

How it works Classical signal processing.

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) Proxy
scene.intelligibilityScore
Voice & podcastDataset QA

Measures The intelligibility proxy as a number, 0 to 1.

Reading it 0.65 and up reads clear, 0.35 to 0.65 borderline, below that buried. Same inputs as the label.

Why Lets a dataset be sorted by how followable its speech is, instead of by a noise floor that does not know where the voice is.

Tested against Same proxy.

How it works Classical signal processing.

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.

Worst phrases SNR Validated
scene.worstPhraseSnr
Voice & podcastDataset QA

Measures The tenth percentile of the per-phrase SNR: what the weakest phrases measure against the noise beside them.

Reading it The median tells you about the take; this tells you about the sentence that gets lost. Under 8 dB a listener misses words there.

Why One inaudible sentence is enough to miss a message, so the proxy is built on the weak phrases and not on the average.

Tested against Follows from the per-phrase SNR.

How it works Classical signal processing.

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.

Per phrase

The same questions, asked of one sentence at a time.

Phrase level Validated
segment.level
Voice & podcastDataset QA

Measures Speech level of this phrase alone.

Reading it Compare phrases against each other to spot a speaker drifting off the microphone.

Why A take can average perfectly while half the phrases are too quiet.

Tested against Matches the computed RMS per phrase.

How it works Classical signal processing.

Phrase clipping Validated
segment.clipFraction
Voice & podcastDataset QA

Measures Share of clipped samples inside this phrase.

Reading it Anything above zero points at the phrase to re-record.

Why Narrows "this file clips" down to which sentence.

Tested against Points at the one clipped phrase of three.

How it works Classical signal processing.

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.

Energy after this phrase Proxy
segment.decayScore
Voice & podcastDataset QA

Measures How much energy lingers after this phrase, relative to the phrase itself. Noise or reverb, not separated.

Reading it Null when nothing usable follows, which is honest rather than zero.

Why The per-phrase version of the file-level number, and it carries the same limit: it rises with a noisy pause as well as with a live room. Useful for finding the one phrase that differs from the rest, not for judging the room.

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.

How it works Classical signal processing.

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).

Decay slope Proxy
segment.tailDecay
Voice & podcastDataset QA

Measures How fast the sound falls away after this phrase, in dB per second.

Reading it Steeper is drier, shallower rings. Needs a quiet gap behind the phrase, which across a corpus only about one phrase in ten has; read it as a sample, not as an average. Per phrase it scatters widely (in the driest of 24 test rooms single phrases ran from about -146 to -30 dB/s, 10th to 90th percentile, and only 48 percent of the phrase ends there gave a value), so use the median over many phrases, not one.

Why A slope in dB per second behind the phrase. It ranks rooms roughly by how much they ring, and is not calibrated to a reverberation time: see its status for the numbers.

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).

How it works Classical signal processing.

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.

Background character Proxy
segment.flankFlatness
Voice & podcastDataset QAEnvironment

Measures Spectral flatness of the pauses around this phrase.

Reading it High is broadband room noise; low means something tonal is playing underneath.

Why Two phrases with the same poor SNR need different fixes, and this says which is which.

Tested against Separates room noise from something tonal underneath.

How it works Classical signal processing.

Dynamics

The peak against the loudness people hear, which survives normalisation where crest factor does not.

Peak to loudness ratio Validated
dynamics.plr
Mix & masterBroadcast & film post

Measures True peak minus integrated loudness.

Reading it Above 12 LU is dynamic, under 8 LU is heavily limited. Unlike crest factor this uses the loudness people hear.

Why It survives normalisation: a platform moves both numbers together, so PLR is what the listener is left with.

Tested against Exactly the distance it claims.

How it works Classical signal processing.

Peak to short-term ratio Validated
dynamics.psr
Mix & master

Measures True peak minus the loudest 3-second window.

Reading it Reads the loudest passage rather than the whole file, so it is lower than PLR and closer to what a limiter did.

Why The number mastering engineers watch while limiting, because the average hides the section that got crushed.

Tested against Exactly the distance it claims.

How it works Classical signal processing.

Platform delivery

What each platform does to the file, and whether the peak clears the ceiling after it.

Platform normalisation Validated
platform.normalisation
Mix & master

Measures Per platform: the gain it will apply, the true peak that results, and whether that clears the ceiling.

Reading it Read the true peak AFTER the gain, not the measured one. A quiet master gets turned up and takes its peak with it.

Why The common mistake is checking the measured peak against the ceiling, which passes a file that will clip once the platform normalises it.

Tested against Reproduces Spotify’s own published example; says nothing where a platform does not publish its behaviour; every target carries a source.

How it works Classical signal processing.

Loops and packs

Does it click on wrap-around, does it sit on the grid, is it a whole number of bars.

Seam ratio Validated
loop.seamRatio
Loop & sample-pack QCDataset QA

Measures The jump between the last and first sample, divided by the average sample-to-sample step in the file. Worst channel.

Reading it Below about 3 you hear nothing on wrap-around; above 10 it is an audible tick. Null under three samples.

Why The raw jump is useless (0.03 is silence in noise and one ordinary step in a bass tone); the ratio caught four real clicks in sixty loops that took twenty repeats to hear.

Tested against Near zero on a loop that ends where it began, a click on the same loop cut short.

How it works Classical signal processing.

Silence at start Validated
loop.edgeSilenceStartMs
Loop & sample-pack QCDataset QABroadcast & film post

Measures Milliseconds below -60 dBFS before the first sound.

Reading it A number, not a verdict: an offbeat hat or a reverse effect is meant to start quiet.

Why Leading silence shifts a loop off the grid the moment it is dropped in a DAW, and it is invisible in a waveform at zoom-to-fit.

Tested against 120 ms of leading silence, to the sample.

How it works Classical signal processing.

Silence at end Validated
loop.edgeSilenceEndMs
Loop & sample-pack QCDataset QABroadcast & film post

Measures Milliseconds below -60 dBFS after the last sound.

Reading it Trailing silence in a loop is a gap on every repeat; in a broadcast file it is dead air.

Why The classic export mistake is a bar of nothing left at the end, and every player will play it.

Tested against 120 ms of trailing silence, to the sample.

How it works Classical signal processing.

Bar fit Planned
loop.barFit
Loop & sample-pack QC

Measures Whether the duration is a whole number of bars at the detected or supplied BPM.

Reading it on-grid within 5 ms; off-grid with the deviation; unknown when the tempo is not confident.

Why This was the only proof that counted when sixty loops were asked whether they are what they claim to be.

Tested against In the registry as planned.

How it works Classical signal processing.

Provenance

Is this file what it claims to be: the wall a codec leaves, the bits actually in use, a resampled source, a splice.

Bandwidth Validated
provenance.bandwidthHz
ProvenanceDataset QAMix & master

Measures Where the spectrum closes, as the median over the non-silent half-second blocks of the file.

Reading it A clean 44.1 kHz recording reaches 19 to 20 kHz. A wall well below that is a codec, a resampler, or a dark source; the lenses below say which.

Why This one number carries most of the provenance story, and it comes from the same function the grid draws as a lane; the index reads up to Nyquist where the grid stops at 20 kHz.

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.

How it works Classical signal processing.

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.

Lossy source Validated
provenance.lossySource
ProvenanceDataset QAMix & masterBroadcast & film post

Measures Whether the spectrum carries the wall a lossy encoder leaves: lossless, lossy ~64k, ~128k, ~256k, or unknown.

Reading it Needs a brick wall (from -30 to -60 dB within 3% of the frequency) at a codec position between 10 kHz and 0.9 of Nyquist, on broadband material of at least a second. A wide roll-off is lossless whatever its bandwidth; a filter-shaped one is unknown, because a resampler and a very low bitrate look alike. One collision is unfixable: a 64 kbps wall (11.2 kHz) and a sharply resampled 22.05 kHz source (11.1 kHz) read the same, and both get unknown.

Why A WAV that used to be an MP3 is the most common lie in a delivery, and the container cannot tell you.

Tested against One fixture per label (MP3 at 64k to 256k), and clean PCM reads lossless.

How it works Classical signal processing.

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.

Effective bit depth Validated
provenance.effectiveBitDepth
ProvenanceDataset QABroadcast & film post

Measures Bits actually in use: 24 minus the fewest trailing zeros in the 24-bit integer form of the samples.

Reading it 16 in a 24-bit container means padded, not remastered. 24 means the samples never sat on an integer grid: a float render, or a lossy file decoded on the fly; a lossy file rendered to 16-bit PCM reads 16 like any other PCM, so use the lossy source lens for that. A host that resamples on decode (a browser at device rate) also reads 24. Null under a thousand non-silent samples.

Why The container states a bit depth; the samples prove one. When they disagree the file has been re-wrapped, and that is worth knowing before anyone pays for the extra bits.

Tested against 16 for 16-bit and 24 for 24-bit samples, whatever the container says.

How it works Classical signal processing.

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.

Upsampled from Validated
provenance.upsampled
ProvenanceDataset QA

Measures The likely original sample rate when a resampler-shaped roll-off starts at half of a lower standard rate. Null otherwise.

Reading it 22050 under a 48 kHz container means someone resampled a 22.05 kHz source; nothing above 11 kHz was ever there. Read from where the roll-off starts, against the level just below it, so the tilt of the material does not move it. A brick wall at a half rate is left as unknown (it may be a 64 kbps codec), a wide natural roll-off is never called upsampling, and a very low bitrate codec (lame 48k, aac 96k) can still mimic a resampler.

Why Resampling up adds no information and the metadata will never admit it happened.

Tested against Finds the original rate behind a resampler for every standard rate.

How it works Classical signal processing.

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.

Bandwidth splices Validated
provenance.spliceCount
Provenance

Measures How often the per-block bandwidth jumps by more than 3 kHz from one block to the next and holds for at least two seconds.

Reading it 0 is one steady source. A count is a join between material of different origin OR an arrangement change inside one piece (a breakdown that drops the hats); the grid bandwidth lane shows where, and the ear decides which.

Why Two sources glued together look like one file to every tool that reads the header, and this is the only number that notices.

Tested against One join between two sources of different bandwidth.

How it works Classical signal processing.

Room

How long a room rings, band by band, measured from a clap, a balloon pop, an impulse response or a sweep.

Reverberation time (mid) Validated
room.rt60Mid
Room acoustics

Measures How long the sound in the room takes to fall 60 dB, as the median of the 500 Hz, 1 kHz and 2 kHz octave bands, read from the Schroeder backward integral of a clap, a balloon pop or an impulse response (the ISO 3382 method, T30 when the decay has 45 dB of range, otherwise T20).

Reading it Seconds. A speech room sits around 0.4 to 0.8 s, a living room 0.3 to 0.6 s, a church several seconds. Null when no band had a straight decay with enough range: clap louder or closer, or in a quieter room. Read the confidence per band in room.rt60Bands: under 35 dB of decay the number is an indication.

Why It is the number a room is judged by, and the one thing the voice lenses can only approximate. Measured from an impulse it stands on the standard method instead of on the tail of a spoken phrase.

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.

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.

How it works Classical signal processing.

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.

Reverberation time per band Validated
room.rt60Bands
Room acoustics

Measures Per octave band from 125 Hz to 4 kHz (bands against Nyquist are left out): the reverberation time, the noise floor in that band, which estimator gave the value (T20 or T30), how much decay range it had, a confidence and the decay curve itself.

Reading it A clap gives 500 Hz to 4 kHz; the lower bands say "clap does not reach that low" instead of a guess. An impulse response file gives every band. Confidence "high" means at least 35 dB of decay range, the ISO requirement; "low" means a tighter range, read it as an indication.

Why Reverberation is not one number: a bare ceiling rings in the highs and a thin carpet does not touch the lows, and one broadband figure hides that difference. Which band is long decides what to fix.

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.

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.

How it works Classical signal processing.

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.

Flutter echo strength Proxy
room.flutterStrength
Room acoustics

Measures How strongly the decay above 500 Hz repeats itself at a fixed delay between 3 and 50 ms, as bounce between two parallel hard walls does. 0 to 1.

Reading it Constructed flutter reads 0.47 to 0.68 and constructed rooms without any echo 0.10 to 0.28. Read 0.4 and up as flutter, under 0.3 as none, and in between as unclear.

Why A room can have a fine reverberation time and still ring like a spring where two hard parallel walls face each other; no reverberation number shows that, and a clap makes it audible as a tick.

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.

How it works Classical signal processing.

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 Proxy
room.flutterPeriodMs
Room acoustics

Measures The delay between the echoes, in whole milliseconds from 3 to 50, when the flutter strength is above 0.2.

Reading it Null when there is no flutter to speak of. The distance between the walls is 0.343 m per ms times the period, divided by two: 9 ms is about 1.5 m. Below a strength of 0.3 the period is not reliable.

Why Turns "there is flutter" into where: the period gives the distance between the two walls to treat.

Tested against Constructed echoes of 5, 9, 20 and 35 ms were found exactly (test/room.test.ts).

How it works Classical signal processing.

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.

Room noise floor Validated
room.noiseFloor
Room acoustics

Measures The broadband noise in the quiet before the clap (or in the tail of an impulse response): the median frame level.

Reading it Relative to full scale, not a calibrated sound level. Per octave band it is in room.rt60Bands. Above about -50 dBFS the background decides the measurement, and a clap in it gives a short decay range.

Why It decides how much decay there is to measure: a noisy room cuts the usable range and the confidence with it, and the fix is to switch the source off, not to treat the room.

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).

How it works Classical signal processing.

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 Validated
room.clapAt
Room acoustics

Measures Where the clap or the pop was found in the recording.

Reading it Null for an impulse response file. A position right at the start of the recording usually means a click of the recorder was taken for the clap.

Why Shows what the measurement locked on to, so a wrong lock can be seen instead of read as a strange reverberation time.

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).

How it works Classical signal processing.

Not validated A real clap on a real phone, and a door or a tap on the phone close to the clap.

Clap prominence Proxy
room.clapProminence
Room acoustics

Measures How far the clap stood above the quiet of the recording: the loudest 10 ms frame against the 20th percentile of the frame levels.

Reading it At least 20 dB is required, 30 dB or more is comfortable. Null for an impulse response file.

Why A clap that barely clears the room leaves a short decay range and a time with low confidence; this says so before the time is read.

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.

How it works Classical signal processing.

Overload on the clap Validated
room.clipped
Room acoustics

Measures Whether the microphone overloaded on the clap or the pop: three samples at full scale or above.

Reading it True marks every band with low confidence: the first milliseconds are distorted and the position of the -5 dB point moves.

Why A loud clap close to a phone clips easily, and showing a tidy number from a clipped clap is the failure to avoid.

Tested against A constructed clap at full scale is flagged and constructed claps at normal level are not (test/room.test.ts).

How it works Classical signal processing.

Sweep measurement range Proxy
room.sweepRange
Room acoustics

Measures For a sweep recording: how far the peak of the deconvolved impulse response stands above the noise, in dB.

Reading it More is better; a clean sweep in a quiet room leaves well over 40 dB. Null for a clap, a balloon or an impulse response file. The decay range per band, which is what limits a reverberation time, is in room.rt60Bands.

Why Says in one number whether the sweep was played loud enough and the room quiet enough, before the per-band results are read.

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.

How it works Classical signal processing.

What it is not Not the decay range of a band: that is in room.rt60Bands.

Direct sound against early reverberation Proxy
room.directToReverb
Room acoustics

Measures For a sweep recording: the direct sound of the loudspeaker against the reverberation 50 to 150 ms after it, in dB.

Reading it A few dB to 20 dB for a microphone in the room at a normal distance; over 30 dB means the microphone stood so close to the speaker that it measured the speaker and not the room. Null for the other sources.

Why A phone that plays the sweep itself, or stands against the speaker, measures its own direct path, and the room then lies far under the measurement; this catches it.

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.

How it works Classical signal processing.

Not validated A real loudspeaker and phone at known distances.

Microphone too close to the speaker Proxy
room.tooCloseToSpeaker
Room acoustics

Measures For a sweep recording: true when the direct sound is more than 30 dB above the early reverberation.

Reading it True means measure again with the microphone further from the speaker (and not in its beam). Null for the other sources.

Why The plain-language version of the direct-to-reverberation number, so a failed measurement comes with the one thing to change.

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.

How it works Classical signal processing.

Not validated A real loudspeaker and phone at known distances.

Room measurement method Validated
room.method
Room acoustics

Measures How the impulse response was obtained: clap, balloon, sweep (the recording holds the exponential sweep of this engine as the room returned it) or impulse (the file itself is an impulse response).

Reading it A balloon is louder and rougher than a clap and is read like one. A sweep and an impulse response file measure every band the sample rate allows, from 125 Hz; a clap gives 500 Hz and up.

Why The method decides which bands exist and how far to trust them, so the answer says which of those readings you hold.

Tested against Echoes the source the caller asked for (test/room.test.ts).

How it works Classical signal processing.

Signal chain

What went missing on the way to the file: stretches of digital silence in the middle of sound, where packets were lost. The delayed-copy (slapback) measures are still in testing and not offered.

Slapback or echo delay Beta
chain.slapbackDelayMs
Chain checks

Measures The delay of a delayed copy of the sound in the recording, between 40 and 800 ms: a slapback from a hard wall or a delay effect (60 to 180 ms) or an echo from a call (200 ms and up).

Reading it Milliseconds, or null when no copy stands out. From the autocorrelation of the whitened recording: a copy adds a sharp peak at its delay. A recording shorter than 6 s gets no reading.

Why A copy of the voice a fraction of a second later is one of the most common faults of a recording that went through a room, a speakerphone or a call, and one that a loudness number never shows.

Status 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.

How it works Classical signal processing.

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 Beta
chain.slapbackLevelDb
Chain checks

Measures The level of that copy relative to the sound it copies, in dB: -3 is nearly as loud, -20 is faint.

Reading it Relative to the recording as a whole, direct sound and reverberation together; steady noise under the speech makes it read lower (about 1.5 dB at 10 dB signal-to-noise). Null when there is no copy.

Why Whether the copy matters: one at -6 dB makes speech hard to follow, one at -20 dB is hardly heard.

Status 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.

How it works Classical signal processing.

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 Beta
chain.slapbackScore
Chain checks

Measures How many robust standard deviations the strongest delayed copy stands above its surroundings in the autocorrelation. A copy is reported from 12.

Reading it Real speech, noise and hum without a copy stayed under 8 in our tests; synthetic voices without a copy scored up to 28, and constructed copies of -16 to -4 dB scored from 14 upward. From 12 a copy is reported, below that it is not. A peak that has equals elsewhere in the range (a periodic structure: the frame grid of some synthetic voices, a music loop) is not a copy: the score then stays under 12. Null for a recording shorter than 6 s.

Why Shows how clear the call is, and keeps a near miss visible instead of rounding it to "none".

Status 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.

How it works Classical signal processing.

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).

Dropouts Validated
chain.dropoutCount
Chain checks

Measures The number of abrupt gaps of digital silence, 8 to 500 ms, inside sound: lost packets that were replaced by nothing.

Reading it A gap that cuts the sound, with the level within 20 dB of the active level on both sides, counts; a pause or a gate does not. A lower bound: a loss in a pause or a quiet passage cannot be told from a pause, and a loss that the codec concealed (repeat, interpolation, comfort noise) leaves no gap. Null for a recording under 2 s.

Why Lost packets make speech stutter and cost a recogniser digits and names, and nothing else in this registry sees them: the level, the noise and the spectrum are fine.

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.

How it works Classical signal processing.

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 Validated
chain.dropoutSec
Chain checks

Measures The total length of the dropouts, in seconds.

Reading it Add it to the duration to see the share of the recording that was lost where it mattered.

Why Ten gaps of 20 ms and one of a quarter of a second are different faults; the count alone does not tell them apart.

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).

How it works Classical signal processing.

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 Validated
chain.dropoutMaxMs
Chain checks

Measures The length of the longest dropout, in ms; null when there are none.

Reading it One lost packet is usually 20 ms; 60 ms or more is several in a row.

Why A burst of loss is worse than the same loss spread out, and this is the number that shows a burst.

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).

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.

How it works Classical signal processing.

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.

Tones

A peak against the noise around it, in the words of ISO 1996-2. Relative, never dB(A).

Tone prominence Validated
tone.prominenceDb
EnvironmentDataset QAProvenance

Measures The most prominent tone against the masking noise in its critical band, per ISO 1996-2 annex C, from a 1 Hz spectrum of the whole file.

Reading it Under 4 dB it is not heard as a tone; above 10 dB it is prominent and most environmental noise codes add a penalty. Null on speech, where the tone is the voice itself, and under 0.17 s. On music it reads the sustained note, which is content, not a defect.

Why A heat pump, a fan or a transformer is not loud, it is tonal, and a broadband level never shows that. This is the number the complaint is about.

Tested against ISO 1996-2 annex C: 0, 6 and 15 dB above the masking level, and the label boundaries.

How it works Classical signal processing.

Tone frequency Validated
tone.frequencyHz
Environment

Measures Where that most prominent tone sits.

Reading it 50 or 100 Hz is mains, a few hundred is a motor or a pump, a few kHz is a switching supply or a whistle.

Why The frequency names the source, and the source is what someone can switch off.

Tested against A tone of known frequency.

How it works Classical signal processing.

Tonality Validated
tone.label
EnvironmentDataset QA

Measures The prominence in the words of the standard: none, audible, prominent.

Reading it Boundaries at 4 and 10 dB above the masking level.

Why Reports and noise codes speak in these three words; the dB value behind them is for the engineer.

Tested against The label boundaries of ISO 1996-2 annex C.

How it works Classical signal processing.

Mains hum

50 or 60 Hz and their harmonics, measured only where the voice pauses.

Mains hum Validated
hum.levelDb
Voice & podcastBroadcast & film postDataset QA

Measures Energy at 50 or 60 Hz and their harmonics up to 500 Hz, measured only in speech pauses, in dB above the noise floor of the 30 to 600 Hz band.

Reading it Under 6 dB there is no mains structure worth naming. Null when no 0.34 s window fits inside a pause: that is not measured, not absent.

Why "There is 50 Hz hum 18 dB above your floor" is something a voice recordist can act on; a broadband noise floor is not.

Tested against 6 dB more hum reads 6 dB more; null when no window fits in a pause.

How it works Classical signal processing.

Mains frequency Validated
hum.mainsHz
Voice & podcastBroadcast & film post

Measures 50 or 60, whichever harmonic series the pauses carry, or null when the hum stays under 6 dB.

Reading it 50 Hz is Europe, most of Asia and Africa; 60 Hz is the Americas and parts of Japan.

Why Says which notch to reach for, and occasionally where a recording was made.

Tested against Names 50 or 60 Hz for a harmonic series in the pauses and stays quiet without one.

How it works Classical signal processing.

Content

What kind of audio this is, and how firmly we hold that.

Content type Proxy
signal.contentType
Voice & podcastMix & masterProvenanceDataset QAEnvironmentLoop & sample-pack QC

Measures Whether this is voice, music, mixed, noise or silence.

Reading it "Unknown" is a real answer: the evidence did not agree. Noise is 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.

Why Decides which of the other lenses mean anything at all for this file.

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.

How it works Signal processing with a small learned model inside.

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).

Content confidence Proxy
signal.contentConfidence
Dataset QAProvenance

Measures How firmly the content type is held.

Reading it Capped at 0.5 for files under three seconds.

Why A verdict without its confidence is a guess dressed as a fact.

Tested against Capped at 0.85, and at 0.5 under 3 seconds.

How it works Signal processing with a small learned model inside.

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.

Evidence Proxy
signal.contentEvidence
Dataset QAProvenance

Measures Which independent checks back the content type up.

Reading it A list of short facts, such as a beat grid or a centred stereo image.

Why Makes the verdict arguable instead of oracular, which is the only way anyone trusts it twice.

Tested against The independent checks behind the verdict.

How it works Signal processing with a small learned model inside.

Not validated Part of the file verdict that includes a small learned model, described under signal.contentType.

Beat stability Proxy
signal.beatStability
Mix & masterDataset QA

Measures Share of 6-second windows agreeing on one tempo.

Reading it Null below 24 seconds, because a claim needs enough windows to be worth making.

Why Music holds a grid and speech does not, which is the most reliable single separator we found.

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.

How it works Classical signal processing.

Not validated Music.

What it is not Not shown to recognise a real tempo; that needs music.

Spectral flatness (opening) Validated
signal.tonality
EnvironmentDataset QA

Measures How noise-like the opening of the file is, 0 to 1.

Reading it Near zero is a pure tone: an alarm, a test signal, a beep. Near one is broadband noise.

Why Speech is never a pure tone, so a near-zero reading rules it out on its own.

Tested against The spectral flatness of the opening of the file: a pure tone reads below 0.01 and noise above 0.9.

How it works Classical signal processing.

Brightness Proxy
signal.brightnessBucket
Mix & master

Measures The overall tone as a word.

Reading it Dark, Balanced, Bright or Very bright.

Why Sorting a library by feel needs words, not hertz.

Tested against A bucket on a spectral-centroid measure.

How it works Classical signal processing.

Dynamics Proxy
signal.dynamicsBucket
Mix & master

Measures The crest factor as a word.

Reading it Flat, Compressed, Modern or Dynamic.

Why Tells you at a glance whether a file has been mastered already.

Tested against A bucket on a dynamics measure.

How it works Classical signal processing.

Rough band label Proxy
signal.dominantBand
Mix & masterEnvironmentLoop & sample-pack QC

Measures A rough label for where the sound sits, taken from the zero-crossing rate, not from the energy per band.

Reading it Named, from sub to air. A loud bass with a little high-frequency noise on top can read as a higher band than the one with the most energy; the spectrum bands lens gives the real distribution.

Why The shortest possible hint at what a file sounds like, to be checked against the spectrum.

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.

How it works Classical signal processing.

What it is not Not the band with the most energy; the spectrum bands lens gives that.

Mono-in-disguise score Validated
signal.monophonic
ProvenanceDataset QA

Measures How closely the two channels match: their correlation, never below 0.

Reading it Near 1 means the stereo file is mono in disguise. It is a correlation, not a probability.

Why A stereo container proves nothing; this catches an upmixed or duplicated channel.

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.

How it works Classical signal processing.

What it is not Not a probability: it is the left-right correlation, never below zero.

DC offset Validated
signal.dcOffset
Dataset QAProvenanceBroadcast & film postLoop & sample-pack QC

Measures Constant shift of the waveform away from zero.

Reading it Anything meaningfully above zero points at faulty hardware.

Why Costs headroom and shows up nowhere else. One number for the whole file is enough.

Tested against A tone shifted by +0.05 and by -0.03 reads the shift with its sign, within 0.002.

How it works Classical signal processing.

Has clipping Validated
signal.clipping
Dataset QAMix & masterBroadcast & film postLoop & sample-pack QC

Measures Whether the file clips anywhere.

Reading it A yes or no for triage.

Why The first filter when sorting a folder of hundreds.

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.

How it works Classical signal processing.

Not validated High-frequency clipping is invisible to it, by design.

Clipping regions Validated
signal.clippingRegions
Dataset QAMix & masterBroadcast & film post

Measures How many separate stretches clip.

Reading it One region is an accident; twenty is a recording-level problem.

Why Distinguishes a single loud moment from a take recorded far too hot.

Tested against Flat-top detection, see signal.clipping.

How it works Classical signal processing.

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).

Silent regions Validated
signal.silenceRegions
Dataset QABroadcast & film post

Measures How many separate silent stretches there are.

Reading it A count.

Why Many short silences is a stuttering edit; one long one is dead air.

Tested against Silences of 1 s and 0.5 s between stretches of sound read as two regions; continuous sound reads zero regions.

How it works Classical signal processing.

Total silence Validated
signal.silenceTotalSec
Dataset QABroadcast & film postLoop & sample-pack QC

Measures How much of the file is silent.

Reading it Seconds.

Why Tells you how much of what you are storing and paying for is nothing.

Tested against The same two silences (1.5 s in all) read between 1.3 and 1.7 s; continuous sound reads 0.

How it works Classical signal processing.

Timeline regions Proxy
signal.regions
Voice & podcastProvenanceDataset QAEnvironment

Measures The file cut into stretches labelled voice, silence, music, noise or clipping.

Reading it Each region carries its own confidence.

Why The map you navigate by, and the thing an agent can act on region by region.

Tested against The same frame classifier: voice, silence, music, noise, clipping.

How it works Classical signal processing.

What it is not Not validated on a labelled corpus of real recordings.

Tags Proxy
signal.tags
Dataset QA

Measures Short keywords summarising the file.

Reading it Meant for search, not for reading.

Why Makes a library findable without opening anything.

Tested against Technical tags only (content, brightness, dynamics, sample rate, channels, issues, hints).

How it works Signal processing with a small learned model inside.

Not validated Part of the file verdict that includes a small learned model, described under signal.contentType.

What it is not No person attributes: no gender, age, emotion or speaker.

Over time

Values that move, returned as curves.

Third-octave spectrum Validated
series.thirdOctave
EnvironmentMix & masterProvenance

Measures Level per IEC 61260 third-octave band, 20 Hz to 20 kHz, dBFS RMS, from the same spectrum as the tone measurement.

Reading it White noise rises 3 dB per band-octave, pink noise reads flat, a full-scale sine reads -3 dBFS in its band. Relative to full scale, not to a calibrated microphone.

Why The language of everyone who works with a sound level meter, and the base for a tonal-balance check against a reference curve.

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.

How it works Classical signal processing.

Loudness over time Validated
series.shortTermLufs
Mix & masterVoice & podcastBroadcast & film post

Measures Short-term loudness: a 3-second window, one value per 100 ms.

Reading it Flat = evenly loud; jagged = the level moves.

Why Shows where the loudness range comes from instead of only how big it is.

Tested against Same computation as the short-term maximum.

How it works Classical signal processing.

Not validated No test of its own.

Waveform Validated
series.waveform
Voice & podcastMix & masterProvenanceDataset QAEnvironmentBroadcast & film postLoop & sample-pack QC

Measures Downsampled envelope of the signal.

Reading it The familiar shape; loud is tall.

Why Orientation. Everything else is easier to read once you know where you are.

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.

How it works Classical signal processing.

Voice envelope Validated
series.rmsEnvelope
Voice & podcast

Measures Level over time at about 50 frames per second.

Reading it The shape of the speaking, finer than the waveform view.

Why Fine enough to see individual syllables, which is where pacing and clipping live.

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.

How it works Classical signal processing.

Voice activity mask Proxy
series.voicedMask
Voice & podcastDataset QA

Measures Speech or not, for every envelope frame.

Reading it Aligned one-to-one with the envelope.

Why Lay it over any other lens and every measurement splits into "during speech" and "between speech".

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).

How it works Classical signal processing.

Energy envelope Validated
series.energyEnvelope
ProvenanceDataset QAEnvironment

Measures Level over time, fixed resolution regardless of file length.

Reading it The overview shape.

Why Comparable between files of different lengths, which the waveform is not.

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.

How it works Classical signal processing.

Brightness envelope Validated
series.centroidEnvelope
ProvenanceEnvironment

Measures Zero-crossing rate over time, a rough brightness trace at the same resolution as the energy envelope. It is not a spectral centre in Hz.

Reading it Rising means the material got higher in pitch or brighter. A sine reads 2f/fs.

Why Brightness moves where level does not: an EQ change, a different microphone, another source entirely.

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.

How it works Classical signal processing.

What it is not Not a spectral centre in Hz; it follows the zero-crossing rate.

Lanes

Block-by-block measurements you can stack on one time axis.

Spectrum lane Validated
grid.terrain
Voice & podcastMix & masterProvenanceDataset QAEnvironment

Measures Energy per frequency band over time, 48 log-spaced bands.

Reading it Bright is loud. Vertical stripes are hits; horizontal bars are sustained tones.

Why The shape of the sound at a glance, and the layer every other lane is read against.

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.

How it works Classical signal processing.

Level lane Validated
grid.level
Voice & podcastMix & masterDataset QABroadcast & film post

Measures RMS level per block.

Reading it Higher is louder; a flat line is compressed or steady material.

Why Finds the loud and quiet stretches without scrubbing through the file.

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.

How it works Classical signal processing.

Peak lane Validated
grid.peak
Mix & masterDataset QA

Measures Highest sample per block.

Reading it Touching 0 dBFS marks the blocks that clip.

Why Pairs with the level lane to give the crest factor its two halves.

Tested against Tones of 0.5 and 0.05 amplitude read their peak in dBFS within 0.1 dB in every block.

How it works Classical signal processing.

Dynamics lane Validated
grid.crest
Mix & masterProvenance

Measures Crest factor per block.

Reading it Above 14 dB it breathes; below 8 dB it was squashed.

Why A flat stretch inside an otherwise dynamic file is almost always a different source.

Tested against A sine reads 3.01 dB within 0.1 and a square wave 0 dB within 0.15, in every block.

How it works Classical signal processing.

Brightness lane Validated
grid.centroid
Mix & masterProvenanceEnvironment

Measures Spectral centre per block.

Reading it Rising is brighter, falling is darker or duller.

Why Follows tonal changes the spectrum lane shows but does not summarise.

Tested against A tone reads its own frequency within 2 percent in every block, at 1000 and 4000 Hz.

How it works Classical signal processing.

Bandwidth lane Validated
grid.bandwidth
ProvenanceDataset QA

Measures Where the spectrum closes off, block by block. Null when too quiet to measure.

Reading it Measured: 64 kbps sits near 11 kHz, 128 near 16.5, 256 near 19.

Why Reads the file’s history: how hard it was compressed, and exactly where two sources were spliced together.

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.

How it works Classical signal processing.

Noise floor lane Validated
grid.noiseFloor
Voice & podcastDataset QAEnvironment

Measures The quietest frames near each block, as a 25th percentile over a ±3 block window.

Reading it A step up means noise arrived. Digital silence sits near −120 dB.

Why Noise under speech makes it harder to follow, and this shows the second it starts. It describes the signal; it does not predict speech-recognition errors.

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.

How it works Classical signal processing.

Stereo lane Validated
grid.correlation
Mix & master

Measures Left against right per block, on a fixed −1 to +1 scale.

Reading it +1 is mono, lower is wider, below 0 the channels fight.

Why Catches a phase problem in one passage that the file-level average washes out.

Tested against Equal channels read above 0.999, opposite channels below minus 0.999, and independent noise within 0.05 of zero.

How it works Classical signal processing.

Width lane Validated
grid.width
Mix & master

Measures Stereo width per block.

Reading it Drawn as the area behind the correlation line.

Why Shows where a mix opens up and where it collapses to the centre.

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.

How it works Classical signal processing.

Flatness lane Validated
grid.flatness
EnvironmentProvenance

Measures How noise-like each block is, 0 to 1.

Reading it Low is a clear pitch; high is broadband.

Why Separates a beep from a voice and hum from room noise, over time.

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.

How it works Classical signal processing.

Clipping lane Validated
grid.clipFraction
Mix & masterDataset QABroadcast & film post

Measures Share of samples at or over full scale per block.

Reading it A bar means clipping happened there.

Why Damage you cannot undo, located to the second.

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.

How it works Classical signal processing.

DC lane Validated
grid.dcOffset
Provenance

Measures Waveform shift away from zero per block.

Reading it Should sit flat at zero for the whole file.

Why A step means the hardware changed mid-recording, which nothing else here would reveal.

Tested against A tone shifted by 0.1 reads 0.1 within 0.005 in every block.

How it works Classical signal processing.

Derived lanes

Combinations of the lanes above: headroom, novelty, change, noise character.

Headroom lane Validated
derived.headroom
Voice & podcastDataset QAEnvironmentBroadcast & film post

Measures Distance between the content and the local noise floor, block by block.

Reading it Above 30 dB reads as clean, below 15 dB as noisy. It describes the signal; it does not predict speech-recognition errors.

Why This is the number that decides whether audio is usable, and right now it is spread over two lanes the reader has to subtract by eye.

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.

How it works Classical signal processing.

Novelty lane Proxy
derived.novelty
ProvenanceDataset QA

Measures How much the material changes across each moment, comparing the two seconds before with the two after over bandwidth, noise floor, brightness, crest and stereo correlation together.

Reading it Peaks mark boundaries. Read all of them, not just the highest; on dense music the tallest peak is not always the one you were looking for. Only blocks that stand at least 6 dB above their own noise floor, and above -70 dBFS, are compared, so a file at one steady level reads 0 everywhere.

Why Points at where something changes without being told what to look for. It carries stereo correlation, so it is the one that catches a channel collapse; the change lane reads the mono terrain and catches a splice instead. Between them the five test cases are covered. Scaled so it never saturates: the top of the lane stays available for the genuinely exceptional.

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.

How it works Classical signal processing.

Not validated Real edits and transitions, where the right peak is not known in advance.

Change lane Validated
derived.flux
Mix & masterProvenance

Measures How much the spectrum changes from one block to the next.

Reading it Peaks are onsets, edits and transitions.

Why The terrain is already there and never differentiated, and its derivative is where the edit points live. It found the splice at exactly 15.0 s on the test file that novelty missed. Blind to a stereo change by construction, since the terrain is mono.

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.

How it works Classical signal processing.

Noise character lane Validated
derived.bandFlatness
EnvironmentVoice & podcast

Measures Tonality measured separately below 250 Hz, from 250 Hz to 4 kHz, and above.

Reading it Tonal low is hum, flat high is hiss, tonal mid is music or a television. Three lines, one per band group.

Why One flatness number per block can say how much noise there is but never what kind, and the fix depends entirely on the kind.

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.

How it works Classical signal processing.