On 3 November 2026 we ran the same six test clips through four MP3 to MIDI converters and counted three things per clip: how many reference notes were matched, how many notes appeared that no reference note explains, and how many reference notes never appeared in the output.
All four converters found 80 of 80 reference notes. The extra-note count is where they separate: 1 (Stayput), 43 (SoundToMIDI), 43 (Spotify's Basic Pitch demo), 1 (this site, after the change described below). None of them missed a reference note in this set.
| Test clip | Reference notes | Stayput | SoundToMIDI | Basic Pitch demo | This site |
|---|---|---|---|---|---|
| Single notes, dry | 8 | 8 / 0 / 0 | 8 / 0 / 0 | 8 / 0 / 0 | 8 / 0 / 0 |
| Single notes, with echoes | 8 | 8 / 0 / 0 | 8 / 9 / 0 | 8 / 9 / 0 | 8 / 0 / 0 |
| Three-note chords, dry | 24 | 24 / 0 / 0 | 24 / 0 / 0 | 24 / 0 / 0 | 24 / 0 / 0 |
| Three-note chords, with echoes | 24 | 24 / 1 / 0 | 24 / 25 / 0 | 24 / 25 / 0 | 24 / 1 / 0 |
| Drum pattern, dry | 8 | 8 / 0 / 0 | 8 / 0 / 0 | 8 / 0 / 0 | 8 / 0 / 0 |
| Drum pattern, with echoes | 8 | 8 / 0 / 0 | 8 / 9 / 0 | 8 / 9 / 0 | 8 / 0 / 0 |
| Total | 80 | 80 / 1 / 0 | 80 / 43 / 0 | 80 / 43 / 0 | 80 / 1 / 0 |
Two converters show identical numbers in all six rows. That is not a coincidence, and the section on model identity below says why.
The clips are synthetic, not recordings. Each was rendered from a written note list, so the reference notes are exact rather than estimated from a score. All six share the same eight pitches — MIDI 60, 62, 64, 65, 67, 69, 71 and 72 — one event every 0.5 seconds starting at 0.3 seconds, each note lasting 0.14 seconds. What changes between them is what sounds at those moments:
Each of those three appears twice: dry, and with echoes — three delayed copies at 0.2, 0.32 and 0.41 seconds with gains of 0.53, 0.22 and 0.12. The files are 128 kbps mono MP3 at 44.1 kHz, five seconds long, 120 BPM.
Every rendered tone is a fundamental plus a second harmonic at 0.2 times the fundamental's amplitude. That figure is a setting in the generator, not something measured from the converters, and it matters here: a harmonic that a converter promotes into its own note lands in the extra column.
Every downloaded .mid file was read by the same parser and compared against the same reference list in the same run, with no manual editing. The matching rule is pitch equality plus onset within 0.15 seconds, one-to-one. The 0.15 second tolerance is a choice we made; a tighter or looser window would move the numbers, and these figures are only comparable between sites measured under this same rule.
One caveat on the drum rows. A drum hit is a noise burst, not a pitched note, so the eight reference pitches for those clips are the pitches the generator was told to use, not pitches a listener would hear. A match there means the converter placed a note event at that pitch and time, not that it identified a pitch by ear. Read the drum rows as event placement, not as tuning accuracy.
SoundToMIDI and Spotify's Basic Pitch demo returned the same six cells, and their model files are byte-identical:
b142a95737a52e1e412d5f92e73d8bb80dfe8d04941acc0702f11f4524fb377c.@spotify/basic-pitch npm package ships, and the same weights are embedded in this site's own page.So three of the four converters in this table run the same open-source model. What differs is the thresholds and the post-processing each site applies to that model's output, not the note detection itself. We did not identify Stayput's engine; that column is a black box in this test and we make no claim about what it runs.
Before 3 November 2026 this site used an onset threshold of 0.25, a frame threshold of 0.25 and a minimum note length of 8 frames, with no merging step. On these six clips that produced 79 matched, 83 extra, 1 missed. The 83 was not spread evenly: 49 came from the three-note chords with echoes, and 16 each from the single notes and the drum pattern with echoes.
Two changes were tested separately on the same six clips:
The merging step is the one that mattered. The model often splits a single sounding note into several fragments of the same pitch separated by a few frames. The step joins any two fragments of the same pitch whose gap is 3 frames or less. At 22,050 Hz with a 256-sample hop, 3 frames is about 35 milliseconds. The site now runs the default thresholds plus this merge, which is the configuration in the right-hand column above.
Merging cannot tell a fragment from a repeat. Two genuine strikes of the same pitch less than about 35 milliseconds apart are joined into one note. On a piano that is a repeated note played very fast; on drums it is a roll or a flam.
This test did not measure that loss. None of the six clips contains a repeated strike of the same pitch — every event is 0.5 seconds apart — so the merge had nothing genuine to eat here. We have not quantified how much real music is affected, and we are not going to invent a percentage. If your material has fast repeated notes on one pitch, expect them to be under-counted.
The method needs no special access: take audio whose notes you already know, convert it on any site, download the .mid, and match output notes to reference notes by pitch plus onset within a fixed window. Report all three counts — matched, extra and missed — because a converter that finds every note can still be the one adding the most wrong ones. We do not host the test audio or the resulting MIDI files on this page.
To convert your own file with the current settings, use the MP3 to MIDI converter, the WAV converter, or the piano converter. The mixed-song test shows what happens on a full recording rather than a controlled clip.