The short answer: monophonic mode commits to exactly one pitch per frame, and it re-decides that pitch every 11.610 ms — a 256-sample hop at 22 050 Hz, or about 86 frames a second. It will follow a solo vocal line anywhere between 55 Hz and 1800 Hz, which is MIDI 33 (A1) to MIDI 93, a shade above A6 (1760 Hz). It will not follow two pitches at once, so harmony, overdubs and a backing track collapse into one wandering line. It drops any note shorter than 58.05 ms at the default settings, and it breaks a held note whenever the singer takes a breath longer than 81.27 ms. Wide vibrato and fast slides come out as a stream of repeated notes rather than one line. Every number on this page comes from this converter's own analysis code, not from a general description of pitch tracking.
What "single line" means in this converter's code
Audio arrives in 2048-sample windows, Hann-weighted, stepped forward 256 samples at a time. That fixes two constants: one FFT bin is 10.7666 Hz wide, and one frame lasts 11.610 ms. After that, monophonic mode does something specific — it does not look for notes, it looks for one fundamental.
For every candidate fundamental on the grid it adds up the energy at that candidate's harmonics, weighting each one by 1/k0.7, and keeps whichever candidate scores highest. Two details of that sum matter for voice:
- It runs over harmonics 1 to 8, but only up to
min(8, floor(1023 / bin)). Eight harmonics are available up to bin 127, which is 1367 Hz (MIDI 88.6). From bin 128 — 1378 Hz — the count drops to 7, and it keeps falling as the candidate rises. The highest notes are therefore judged on less evidence than the middle of the range. - The winning bin is not taken at face value. Its position is refined by parabolic interpolation, then harmonics 2 through 6 are each searched within ±2 bins and averaged back into the fundamental estimate — but a harmonic is only counted if it carries at least 4% of the fundamental's magnitude. That refinement is what lets a low voice be placed accurately on a grid whose bins are wider than a semitone.
The result of this pass is one frequency per frame, which is then rounded to the nearest MIDI note number. One number per frame: that is the whole definition of "single line" here.
The pitch window: MIDI 33 to 93
The search never looks below 55 Hz or above 1800 Hz. Because candidates live on the bin grid, the band actually searched is snapped outward slightly: from bin 5 (53.83 Hz) to bin 168 (1808.79 Hz). A fundamental above A6 is outside the window and will not be found at all — not mis-detected, simply never considered.
| Pitch | Frequency | MIDI | One semitone | In bins |
|---|---|---|---|---|
| E2 | 82.4 Hz | 40 | 4.90 Hz | 0.455 |
| A2 | 110.0 Hz | 45 | 6.54 Hz | 0.608 |
| C3 | 130.8 Hz | 48 | 7.78 Hz | 0.722 |
| F#3 | 185.0 Hz | 54 | 11.00 Hz | 1.022 |
| C4 | 261.6 Hz | 60 | 15.56 Hz | 1.445 |
| A4 | 440.0 Hz | 69 | 26.16 Hz | 2.430 |
| C5 | 523.3 Hz | 72 | 31.11 Hz | 2.890 |
| C6 | 1046.5 Hz | 84 | 62.23 Hz | 5.780 |
| A6 | 1760.0 Hz | 93 | 104.66 Hz | 9.720 |
Read the low end of that table carefully. At 82.4 Hz two neighbouring semitones are only 0.455 bins apart, so the raw grid cannot separate them — the harmonic refinement described above is doing that work. The practical reading is that the bottom of a low voice is the least resolved part of the range, while everything from F#3 upward has more than a bin of separation per semitone before refinement.
Four things a voice does that this tracker cannot follow
Two pitches at once
One fundamental per frame means a second simultaneous pitch has nowhere to go. A singer doubled at the octave, a harmony part, a drone, or a voice over a guitar all resolve to whichever single fundamental scores best in that frame — and because the decision is made independently 86 times a second, the winner can swap between the voice and the accompaniment several times inside one bar. The output is not a wrong note; it is one note moving where two things were sounding.
Notes shorter than 58.05 ms
The "Shortest note" control defaults to 60 ms, but the code works in frames: it requires round(60 / 11.610) = 5 frames, and 5 frames is 58.05 ms, not 60. Anything shorter is discarded before it reaches the MIDI file. That puts a hard ceiling of roughly 17 notes per second on the result. A run at 12 notes per second leaves 83.3 ms per note and survives; the same run sung at 18 notes per second leaves 55 ms per note and vanishes completely.
Slides and vibrato that cross a semitone
A note ends the moment the rounded MIDI number changes — there is no glide, pitch bend or portamento in the output. Two consequences follow:
- Slides disappear. A glide across an octave in half a second spends 41.7 ms on each semitone. That is under the 58.05 ms floor, so every step is discarded and the whole slide drops out. The same glide sung over two seconds spends 166.7 ms per semitone and comes back as a staircase.
- Vibrato splits, but only if it is wide. The pitch is rounded to the nearest MIDI number, so a swing that stays within half a semitone (50 cents) of the centre stays one note. A wider swing crosses the boundary twice per cycle, and each half cycle becomes its own note. At 5.5 Hz that is 90.9 ms per segment — comfortably above the floor, so instead of one held note you get a sawtooth of repeated notes alternating by a semitone.
Breath, consonants and whispering
Every frame has to clear two gates before it counts as sung. The first is loudness: the gate is placed between the quietest tenth of the file and its loudest frame, and how far up it sits is set by the sensitivity slider. The second is harmonicity — the ratio of the winning harmonic sum to the total magnitude of the spectrum. On a clean synthesised tone that ratio measures around 0.30–0.35; on broadband noise it collapses towards zero.
| Sensitivity | Harmonicity threshold | Loudness gate position |
|---|---|---|
| 0 | 0.350 | 0.320 of the way from the quietest tenth to the loudest frame |
| 30 | 0.275 | 0.230 of the way |
| 60 — default | 0.200 | 0.140 of the way |
| 80 | 0.150 | 0.080 of the way |
| 100 | 0.100 | 0.020 of the way |
Breath and fricatives are broadband, so they fail the harmonicity test and the frame is marked empty. Monophonic mode then does something helpful: if the same pitch comes back within 7 frames (81.27 ms), the gap is bridged and the note is kept whole. A breath longer than that splits the note in two. Whispered or unvoiced material has no harmonic series to sum at all, so there is nothing for the search to find — it comes back silent rather than wrong.
One side effect worth knowing: the loudness gate is measured against the loudest frame in the whole file. A loud intro, a shout at the end, or an accompaniment that peaks well above the voice all raise the top of that range and lift the gate with it, which is how quiet phrases drop out of an otherwise clean take.
Loudness becomes velocity — one number per note
Velocity is not a performance capture. It is computed from the RMS of each 2048-sample window expressed in dBFS, averaged across every frame the note spans, then mapped through round(20 + (dB + 60) × (100 / 54)) and clamped to 1–127.
| Average level | Velocity |
|---|---|
| −60 dBFS | 20 |
| −50 dBFS | 39 |
| −40 dBFS | 57 |
| −30 dBFS | 76 |
| −20 dBFS | 94 |
| −10 dBFS | 113 |
| −5 dBFS | 122 |
| −2.22 dBFS and louder | 127 |
Two things follow that matter for a vocal. A 40 dB dynamic range — already a wide one — only spans velocity 39 to 94, so the MIDI will feel flatter than the take did. And because the level is averaged over the note's frames, one number is written per note: a swell inside a long held note is flattened to a single value, no matter how it was sung.
How to check a vocal conversion on your own file
We have not published accuracy figures for vocal material, because we have not measured any that we would stand behind. What you can do instead is measure it yourself in about a minute, using the CSV export. Its header is index,midi_note,note_name,start_sec,end_sec,duration_sec,velocity, with times to four decimal places.
- Check the floor. Sort by
duration_sec. Nothing should be shorter than 0.0581 s. If short notes you can clearly hear are missing, that is the note floor, not the pitch detection — drop "Shortest note" from 60 ms to 30 ms, which becomes 3 frames, or 34.83 ms. - Check the gaps. Subtract each note's
end_secfrom the nextstart_sec. Any gap under 0.0813 s was bridgeable and was bridged; gaps just over that are what split a held note. If a line you sang in one breath comes back in pieces, this column shows exactly where it broke. - Find the vibrato. Repeated notes on the same pitch with a gap of roughly 0.08–0.15 s, alternating by one semitone, are vibrato that crossed a semitone boundary — not repeated notes.
- Find the gate. Export three times at sensitivity 40, 60 and 80 and count the notes each time. The notes that appear or disappear are the ones sitting near the harmonicity threshold; everything present in all three is unambiguous to this analyser.
- Count the fastest run. Notes per second over your quickest passage. Above about 17 per second, the note floor is what is removing them and no sensitivity setting will bring them back.
All of that runs locally and re-runs instantly when you move a control, because the audio analysis is done once per file and only the note grouping is recomputed.
Settings that suit a vocal file
- Monophonic mode is the default and the right one for a single voice. Polyphonic mode instead looks for up to 6 spectral peaks per frame up to 4000 Hz (MIDI 107, B7) and discards any peak that is an integer multiple — within 5% — of a stronger one. On a clean solo line that usually also yields one note per frame, but it has no loudness-or-harmonicity gate of the kind described above, so it is far more willing to return notes that are not there.
- Use a dry, unaccompanied take. There is no source separation here. Anything else sounding at the same time is competing for the same single fundamental, and it also raises the loudness gate for the voice.
- Give it headroom, but not silence. Velocity is absolute dBFS, not relative, so a take peaks-normalised near the top will saturate at 127 while a quiet one sits near 39. Levelling the file before you convert is the whole fix; see how to prepare the file before you convert.
- Start from mono, not stereo. Channels are averaged before analysis, so a voice recorded on one channel of a stereo pair loses 6.02 dB — about 11 velocity steps — to the silent channel.
- Leave quantise off until the notes are right. Snapping to the grid (1/16 by default, from the BPM you set) moves both ends of every note to the nearest grid step, which hides timing problems rather than fixing them.
Sing a line into the converter and watch the piano roll as you move the controls — the Audio to MIDI Converter runs entirely in your browser, so every setting above is yours to test in a few seconds.