Skip to the answer

ENCODING CONTROLS / OFFLINE CPU / OCTOBER 19, 2026

MP3 to MIDI.
Smaller files. Separate note fields.

For two fixed synthetic sources, 6 of 6 MP3 exports matched their WAV event counts; 6 matched pitch-and-timing geometry, and 2 matched all saved note fields including velocity. The selected targets were 32, 64 and 128 kbps. The 32/64 inputs were newly encoded and inferred offline; WAV and 128 kbps captures are retained anchors. These results do not establish a best bitrate or musical accuracy.

Keep the source.
Change the encoding.

ACTUAL COUNT COMPARISONS TO EACH SOURCE WAV6 of 6 match.Each input is an actual saved export comparison, not a musical-accuracy score.
COMPLETE NOTE-FIELD COMPARISONS TO WAV2 of 6 match.Pitch, ticks, time, duration and velocity are checked together, not inferred from a matching total.
Actual input bytes, FFmpeg-reported input stream and re-parsed MIDI events. Bitrates label selected encoder targets; they are not quality ratings.
Fixed sourceInputActual streamFile bytesMIDI eventsCapture
first-onlyWAV22050 Hz / 1 channels1411642Retained Oct18 capture
first-only32 kbps target22050 Hz / mono132872New Oct19 input capture
first-only64 kbps target22050 Hz / mono263742New Oct19 input capture
first-only128 kbps target22050 Hz / mono527052Retained Oct18 capture
second-onlyWAV22050 Hz / 1 channels1411642Retained Oct18 capture
second-only32 kbps target22050 Hz / mono132872New Oct19 input capture
second-only64 kbps target22050 Hz / mono263742New Oct19 input capture
second-only128 kbps target22050 Hz / mono527052Retained Oct18 capture

first-only / WAV

Input stream: 22050 Hz / 1 channels. Actual file: 141164 bytes. MIDI events: 2. Retained Oct18 capture.

first-only / 32 kbps target

Input stream: 22050 Hz / mono. Actual file: 13287 bytes. MIDI events: 2. New Oct19 input capture.

first-only / 64 kbps target

Input stream: 22050 Hz / mono. Actual file: 26374 bytes. MIDI events: 2. New Oct19 input capture.

first-only / 128 kbps target

Input stream: 22050 Hz / mono. Actual file: 52705 bytes. MIDI events: 2. Retained Oct18 capture.

second-only / WAV

Input stream: 22050 Hz / 1 channels. Actual file: 141164 bytes. MIDI events: 2. Retained Oct18 capture.

second-only / 32 kbps target

Input stream: 22050 Hz / mono. Actual file: 13287 bytes. MIDI events: 2. New Oct19 input capture.

second-only / 64 kbps target

Input stream: 22050 Hz / mono. Actual file: 26374 bytes. MIDI events: 2. New Oct19 input capture.

second-only / 128 kbps target

Input stream: 22050 Hz / mono. Actual file: 52705 bytes. MIDI events: 2. Retained Oct18 capture.

The two-boundary source experiment supplied the first-only and second-only WAVs used here. Those files are copied byte-for-byte, not regenerated with altered phase, duration, envelope or amplitude. Within each source, every new encoding starts from that same WAV. The two source constructions remain distinct controls, not statistical replicates of a natural performance.

The new encoder targets are 32 and 64 kbps. The existing 128 kbps MP3 and original WAV are retained reference files with their original model captures. There are 4 new Oct19 input captures and 4 prior captures in this record. The actual number of model evaluations in the measurement run is separately recorded as 4, rather than counting a replay as a new model execution.

Actual MP3 file byte sizes for 32, 64 and 128 kbps targets across two fixed sources, with retained inputs distinguished
File bytes include encoded headers and are read directly from each saved input. A smaller file is not a transcription-accuracy result. Open the file-size chart.

A matching total
does not compare the notes.

Each MP3 export is compared only with its own source's actual WAV export. Geometry includes pitch, ticks, duration ticks, start seconds and duration seconds; all fields also include velocity.
MP3 inputEvent-count differenceGeometry identicalAll note fields identicalMIDI bytes identical
first-only-32k2 - 2 = 0yesyesyes
first-only-64k2 - 2 = 0yesyesyes
first-only-128k2 - 2 = 0yesnono
second-only-32k2 - 2 = 0yesnono
second-only-64k2 - 2 = 0yesnono
second-only-128k2 - 2 = 0yesnono

first-only-32k versus its WAV

Count difference: 2 - 2 = 0. Geometry identical: yes. All note fields identical: yes. MIDI bytes identical: yes.

first-only-64k versus its WAV

Count difference: 2 - 2 = 0. Geometry identical: yes. All note fields identical: yes. MIDI bytes identical: yes.

first-only-128k versus its WAV

Count difference: 2 - 2 = 0. Geometry identical: yes. All note fields identical: no. MIDI bytes identical: no.

second-only-32k versus its WAV

Count difference: 2 - 2 = 0. Geometry identical: yes. All note fields identical: no. MIDI bytes identical: no.

second-only-64k versus its WAV

Count difference: 2 - 2 = 0. Geometry identical: yes. All note fields identical: no. MIDI bytes identical: no.

second-only-128k versus its WAV

Count difference: 2 - 2 = 0. Geometry identical: yes. All note fields identical: no. MIDI bytes identical: no.

The count formula is candidateCount - referenceCount. Both inputs are parsed event totals from the named MP3 and WAV MIDI files, not expected note counts from the source construction. The result JSON gives both export filenames and counts for every subtraction. The displayed tally 6 of 6 is the number of rows for which that difference is zero; it is not a percentage of correctly transcribed music.

Geometry is checked separately by comparing the ordered parsed pitch, tick, duration-tick, start-second and duration-second fields. The complete note-field check adds velocity. A final check compares the actual MIDI byte hash. These are different equality questions: matching counts do not answer the geometry question, and matching geometry does not imply matching velocity. The comparison uses full numeric fields; rounded text on this page is not the equality test.

Across the measured MP3 rows, 6 of 6 geometry comparisons and 2 of 6 complete field comparisons match their corresponding WAV reference. These tallies describe only these saved exports. They do not rank an encoder, prove a bitrate threshold or determine whether a performer intended any of the exported boundaries. If a geometry comparison matches, the independently recorded decoded audio hash still tells a different, source-level question.

Actual parsed MIDI event intervals from each encoding of the two fixed authored sources
Bars use saved MIDI timing fields. A visually matching interval does not prove equal velocity or identical input samples. Open the interval comparison.

Read the stream.
Do not assume the label.

Every actual input is inspected with the installed FFmpeg before decoding. Its input-stream line, sample rate, channel description and reported stream bitrate are saved verbatim in the result record. New MP3 encoding explicitly selects libmp3lame, -ar 22050, -ac 1 and the chosen -b:a target. The command arguments are retained for each new input. The retained reference files are not silently re-encoded today.

Declared mono/sample-rate mismatches in this record: 0. FFmpeg's description 1 channels is interpreted as one channel, equivalent to mono for this check; the original wording remains available. This normalization does not change audio or invent a stream value. If the encoder changed a relevant stream setting, that would be a confound to disclose, not a reason to label the run bitrate-only anyway.

Native decoding then produces mono float32 samples at 22050 Hz for the unchanged model. Each file's decoded sample count, RMS, peak and SHA-256 are recorded. A target bitrate is an encoder setting, a stream line is an inspected description, file bytes are a saved-file size and a decoded-sample hash identifies actual model input. None of those measurements substitutes for the others.

The two WAV hashes are the source identity check. No normalization, added silent gap, changed phase reset or new fade is applied before encoding. Compression can change the decoded samples, so equal source WAVs do not mean every candidate has equal decoded waveform or energy. This experiment checks those actual files; it does not make a listening-quality judgment.

An encoding observation.
Not a recommended setting.

A converter user's useful distinction here is between a file that is smaller, an export with the same total and an export with the same complete note data. The measured table keeps those outcomes separate instead of treating the first one as a promise about the last. The unchanged WAV remains a reference export, not a ground-truth musical score.

The sources are authored sine-wave controls with one selected frequency and boundary construction, not songs, voices or recorded instruments. The chosen bitrate settings and these few inputs cannot establish a safe minimum rate for other audio. We did not compare perceived sound quality, run the public browser converter, test a physical phone, import into a DAW or measure musical accuracy. A count difference is not an accuracy score, and zero count difference is not a guarantee of correct notes.

MP3MIDITool's input and repair guidance describes editable note timing rather than a copy of the source waveform. That observed workflow motivates inspecting exports beyond a filename. This is a separate project-authored experiment, not a test of that converter. Only the fixed comparison pages were reviewed; no claim about all pages elsewhere or a current ranking is made.

New encoding.
Original capture dates.

Basic Pitch 1.0.1, TensorFlow.js 3.21.0, MIDI writer 2.0.28, v24.19.0 on win32; offline CPU backend. Native encoder: ffmpeg version 6.0-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers. Onset and frame thresholds remain 0.25 and 0.25, with an extraction minimum of 5 frames. The converter source and prior experiment bodies are unchanged.

Retained files must match actual input bytes, decoded float32 hashes and model hashes before their capture is reused. Original capture dates stay intact. New input captures contain the real frame, onset and contour matrices. Re-extraction rebuilds each Standard MIDI and parses it back; an independent check requires the exact MIDI hash and complete fields to agree. Reusing or replaying a capture is not a newly executed inference.

Capture timestamps have a separate clock basis. During publication, the execution-host clock disagreed with the live HTTP Date and Cloudflare deployment clock. The JSON field capturedAtUtc is preserved as a raw host-clock reading, not certified wall-clock UTC. No offset has been applied to old or new captures; use hashes to check identity, not clock differences to infer elapsed experiment time. Publication times come from the deployment service. Inspect the observed clock readings.

Model manifest SHA-256: 1ed1aaee3409ec1dc098c8b01f430c0911f6fe9412e7af8086750f9e8f302f68. Combined weights: b142a95737a52e1e412d5f92e73d8bb80dfe8d04941acc0702f11f4524fb377c. Unchanged converter source: e42f9b0b60bb6fd73b2539a1ae9ca3b09f34ab874e35423162b384df68c19660. No visitor recording is used or uploaded. The joining experiment and repeated-note counterexample retain their original bodies and reciprocal links.

The actual fields
behind each export.

These lines come from the saved Standard MIDI files, not model predictions written directly into prose. Seconds and velocity are rounded to six decimal places for display; full precision, ticks, duration ticks and PPQ remain in the result record. No musical-intent label is assigned to the source construction or to an exported event.

Download the files.
Check the differences.

Full results and provenance include original timestamps, input-stream text, encoder arguments, decoded hashes, comparisons and all MIDI fields. Reproduction code runs in this project's locked environment as node scripts/measure-mp3-bitrate.cjs. Prior Oct18 source evidence is needed for reference validation. With --replay, a missing model capture is refused rather than invented, and actual model executions remain counted separately.

All source audio was generated by this project. These controls are evidence files, not user recordings. The single-boundary matrix keeps its original claim; this page changes only the encoding path for two of its saved WAV sources.