RETAINED-MIDI EXPERIMENT / OCTOBER 11, 2026
MP3 to MIDI.
A grid moves notes.
Grid rounding changed timing, not the pitch list. At our chosen 120 BPM, quarter-note rounding moved every start in four controls and stretched some short notes through the disclosed one-grid-unit guard. Finer grids moved starts less in these exports, but did not remove higher-layer notes. This is offline MIDI editing, not an accuracy test or a recommended preset.
The pitch list stayed.
The timing did not.
| Retained MIDI | Events | Q | Q/2 | Q/4 | Q/8 |
|---|---|---|---|---|---|
| Fundamental WAV | 9 | 236 / 413 | 106 / 173 | 55 / 53 | 21 / 29 |
| Fundamental MP3 | 8 | 236 / 413 | 106 / 173 | 49 / 53 | 28 / 27 |
| Stronger-partial WAV | 13 | 233 / 346 | 103 / 117 | 58 / 48 | 17 / 29 |
| Stronger-partial MP3 | 14 | 233 / 413 | 120 / 173 | 58 / 59 | 17 / 23 |
Fundamental WAV
Events: 9.
Maximum start / duration change, in ticks: Q/1: 236 / 413; Q/2: 106 / 173; Q/4: 55 / 53; Q/8: 21 / 29.
Fundamental MP3
Events: 8.
Maximum start / duration change, in ticks: Q/1: 236 / 413; Q/2: 106 / 173; Q/4: 49 / 53; Q/8: 28 / 27.
Stronger-partial WAV
Events: 13.
Maximum start / duration change, in ticks: Q/1: 233 / 346; Q/2: 103 / 117; Q/4: 58 / 48; Q/8: 17 / 29.
Stronger-partial MP3
Events: 14.
Maximum start / duration change, in ticks: Q/1: 233 / 413; Q/2: 120 / 173; Q/4: 58 / 59; Q/8: 17 / 23.
All four files use 480 ticks per quarter. The five cases are Off, Q, Q/2, Q/4 and Q/8. Their rounding grids are none, 480, 240, 120 and 60 ticks. We chose a fixed 120 BPM for this comparison; we did not estimate the tempo from audio. At that tempo a tick is 60 / (120 * 480) seconds, so the fundamental quarter-grid movement of 236 ticks equals 0.24583333333333332 seconds under this explicit tempo map.
Quarter-grid maximum start shifts are 236, 236, 233 and 233 ticks in the order fundamental WAV, fundamental MP3, stronger-partial WAV and stronger-partial MP3. On the half-quarter grid they are 106, 106, 103 and 120. On Q/4 they are 55, 49, 58 and 58. On Q/8 they are 21, 28, 17 and 17. This descending maximum in these controls is an observation, not proof that smaller grid divisions always sound better.
The strongest-partial MP3 has one start already aligned with both Q/4 and Q/8, so thirteen of its fourteen starts move in those cases. Every start moves in the other three controls on every active grid. Every duration changes in each active case. The per-note result pairs show which specific events changed; a maximum does not describe all their movements.
A short duration can round to zero.
For each active grid, we use newStart = round(oldStart / gridTicks) * gridTicks and newDuration = max(1, round(oldDuration / gridTicks)) * gridTicks. The maximum operation is a deliberate minimum-one-unit duration guard. It keeps a short rounded note from becoming a zero-duration event; it also lengthens some short events. Another editor could use a different guard or quantise note ends instead.
On Q, the guard activates seven times in fundamental WAV, four in fundamental MP3, twice in stronger-partial WAV and three times in stronger-partial MP3. On Q/2 the counts are three, four, zero and one. On Q/4 and Q/8 the guard does not activate in these controls. We record guard activations before serialization, then check the actual duration ticks after parsing the saved MIDI.
The maximum absolute duration changes on Q are 413, 413, 346 and 413 ticks. At Q/8 they are 29, 27, 29 and 23. A coarse duration grid can therefore change note length by much more than its onset moves. We do not describe this as repairing a performance. We are reporting differences from retained MIDI, which already contains transcription timing errors and fragments.
More shared starts do not mean fewer notes.
We also count eventCount - count(uniqueStartTicks). This is the number of events beyond one per distinct start, not a count of bad notes. The unrounded fundamental pair has zero by this rule. Quarter-grid rounding raises it to four and three. At Q/8 both return to zero. The stronger-partial pair already has seven before rounding; quarter-grid rounding produces nine and ten, while Q/8 produces eight and eight.
Some shared starts are legitimate simultaneous pitches; others may be overlapping transcription fragments. The metric cannot distinguish them. Our script does not merge events sharing a start, delete duplicates, remove higher pitches or split parts into instruments. The event counts remain nine, eight, thirteen and fourteen across every case. Timing alignment alone does not perform source separation.
The original stronger-partial exports contain the same upper-layer events documented in the harmonic controls. These grid transformations keep their pitches. The earlier frequency-bound test and minimum-length test change different parts of extraction; their results are not interchangeable with this tick-domain edit.
Retained files. Explicit transformations.
We hash-check the four originals against the retained five-frame exports in the minimum-length evidence set. They come from project-generated fundamental and stronger-second-partial WAV/MP3 controls, not visitor uploads. Input audio and captured model arrays remain downloadable from the preceding evidence pages. This experiment starts at the exported MIDI: no model is run again, no file goes to a conversion service, and no source capture is modified.
For each case we construct a fresh MIDI object from the original bytes, set the chosen tempo to 120 BPM, change note ticks and duration ticks only as specified, serialize a Standard MIDI file and parse it back. We assert the event count and ordered pitch list are unchanged. Off keeps all start and duration ticks unchanged; it is a re-export under our chosen tempo map, not a claim of byte identity with the original.
The result JSON records the actual Node and @tonejs/midi versions, original SHA-256 values, exported-file hashes and per-note before/after pairs. Movement counts exclude unchanged values. Maxima use absolute differences. Every transformed file is nonempty and downloadable. The reproduction script retains the selected formulas and hash assertions; in this project run node scripts/measure-grid-rounding.cjs.
One real control. A separate experiment.
Tuneonmusic's settings explanation says its Snap to grid control rounds note starts and durations to tempo subdivisions. That observed control prompted this independent experiment. Our selected grids, rounding rule and minimum-duration guard are our disclosed protocol, not a reconstruction or test of its implementation.
This page reports offline transformations only. We did not audition these files in a DAW, test a physical phone, rate perceived rhythm or measure transcription accuracy. The live converter is unchanged and has not gained a grid control. Browser capture results remain a separate experiment. Smaller numerical timing differences here are not a recommendation for every musical recording.
Take the exact exports.
There are four retained originals and twenty actual re-exports, one for each control and grid case. Each original hash below is checked before transformation. Download all per-note measurements to verify changes without trusting a summary table.
- Fundamental WAV original MIDISHA-256:
236a9a0bdc9d098423d2a22c4a961fe29f4280fed166eae518648bf3def4129a. Re-exports: Off / Q/1 / Q/2 / Q/4 / Q/8. - Fundamental MP3 original MIDISHA-256:
c41e8d4c2a19289c6386ae24b8e20386e76bd6739489f6f818e9dfe02598ef66. Re-exports: Off / Q/1 / Q/2 / Q/4 / Q/8. - Stronger-partial WAV original MIDISHA-256:
626e284560282a80f1ac066c47c35ca3d85d47dc49808eea0c554d2935cf14f3. Re-exports: Off / Q/1 / Q/2 / Q/4 / Q/8. - Stronger-partial MP3 original MIDISHA-256:
d90c17b72c3c322540ee3eb54528766fcd80a96cac92d4d0301d484dd12fdbe8. Re-exports: Off / Q/1 / Q/2 / Q/4 / Q/8.