/break-it
Try to break it
AudioLab measures the audio a voice agent hears and the audio it sends out. Every number comes with a status and a margin, every verdict with a rule, and we publish the tests that failed. So this is the invitation: bring a file where you think a number or a verdict is wrong.
How to take part
- Open the Voice AI check (what your agent hears), the outgoing check or the QC view (what it sends out, judged against limits you set, with a verdict). They are free, they run in your browser and your audio is not uploaded. Prefer code? The API and MCP give the same measures with a free key; see the note on matching the site below.
- Use a file where you know the answer: a clip you cut a gap into, a level you set, a recording you clipped or filtered on purpose. For a verdict, put a limit a hair away from a value and see which side the check puts it on.
- If a number, a status or a verdict is wrong, tell us: which measure, which page, what you expected, what AudioLab said, your browser and device, and a link to a short file if you can share one. Ten seconds is plenty. Please do not send recordings of people who have not agreed to it.
We check every report. A real error gets fixed and published on Where we were wrong, with your name if you like. We do not run a bug bounty; what you get is a better measure with your name next to it.
What we are most sure of
- Loudness and true peak. Checked against the signals the EBU standard defines (Tech 3341 and 3342): in the worst case 0.06 LU off, where the standard allows 0.1. True peak is within the tolerance the standard allows. How
- Gaps of digital silence. 99.9% of the 8,406 gaps the check reported were real, and there were no false alarms on 1,615 recordings without gaps. The count is a lower bound. How
- The verdict rules. A value closer to its limit than the published margin of its measure is "check", not "fail". Three faults fail a file on their own: clipped samples, a gap of digital silence and a file with nothing in it. There is no composite score. The rules run against made-up values in a self-test, and the test fails when we remove the zone where a value is too close to its limit to call. How the verdict is made
What we already know is weaker
These are on /lenses too. Finding one of them is not news; finding something that is not on this list is.
- Loudness and true peak are verified against the standard's own test signals. On real files, a server decode (ffmpeg) and a browser decode can differ in the last digits.
- Clipping counts runs of at least three samples at the rail. Isolated clipped peaks read zero.
- Noise (SNR) holds for read speech with a steady background from about 10 dB, and from about 5 dB with the newer speech detector, with a margin of about 6 dB. Below that it reads too high, about 6 dB too high at 0 dB. It is not tested on real phone lines.
- Gaps are a lower bound. Hidden packet loss and gaps inside pauses are missed.
- Whether the source was lossy is read from the spectrum: the check looks for the sharp cut-off a music codec leaves between 10 kHz and just under half the sample rate. A speech codec cuts lower than that, so speech through a phone or speech codec never reads as lossy, also when it was decoded to a WAV file.
- The check for upsampled audio found the 8 kHz origin in 4 of 96 speech-codec recordings, all of them GSM.
- At an active speech level of -60 dBFS the newer speech detector keeps about 9 percent of the speech seconds.
- Pitch and voice quality are not tested on two voices at once or on music.
- Speech share and pauses are indicative only.
- A silent file still returns numbers; there is nothing in it to measure.
- In the browser check a high sample rate is resampled by the browser, so bandwidth above half its audio rate (typically 24 kHz) is invisible. The API reads the file at its own rate.
- The browser check refuses files over 50 MB, and a very long recording at a high sample rate may not fit in your device's memory. The API decodes at most 170 MB of audio per file: about 7.7 minutes of 48 kHz stereo or about 46 minutes of 16 kHz mono. Longer files are refused with an error that says so.
- The check does not predict how many words a recogniser will get wrong.
- The starting limits of the outgoing check are the 5th to 95th percentile of 48 clean synthetic recordings (16 Dutch sentences read by 3 synthetic voices): a start, not a standard. By construction up to about one in ten of those clean recordings falls outside each limit.
- In the outgoing check and the QC view, a verdict can be "check" only where the measure has a published margin: integrated loudness, true peak, loudness range, the longest dropout and pitch. For the seven other measures that take a limit, a value past the limit is a fail, however close it is. In the CI gate a value inside the margin also fails the build, with a line that says it was within the margin, and the gate file has no field for the gap count.
- The outgoing check and the QC view do not see distortion that stays under the rail, codec artefacts, clicks inside sound or packet loss a codec concealed. They do not judge naturalness, pronunciation, prosody or emotion, do not measure latency or the timing of turns, and do not check provenance manifests (C2PA) or watermarks.
- Safari and iPhone: not tested yet. Use Chrome or Firefox.
- The API gives its first models until 15 January 2027; see the note below.
The live demo
The live demo flags events in a stream as they happen: a gap in the audio, clipping, a drop in level, dead air, mains hum. You are welcome to try to break it with your own stream or file. Every flag is a signal, not a diagnosis: none of these detectors is validated on live streams yet, so it can miss an event and it can flag one that is not there. The flags in the chain lane of the QC view come from the same monitor. If one is wrong, tell us.
Not part of this
- Anything that is new and not covered above: it has not had this scrutiny yet, and we do not claim it the way we claim the numbers above.
- Load or denial-of-service tests, and attempts to reach other people's data. The free API has limits for a reason. For a vulnerability, see Security.
- Recordings of people who have not agreed to it.
Matching the API to the site
The API still answers with its first speech detector and content model until 15 January 2027; the site already uses the
newer ones. Send speechDetector "k2" (voice routes) and
contentModel "v2" (signallab and profiles) to get the same
numbers as the browser. With k2 the speech ratio reads about 5 to 14 points higher, depending on the noise, and the SNR in
noisy recordings reads lower, closer to the true value.
curl https://audiolab.tools/v1/voicelab/qa \
-H "Authorization: Bearer $AUDIOLAB_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/call.wav","speechDetector":"k2","measureStatus":true,"round":true}' Report a wrong number · Report a security issue · Methodology · Where we were wrong