A faster first pitch reading
A pitch corrector can't correct a note before it knows which note it is. That first reading sets a floor under how quickly correction can start, in every mode. So we asked one question: how fast can Tune get a usable pitch reading after a note starts, without losing reliability?
The short answer
- Our detector now gives a first usable reading 15.5 ms (median) after a note starts, on 537 real note onsets. It needed 28.6 ms before.
- The open-source detectors we tested from the aubio library need 18.6–34.4 ms, with lower steady accuracy.
- Neural trackers make far fewer octave errors, but their long analysis windows make them about 30–35 ms late when run in real time.
How a detector was scored
Each detector ran causally, as it must inside a plug-in: it only sees past samples. Input was low-passed and decimated to 16 kHz, with one reading every 2.67 ms.
| score | meaning |
|---|---|
| first-good | time from the voice onset to the first reading within 50 cents that stays at least 80 % good for 20 ms |
| wrong-before | confidently wrong readings before that point: these would drive a wrong correction |
| steady | share of good readings from 120 ms after the onset |
| octave errors | octave or fifth errors over the whole set |
The material
- A synthetic onset corpus (193 s, 240 notes) with exactly known pitch: glottal pulses with jitter and shimmer through four vocal-tract resonances, 80–800 Hz, attacks of 4–45 ms, with breathy lead-ins, scoops, vibrato and breaths mixed in.
- A real-world set: 40 stems from MDB-stem-synth, a research dataset of real multitrack stems resynthesised so their pitch is known exactly. 34 minutes, 537 note onsets, voices and instruments in the vocal range. (The dataset is licensed for research use only; it is used here for measurement, not in the product.)
What made the old detector slow
Tune uses YIN, a well-known autocorrelation-style pitch method. The plug-in compared the oldest part of its analysis window with later samples, so a new note needed the whole window, about 25 ms, filled with voice before it could be read. Comparing the newest part of the window with earlier samples needs only the window plus one period of the voice. Same method, same reliability, a faster answer: on the synthetic corpus the median first reading fell from 24.7 ms to 16.2 ms, and for high voices from 22.4 ms to 10.5 ms.
| detector (synthetic corpus) | first-good, median (90th percentile) | low / high voices | steady | false alarms in breaths |
|---|---|---|---|---|
| YIN, oldest part compared (old) | 24.7 (30.1) ms | 27.6 / 22.4 ms | 99.2 % | 0.6 % |
| YIN, newest part compared (adopted) | 16.2 (23.0) ms | 19.6 / 10.5 ms | 99.0 % | 0.0 % |
| YIN newest, floor 160 Hz (the "Alto" range) | 9.1 (15.1) ms | 14.9 / 7.7 ms | 55.0 %* | 0.0 % |
| growing window, YIN | 19.7 (33.8) ms | 24.9 / 13.5 ms | 93.1 % | 0.0 % |
| growing window, McLeod | 19.7 (51.3) ms | 26.1 / 13.4 ms | 91.4 % | 0.0 % |
| per-period window | 18.2 (53.6) ms | 25.0 / 10.4 ms | 85.9 % | 0.0 % |
\* Notes below the range floor count as misses; that is the point of a range setting.
Real recordings
| detector (MDB-stem-synth, 537 onsets) | how it runs | first-good, median (90th percentile) | steady |
|---|---|---|---|
| Tune's detector, newest part compared | causal, 2.7 ms hops | 15.5 (77.7) ms | 85.7 % |
| Tune's detector, old layout | causal | 28.6 (130.8) ms | 77.9 % |
| aubio yin | causal | 34.4 (141.1) ms | 71.4 % |
| aubio yinfft | causal | 19.2 (115.9) ms | 60.8 % |
| aubio mcomb | causal | 18.6 (112.4) ms | 70.8 % |
| CREPE tiny (neural) | offline, centred 64 ms window | sees the future: about 34 ms late if run causally | 86.1 % |
| PESTO (neural) | offline, centred | sees the future | 74.7 % |
What we learned
- The 25 ms wait was a window layout, not physics. Reading the newest samples first made every reading about 13 ms more current, with the same reliability.
- Shorter or adaptive windows mostly trade speed for errors. Per-period windows reach 9–10 ms for high voices but multiply octave errors three to six times and wrong early readings six to twenty times.
- The voice range setting is the honest speed lever. Tell Tune the singer is an alto and a high voice gets a first reading in under 8 ms. That is why Tune's Expert panel has a Range control.
- Neural trackers win on octave decisions, not speed. CREPE tiny made about seven times fewer octave errors than any classic detector, but its 64 ms window makes it late in real time. A tiny network that only judges octave and voicing, next to YIN, is our next experiment.
Why it matters for singers
You can't correct a note faster than you can recognise it, and you can't recognise a pitch faster than one or two cycles of the voice. At 110 Hz one cycle is 9 ms. That is why no real-time tuner snaps instantly, and why Tune's hard setting needs 15 ms (Studio) or 28 ms (Live) to settle. More in latency explained and how we rebuilt Tune.
aubio, CREPE and PESTO are open-source projects named only to identify what we measured. MDB-stem-synth is a research dataset (CC BY-NC 4.0). Measurements made 7 November 2026 on the development Mac; the detector's cost is about 0.4 % of one core.