Accuracy Lab
Every release of HeyTuner runs the same accuracy tests before it can go live, and this page is rebuilt from that run's results.
- Test run
- Release
- v1.0.0, commit
c0a2e5dd67 - Synthetic cases
- 19,248
What we promise
A reading within 0.1 cent on clean test tones and within 0.5 cent (95th percentile) on plucked strings, and no reading rather than a wrong note. A cent is one hundredth of a semitone; most listeners cannot hear a difference below about 3 to 5 cents.
Layer 1: synthetic signals
Every target note of every tuning on the site, at offsets of 0, ±1, ±5, ±25 and ±49 cents, with A4 at 415, 440 and 466 Hz, at both 44.1 and 48 kHz. The signals are pure sines, band-limited sawtooth waves, and plucked-string models with string stiffness (inharmonicity B from 0 to 0.001), with and without the fundamental, and mixed with white and pink noise at 40, 20 and 10 dB signal-to-noise ratio. Errors are measured against the exact frequency used to make each file.
| Signal | Cases | Median | p95 | Max | Wrong note | Required | Result |
|---|---|---|---|---|---|---|---|
| Sine tones | 8,964 | < 0.001 | < 0.001 | 0.012 | 0.00% | max ≤ 0.1¢, note 100% | Pass |
| Sawtooth tones | 8,964 | < 0.001 | < 0.001 | 0.020 | 0.00% | max ≤ 0.1¢, note 100% | Pass |
| Plucked strings, inharmonicity B 0–0.001 | 480 | < 0.001 | < 0.001 | 0.009 | 0.00% | median ≤ 0.1¢, p95 ≤ 0.5¢ | Pass |
| Plucks with the fundamental removed | 120 | < 0.001 | < 0.001 | < 0.001 | 0.00% | p95 ≤ 1.0¢, note 100% | Pass |
| White noise, 40 dB SNR | 120 | 0.002 | 0.013 | 0.075 | 0.00% | median ≤ 0.1¢, p95 ≤ 0.5¢ | Pass |
| Pink noise, 40 dB SNR | 120 | 0.009 | 0.080 | 0.269 | 0.00% | median ≤ 0.1¢, p95 ≤ 0.5¢ | Pass |
| White noise, 20 dB SNR | 120 | 0.023 | 0.124 | 0.756 | 0.00% | p95 ≤ 1.0¢, note 100% | Pass |
| Pink noise, 20 dB SNR | 120 | 0.092 | 0.889 | 5.691 | 0.00% | p95 ≤ 1.0¢, note 100% | Pass |
| White noise, 10 dB SNR | 120 | 0.074 | 0.486 | 2.984 | 0.00% | wrong note ≤ 0.5% | Pass |
| Pink noise, 10 dB SNR | 120 | 0.276 | 3.598 | 15.395 | 0.12% | wrong note ≤ 0.5% | Pass |
Provisional readings. To show a reading quickly, the needle starts moving once the analysis window is 60% filled with the new note. Those first readings, at most a few hundred milliseconds per pluck, are slightly less precise; the in-tune state only counts full-precision readings. For transparency, their errors are:
| Signal | Readings | Median | p95 | Max |
|---|---|---|---|---|
| Sine tones | 24,354 | < 0.001 | 0.018 | 0.544 |
| Sawtooth tones | 24,354 | < 0.001 | 0.018 | 0.517 |
| Plucked strings, inharmonicity B 0–0.001 | 1,614 | 0.025 | 0.593 | 4.260 |
| Plucks with the fundamental removed | 365 | 0.012 | 0.608 | 0.920 |
| White noise, 40 dB SNR | 404 | 0.024 | 0.471 | 1.432 |
| Pink noise, 40 dB SNR | 404 | 0.043 | 0.483 | 2.000 |
| White noise, 20 dB SNR | 404 | 0.089 | 0.468 | 1.529 |
| Pink noise, 20 dB SNR | 396 | 0.233 | 1.367 | 2.455 |
| White noise, 10 dB SNR | 390 | 0.178 | 0.831 | 2.801 |
| Pink noise, 10 dB SNR | 448 | 0.670 | 3.074 | 6.629 |
Lock time
Time from the pluck to the first reading within 1 cent of the true pitch, on plucked strings with room noise.
| Instrument | Cases | Median | p95 | Limit |
|---|---|---|---|---|
| Guitar | 40 | 177 ms | 177 ms | 200 ms |
| 4-string bass | 20 | 283 ms | 347 ms | 350 ms |
| Low B (5-string bass) | 2 | 283 ms | 347 ms | 500 ms |
Reference tones
In By Ear mode each instrument plays its own sound, modelled on measurements of real acoustic, electric, bass and ukulele strings. The pitch is set mathematically, so every reference note is checked on the tuner itself, for every string of every tuning, at A4 = 415, 440 and 466 Hz.
| Instrument | Notes checked | Largest error | Required |
|---|---|---|---|
| Acoustic guitar | 360 | 0.000¢ | ≤ 0.1¢ |
| Electric guitar | 360 | 0.000¢ | ≤ 0.1¢ |
| Bass | 90 | 0.001¢ | ≤ 0.1¢ |
| Ukulele | 48 | 0.000¢ | ≤ 0.1¢ |
The other test layers
- Recorded strings. A corpus of real recordings of acoustic, electric, bass and ukulele strings on several phones and an audio interface, in quiet and noisy rooms, with the true pitch logged from a hardware strobe tuner. Its results will be published here as soon as the corpus is recorded.
- Browsers. The test files are fed into Chromium, Firefox and WebKit as if they were a microphone, and the note, cents, string detection, in-tune state and checklist on screen are checked automatically.
- Real devices. Before each release a person tunes a real guitar and bass on iPhone, Android, Windows and macOS browsers, side by side with a strobe tuner.
- Performance. A 10-minute session on a low-cost Android phone must not drop audio or grow memory.
Download the test files
These are the same files our browser tests use. Play them into any tuner and compare. The true frequency is in each file name.
- Acoustic guitar, Standard, string 6, pluck, in tune (82.4069 Hz)
- Acoustic guitar, Standard, string 5, pluck, +12 cents (110.7651 Hz)
- Acoustic guitar, Standard, string 1, pluck, -8 cents (328.1079 Hz)
- Acoustic guitar, Standard, string 3, sine, in tune (195.9977 Hz)
- Acoustic guitar, Drop D, string 6, pluck, in tune (73.4162 Hz)
- Acoustic guitar, Standard, string 5, fundamental removed, in tune (110.0000 Hz)
- Acoustic guitar, Standard, string 4, pink noise 20 dB, +3 cents (147.0870 Hz)
- Bass, Standard (4-string), string 4, pluck, in tune (41.2034 Hz)
- Bass, Standard (5-string), string 5, pluck, -5 cents (30.7787 Hz)
- Ukulele, Standard (high G), string 4, pluck, in tune (391.9954 Hz)
- Acoustic guitar, standard, all six strings in turn, in tune (82.4069 Hz)
How the engine works
For the full explanation, read how the tuner works.