Skip to the answer

AUTHORED AUDIO / OFFLINE CPU / OCTOBER 15, 2026

MP3 to MIDI.
A hold. Three attacks.

Our held tone exported 2 / 2 events in WAV / MP3. Three touching, separately enveloped source events exported 4 / 4. With 662-sample gaps, they exported 5 / 6. These are actual offline CPU MIDI counts, not a rule for deciding musical intent. The authored envelopes and exact source intervals remain downloadable.

The source count
is not the output count.

HELD CONTROL / WAV AND MP32 / 2 events.One declared source span. Counts come from re-parsed Standard MIDI files.
THREE DECLARED SPANS / 2646-SAMPLE GAPS6 / 5 events.The gap is 120 ms by the generator's sample clock. This is a selected control, not a recommended setting.
Actual re-parsed exports at fixed detection settings. Source spans are generator definitions. Pitch 60 and other-pitch events are shown separately.
Generated controlInputSource spansMIDI eventsPitch 60Other pitches
Held spanWAV1220
Held spanMP31220
Repeated / touchingWAV3440
Repeated / touchingMP33440
Repeated / 662-sample gapsWAV3550
Repeated / 662-sample gapsMP33660
Repeated / 2646-sample gapsWAV3660
Repeated / 2646-sample gapsMP33550

Held span / WAV

Declared source events: 1. Parsed MIDI: 2 events; 2 at pitch 60; 0 at other pitches.

Held span / MP3

Declared source events: 1. Parsed MIDI: 2 events; 2 at pitch 60; 0 at other pitches.

Repeated / touching / WAV

Declared source events: 3. Parsed MIDI: 4 events; 4 at pitch 60; 0 at other pitches.

Repeated / touching / MP3

Declared source events: 3. Parsed MIDI: 4 events; 4 at pitch 60; 0 at other pitches.

Repeated / 662-sample gaps / WAV

Declared source events: 3. Parsed MIDI: 5 events; 5 at pitch 60; 0 at other pitches.

Repeated / 662-sample gaps / MP3

Declared source events: 3. Parsed MIDI: 6 events; 6 at pitch 60; 0 at other pitches.

Repeated / 2646-sample gaps / WAV

Declared source events: 3. Parsed MIDI: 6 events; 6 at pitch 60; 0 at other pitches.

Repeated / 2646-sample gaps / MP3

Declared source events: 3. Parsed MIDI: 5 events; 5 at pitch 60; 0 at other pitches.

The held control contains one authored span; each repeated control contains three. WAV and MP3 are separate actual inference runs. The table does not equate a matching event count with correct boundaries, and it does not silently treat an upper pitch as another attack at the reference pitch. The reference-pitch column counts only MIDI pitch 60. The other-pitch column contains every remaining exported event.

Declared source events and actual reference-pitch and other-pitch MIDI counts for eight generated inputs
Every bar is drawn from a saved, re-parsed MIDI export. Open the measured count chart.

The touching repeated control has no positive silent gap between its declared spans, yet each span has its own edge envelope and phase restart. The two positive-gap controls retain that construction and move the starts. The 662-sample case has a gap of 30.023 ms; the 2646-sample case has a gap of 120.000 ms. A count difference here belongs to this source construction and this pipeline. It cannot establish a universal separation threshold.

Read the boundaries,
not just the total.

Authored source schedule. Times are seconds rounded to six decimal places; gap values are milliseconds rounded to three. RMS uses the saved, quantized WAV divided by 32768.
Source controlDeclared intervals / secondsGap / msSource RMS
Held span0.200000 to 2.600000Not applicable0.213728
Repeated / touching0.200000 to 1.000000
1.000000 to 1.800000
1.800000 to 2.600000
0.0000.212529
Repeated / 662-sample gaps0.200000 to 1.000000
1.030023 to 1.830023
1.860045 to 2.660045
30.0230.212529
Repeated / 2646-sample gaps0.200000 to 1.000000
1.120000 to 1.920000
2.040000 to 2.840000
120.0000.212529

Held span

Declared intervals / seconds: 0.200000 to 2.600000. Gap / ms: not applicable. Source RMS: 0.213728.

Repeated / touching

Declared intervals / seconds: 0.200000 to 1.000000; 1.000000 to 1.800000; 1.800000 to 2.600000. Gap / ms: 0.000. Source RMS: 0.212529.

Repeated / 662-sample gaps

Declared intervals / seconds: 0.200000 to 1.000000; 1.030023 to 1.830023; 1.860045 to 2.660045. Gap / ms: 30.023. Source RMS: 0.212529.

Repeated / 2646-sample gaps

Declared intervals / seconds: 0.200000 to 1.000000; 1.120000 to 1.920000; 2.040000 to 2.840000. Gap / ms: 120.000. Source RMS: 0.212529.

Four authored source timelines compared with the actual WAV MIDI event intervals
Outlines use authored intervals. Solid bars use actual parsed WAV notes. Pitch rows are separate; a visual overlap is not a listening judgment. Open the timing chart.

The MIDI fields below expose each event's start and duration, including events at other pitches. They are the actual quantized seconds read by the MIDI parser, not detector frames relabelled as milliseconds. The result JSON additionally retains ticks, duration ticks, PPQ, velocity and the original frame-event fields. Rounded text is for reading; the downloadable JSON retains the numeric fields used to generate it.

This comparison declares source events by construction. It does not claim that a human listener would assign those same event identities to arbitrary audio. A source onset is defined by the start sample of its authored span, even though the fade begins at zero amplitude. Model detection and serialized MIDI need not reproduce that sample boundary exactly.

One model.
One extraction protocol.

Each source is a mono, 16-bit PCM WAV with 70560 samples at 22050 Hz, lasting 3.2 seconds. The first declared onset is sample 4410, or 0.2 seconds. The held span lasts three times the repeated segment length; a repeated segment is 17640 samples, or 0.8 seconds. All controls use MIDI reference pitch 60 and the generator frequency formula 440 * 2 ** ((pitch - 69) / 12).

The pre-quantization peak amplitude is set to 0.35. Every declared span uses a linear edge envelope of 220 samples and a sine phase that restarts at its first sample. The held control has one pair of edges; repeated controls have three. More fades and phase restarts make this more than a gap-only intervention. We do not normalize all controls to equal RMS or claim identical energy. The measured RMS column shows the source difference instead of hiding it.

Native FFmpeg encodes each WAV to 128 kbps MP3, then decodes both formats to mono float32 samples at the selected rate. Each input's bytes, decoded float32 bytes, decoded sample count, RMS and peak are recorded. WAV and MP3 may differ after encoding and decoding; they are not interchangeable captures. A gzip file retains each input's actual frame, onset and contour matrices. Capture hashes and model hashes are checked before extraction.

The offline backend is cpu, using Basic Pitch 1.0.1, MIDI writer 2.0.28 and v24.19.0 on win32. Both detection thresholds are 0.25; the extraction minimum is 5 frames. These are the existing converter source parameters, not settings tuned after viewing this experiment. We apply the same note-time conversion and MIDI construction: start at least zero, duration at least 0.03 seconds and velocity clamped between 0.05 and one.

Model manifest SHA-256: 1ed1aaee3409ec1dc098c8b01f430c0911f6fe9412e7af8086750f9e8f302f68. Combined weight SHA-256: b142a95737a52e1e412d5f92e73d8bb80dfe8d04941acc0702f11f4524fb377c. Converter source SHA-256: e42f9b0b60bb6fd73b2539a1ae9ca3b09f34ab874e35423162b384df68c19660. The retained model outputs are independent across inputs and fixed within each export. We parse every saved .mid back and compare its fields, counts and hashes; no output is replaced with an expected result.

Belonging is still
a separate question.

MP3MIDITool's repair guidance makes belonging to a held note the condition for fragment merging. This experiment follows that observed distinction with generated audio and actual inference. The retained-MIDI joining test measures a disclosed edit rule; its repeated-note counterexample establishes that close same-pitch MIDI events can be intentionally separate. Today's audio controls do not overwrite either result.

Nothing here validates that competitor's converter, natural vocals, a musical instrument, a physical phone or a DAW. The live browser converter was not used for these CPU runs and remains unchanged. We did not listen to or score musical performances. The source-event labels come from our generator, not an automatic intent detector. No count is an accuracy percentage, and none of the selected gaps is offered as a safe musical boundary.

A lower count could merge separate authored attacks; a larger count could include short fragments or other pitches. The exact files and note fields let readers investigate those alternatives. They do not license a recommendation to merge every nearby event, or to change settings for an untested recording.

Keep the inputs.
Keep the inference.

Full measured results retain the source schedule, all parsed notes, the actual environment and SHA-256 fields. Reproduction code runs inside this project's locked dependency environment as node scripts/measure-held-rearticulated.cjs. With retained captures, --replay checks input and model hashes before re-extraction. This is not a dependency-free standalone program.

All source files are project-authored synthetic controls. No visitor recording is accepted or sent to any outside service by this experiment. Downloading an evidence file is distinct from uploading your own audio; the public tool still processes visitor media in the visitor's browser.