ACTUAL BROWSER EXPORT / OCTOBER 7, 2026
MP3 to MIDI.
Same count.
Different notes.
Inspect the downloaded MIDI, not just its note count. Our stronger-partial WAV produced 13 notes and 202 bytes in both the live browser and offline CPU paths, but the files and note boundaries differed. A simpler WAV produced 10 browser notes versus 9 offline notes. These are two generated WAV cross-checks, not an MP3 or accuracy benchmark.
The summary can agree.
The events can disagree.
Same per-slot pitches; different fragmentation.
Per-slot fragment counts still differ.
| Input | Path | Events | Bytes | Events per slot |
|---|---|---|---|---|
| Fundamental only | Chrome | 10 | 179 | 4, 2, 2, 2 |
| Fundamental only | Offline CPU | 9 | 171 | 4, 2, 2, 1 |
| Stronger upper partials | Chrome | 13 | 202 | 3, 3, 4, 3 |
| Stronger upper partials | Offline CPU | 13 | 202 | 4, 3, 3, 3 |
Fundamental only
Chrome: 10 events, 179 bytes; slots 4, 2, 2, 2.
Offline: 9 events, 171 bytes; slots 4, 2, 2, 1.
Stronger upper partials
Chrome: 13 events, 202 bytes; slots 3, 3, 4, 3.
Offline: 13 events, 202 bytes; slots 4, 3, 3, 3.
The fundamental control kept only the reference pitch in each slot in both paths. Its last slot had two Chrome events but one offline event. The browser's larger count therefore did not reveal another played pitch in that slot. The stronger-partial control kept the same pitch sets in both paths: [48,60,67], [52,64,71], [55,67,74] and [60,72,79]. Its extra event was assigned to a different slot, even though the overall count stayed the same.
Neither downloaded browser MIDI was byte-identical to its offline counterpart. The report includes SHA-256 hashes and every parsed pitch, start tick, duration tick, velocity and time in seconds. Equal size and equal event count were insufficient to reproduce the stronger-partial export. Matching per-slot pitch sets was also insufficient to reproduce its boundaries.
Slot assignment is explicit, not an accuracy score.
We used the nearest source-tone centre to each event midpoint: argmin(abs((note.startSeconds + note.durationSeconds/2) - (sourceStart + 0.175))). Source starts came from the generated fixture; parsed note times came from each actual MIDI. Centres were 0.375, 0.925, 1.475 and 2.025 seconds.
Follow the live download all the way.
On October 7, we selected each generated WAV on this site's unchanged live homepage in Chrome on Windows. We clicked Convert to MIDI, waited for Complete, then clicked Download .mid. The fundamental result displayed 10 detected notes · 2.5 sec source · 179 B; the stronger-partial result displayed 13 detected notes · 2.5 sec source · 202 B. We retained the actual downloaded files, not reconstructed MIDI made from those labels.

The downloaded MIDI was parsed with the project's installed MIDI library. Both parsed counts and byte sizes agreed with the observed UI. Each input was 110,294 bytes, and each input copy matched its October 6 WAV byte for byte. The offline exports were retained from that earlier experiment rather than rerun until they matched today's browser results. File hashes, UI strings and both sets of parsed events are in the measurement report.
The automation's first download-event wait timed out. The download itself existed in the machine's Downloads directory; we copied it and parsed it successfully. This distinction matters: a failed automation wait is not evidence that the converter failed, and a Complete label alone is not evidence that we retained an output.
The source converter was unchanged, including onset and frame thresholds of 0.25 and minimum length of 5 frames. Its source hash matched the October 6 report. The homepage decodes WAV through Web Audio; the offline path used native FFmpeg and Node CPU inference. We did not independently observe the browser's inference backend or decoded sample buffer. This comparison changes the complete execution path, not one isolated component.
Known inputs. Narrow conclusions.
These two WAVs come from the harmonic controls: generated mono audio at 22,050 Hz, with four sequential tone references at MIDI pitches 48, 52, 55 and 60. Each tone lasts 0.35 seconds. One waveform contains only the fundamental; the other uses relative components [0.2,1,0.3] at [f,2f,3f] before whole-waveform RMS scaling. No user recording or vocal performance was used.
This was one browser run per input, not a repeatability study. We did not test MP3 in this cross-check, vary browser backends, compare conversion speed, use a phone, import into a DAW, or listen and rate the result. The files show that these two end-to-end paths can differ; they do not identify the cause or establish which path is more accurate.
The fixed reference pages motivated this evidence angle: Note Foundry describes local processing; Tuneonmusic describes browser decoding and execution paths; MP3MIDITool reports a measured phrase check. None of their converters was run in this experiment. These are this site's own live downloads paired with its own offline controls.
Keep the file you actually edited.
- Retain your actual browser export alongside its source. An offline result from a similar pipeline is not automatically the file you downloaded.
- Compare pitch sets, repeated fragments and timing, not only a total note count. In these controls, equal totals concealed different boundaries.
- Inspect the exported events before making cleanup decisions. A higher simultaneous layer and a repeated same-pitch fragment are different things; do not delete every octave or every short event by default.
This page documents exports. The homepage remains the converter; the DAW handoff covers the next operation. No synonym landing page or new converter setting was added.
Same sources. Both real outputs.
- Fundamental source WAVActual Chrome MIDI / Retained offline MIDI
10 versus 9 parsed events. - Stronger-partial source WAVActual Chrome MIDI / Retained offline MIDI
13 events each; different files and boundaries. - Raw comparison reportInput/output hashes, observed UI, parsed events and slot assignments.
- Analysis sourceThe exact project script used to parse these outputs; run from scripts/ with installed dependencies and retained evidence directories. It does not fabricate a browser run.
The source fixtures are reusable generated media. Downloaded MIDI, raw records and screenshots distinguish browser observations from the retained offline evidence. The analysis script copies and parses files already present; it does not automate inference, reproduce a browser environment, or call an external conversion service.