How the test measures
Every number on the test comes from two short recordings and a handful of plain rules. Here are the rules, so you can check them.
What the page hears
The test asks your browser for the microphone you pick, with noise suppression, echo cancellation and auto gain set the way you leave the three switches. All three start on, because that is what call apps usually ask for. The page then reads the samples the browser hands it: the first channel, at the sample rate of the page's audio engine (usually 44.1 or 48 kHz).
That is the same signal a web call would get from your browser. Desktop call apps can apply their own processing on top, so an app's sound can be cleaner than the test's numbers.
Audio is processed by this page in your browser and is not sent to our server.
Two recordings
- Silence, 4 seconds. You stay quiet. This gives the noise floor and the hum check.
- Speech, 6 seconds. You read one sentence aloud. This gives speech level, peak and clipping.
Each recording is cut into back-to-back 100 ms frames. A frame's level is its root-mean-square (RMS) value in dBFS: 20 × log10(RMS), where full scale is 1.0. This is plain RMS, so a full-scale sine wave reads about −3 dBFS; meters that follow the AES17 convention read the same sine as 0 dBFS.
The five numbers
| Number | Rule |
|---|---|
| Noise floor | The median frame level of the silence recording. A median ignores a single cough or click. |
| Speech level | Among the speech frames more than 10 dB above the floor, the 90th-percentile level: the loud end of normal speech, without the single loudest syllable. If no frame clears the floor by 10 dB, the test says it did not hear speech. |
| SNR | Speech level minus noise floor, in dB. |
| Peak | The largest single sample in the speech recording, in dBFS. Samples at or above 0.985 of full scale count as clipped. |
| Hum | A power spectrum of the silence recording (bins of 1.5 Hz or finer: a 32768-point FFT at 44.1 or 48 kHz, Hann window, half-overlapping segments, averaged). The average power within ±3 Hz of 50, 100 and 150 Hz is compared with the bands 5–9 Hz either side of each; the same for 60, 120 and 180 Hz. Hum is reported at the stronger frequency when it sits 12 dB or more above its neighbours. |
Verdict thresholds
| Number | Good | Borderline | Bad |
|---|---|---|---|
| Noise floor | −60 dBFS or lower | −60 dBFS to −45 dBFS | Above −45 dBFS: noisy |
| SNR | 30 dB or more | 20 to 30 dB | Under 20 dB: poor |
| Speech | −30 dBFS or louder | Under −30 dBFS: too quiet | — |
| Peak | −1 dBFS or lower, 10 or fewer clipped samples | — | Above −1 dBFS or more than 10 clipped samples: clipping |
Per-app verdicts
Each app page carries two noise-floor bars and an SNR bar. They are our rule of thumb for how much steady noise that app's built-in suppression copes with, not figures published by the app. The test calls an app fine when the floor is at or under the first bar and the SNR clears the SNR bar; usable with suppression on between the two floor bars; and noise cancellation needed above the second. A quiet floor with an SNR under the bar reads as voice too close to the noise, because suppression cannot make a quiet voice louder.
| App | Fine at or under | Usable up to | SNR bar |
|---|---|---|---|
| Discord | −40 dBFS | −30 dBFS | 20 dB |
| Zoom | −50 dBFS | −40 dBFS | 20 dB |
| Microsoft Teams | −40 dBFS | −30 dBFS | 20 dB |
| Google Meet | −40 dBFS | −30 dBFS | 20 dB |
| Slack (huddles) | −50 dBFS | −40 dBFS | 20 dB |
| Webex | −40 dBFS | −30 dBFS | 20 dB |
| FaceTime | −40 dBFS | −30 dBFS | 20 dB |
| −50 dBFS | −40 dBFS | 20 dB | |
| Telegram | −50 dBFS | −40 dBFS | 20 dB |
| Signal | −60 dBFS | −45 dBFS | 20 dB |
| Messenger | −50 dBFS | −40 dBFS | 20 dB |
| Steam voice chat | −50 dBFS | −40 dBFS | 20 dB |
| Roblox voice chat | −60 dBFS | −45 dBFS | 20 dB |
| TeamSpeak | −50 dBFS | −40 dBFS | 20 dB |
| Xbox party chat | −50 dBFS | −40 dBFS | 20 dB |
| PlayStation party chat | −50 dBFS | −40 dBFS | 20 dB |
Suppression off and on
The comparison records 5 seconds with the browser's noise suppression off, then 5 seconds with it on, as two separate microphone requests. It reports the noise floor of each (the median frame, as above) and the difference. Where the browser supports recording, you can play both clips back; they stay in the page's memory and are dropped when you reset or leave.
If the browser does not let the page switch suppression, the test says so and skips the comparison.
The live meter
The live meter lights one segment for each edge the current level reaches, read from the most recent 50 ms of samples.
| Segment | Lights at | Zone |
|---|---|---|
| 01 | −60 dBFS | Green |
| 02 | −54 dBFS | Green |
| 03 | −48 dBFS | Green |
| 04 | −42 dBFS | Green |
| 05 | −36 dBFS | Green |
| 06 | −30 dBFS | Green |
| 07 | −24 dBFS | Green |
| 08 | −18 dBFS | Amber |
| 09 | −14 dBFS | Amber |
| 10 | −10 dBFS | Amber |
| 11 | −6 dBFS | Red |
| 12 | −3 dBFS | Red |
What browsers hide
- Some browsers do not report every setting the page asked for, such as the sample rate or whether noise suppression is on. The test then says your browser does not expose this setting instead of guessing.
- Some browsers ignore a request to turn processing off. When that happens the comparison cannot be fair, and the test skips it.
- Device names appear only after you allow the microphone. The test never puts a device name on the result card.
- The test measures your side only. It cannot hear the network, the other person's speakers, or what a desktop app does after the browser.