Short answer: a MIDI track is a container, not an instrument. Taking this site's published 169 B / 14 notes file and moving its k highest notes into a genuinely new second instrument track gives 189 B at k=1, 190 B at k=2, 194 B at k=7 and 188 B at k=14 — the size is not monotonic in k. All four copies still read exactly 14 notes, PPQ 480, 0 tempo events and the same 7,627-tick end point, with every note's pitch, start tick, duration and velocity unchanged. What changes is structural: the header's declared track count goes 2 → 3, two MTrk length fields are rewritten, and each track's delta-times are re-encoded relative to that track's own last event. Grouping notes by pitch is not instrument separation. Measured 13 November 2026 (UTC) with @tonejs/midi 2.0.28. Download the source and check each byte.
| Variant | File size | Note tracks read | Notes read | Header ntrks | Notes A / B |
|---|---|---|---|---|---|
| source (k=0) | 169 B | 1 | 14 | 2 | 14 / 0 |
| k=1 | 189 B | 2 | 14 | 3 | 13 / 1 |
| k=2 | 190 B | 2 | 14 | 3 | 12 / 2 |
| k=7 | 194 B | 2 | 14 | 3 | 7 / 7 |
| k=14 | 188 B | 2 | 14 | 3 | 0 / 14 |
Every row above is the same 169 B source with one variable changed: k, the number of notes reassigned to the new track (highest pitch first, then earliest start tick on a tie). No audio was re-converted, no note was added or removed, and no timing value was altered. The last four rows were each re-opened from scratch with an independent parser.
Exclusive material. Five of the seven sections below are measurements of one published file, four single-variable two-track reconstructions, their chunk maps, and six single-byte structural controls — not general format descriptions. Two denominators, computed on 13 November 2026: sections 5/7=71.4% and characters 7,115/9,563=74.4%. Method: split the body at each <h2>, strip tags, normalise entities, collapse whitespace, count only measured sections. The first-screen answer, head and footer are outside both denominators.
Honesty line, stated up front. This page does not offer a track-per-instrument tool and does not output a track-per-instrument file: there is no track-per-instrument output here. It is a byte-level experiment on one already-published .mid file, editing bytes and re-parsing the copies; it is not a converter feature and makes no conversion claim. This site does not separate instruments. It does not keep a drum track. It outputs a single-track .mid file with one note track and no per-instrument parts. There is no multitrack output and no instrument separation here. It does not detect tempo, BPM or musical key automatically, and does not promise transcription accuracy or conversion speed. No DAW was opened and no DAW compatibility is claimed.
Version caveat. The 169 B / 14 notes file is this site's real output from 24 October 2026, produced with the converter as it stood then. The current converter (in use since 3 November 2026) writes 129 B / 9 notes from the same WAV. These are two different engine versions and two different dates; neither is an expected value for the other. If you run the WAV through the live tool today, expect 129 B, not 169 B. The byte-level experiment below deliberately uses the published 169 B file because that file is public and reproducible; it is not a measurement of the current converter's output.
The source is the 169 B MIDI file published here on 24 October 2026 alongside the test WAV. Its first 14 bytes are 4D 54 68 64 00 00 00 06 00 01 00 02 01 E0: MThd declares format 1, two tracks and division 01 E0 = 480 ticks per quarter. The chunk table is read from the file's own length fields, with no assumed offsets:
| Chunk | Offset | Length field | Bytes on disk | Working |
|---|---|---|---|---|
| MThd (header) | 0 | 6 | 14 B | 8 + 6 = 14 |
| MTrk (conductor) | 14 | 8 | 16 B | 8 + 8 = 16 |
| MTrk (notes) | 30 | 131 | 139 B | 8 + 131 = 139 |
| Total | — | — | 169 B | 14 + (8+8) + (8+131) = 169 |
The first MTrk is an 8 B conductor track; the second holds 131 B of events. Walking from its body start at offset 38 through the variable-length delta-times enumerates 31 events: 14 Note On, 14 Note Off, one Program Change and two meta events, ending at tick 7,627. So the header's ntrks=2 counts one conductor track and one note track — not two instruments. The independent parser returns 1 note track, 14 notes, PPQ 480 and 0 tempo events. The format field and the delta-time encoding were measured separately on this same file.
In a Standard MIDI File, a track is an ordered stream of timestamped events. Nothing in the chunk header identifies an instrument: the association comes from a Program Change message and, optionally, a track-name meta event, both interpreted by whatever opens the file. A file can declare three tracks and give all of them the same program, or declare one track carrying many programs. That is why "one track per instrument" is a description of how a human (or a transcriber) chose to lay out events, not a property the format enforces. Editorial pages about per-instrument transcription usually discuss workflows and DAW import; this page says nothing about those, and instead measures only what the bytes do when a second track is actually built. This section is general format context and is excluded from the exclusive-material denominators above.
Four copies were built with k = 1, 2, 7 and 14. In each, the k highest notes (ties broken by earliest start tick) are moved out of the original note track A and into a newly encoded note track B carrying Program Change 40. Both tracks keep a track-name meta event, a program event and an End-of-Track marker, so their payload lengths are 4 + 3 + Σ event bytes + 4. Each copy was re-opened from scratch with @tonejs/midi 2.0.28:
| k | ntrks | lenA | lenB | evA | evB | notesA | notesB | notes read | PPQ | Size |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 3 | 123 | 20 | 112 | 9 | 13 | 1 | 14 | 480 | 189 B |
| 2 | 3 | 115 | 29 | 104 | 18 | 12 | 2 | 14 | 480 | 190 B |
| 7 | 3 | 74 | 74 | 63 | 63 | 7 | 7 | 14 | 480 | 194 B |
| 14 | 3 | 11 | 131 | 0 | 120 | 0 | 14 | 14 | 480 | 188 B |
The size is not monotonic: k=7 is the largest file (194 B) and k=14 the smallest of the four (188 B). Two opposing effects explain it. Each added track duplicates 11 B of fixed events (track name 4 + Program Change 3 + EOT 4) and adds an 8 B chunk header, while splitting a delta-time chain can change the number of VLQ bytes: at k=7 the two event streams total 126 B versus 120 B in the source, so 169 + 8 + 11 + 6 = 194 B. At k=14 track A is empty (11 B payload) and track B holds the original 120 B of event bytes unchanged, so 169 + (8 + 11) = 188 B. Every figure in that arithmetic comes from the chunk table below or from the variant rows above.
| k | Chunk | Offset | Length field | Bytes on disk |
|---|---|---|---|---|
| 1 | MThd | 0 | 6 | 14 B |
| 1 | MTrk (conductor) | 14 | 8 | 16 B |
| 1 | MTrk A | 30 | 123 | 131 B |
| 1 | MTrk B | 161 | 20 | 28 B |
| 2 | MThd | 0 | 6 | 14 B |
| 2 | MTrk (conductor) | 14 | 8 | 16 B |
| 2 | MTrk A | 30 | 115 | 123 B |
| 2 | MTrk B | 153 | 29 | 37 B |
| 7 | MThd | 0 | 6 | 14 B |
| 7 | MTrk (conductor) | 14 | 8 | 16 B |
| 7 | MTrk A | 30 | 74 | 82 B |
| 7 | MTrk B | 112 | 74 | 82 B |
| 14 | MThd | 0 | 6 | 14 B |
| 14 | MTrk (conductor) | 14 | 8 | 16 B |
| 14 | MTrk A | 30 | 11 | 19 B |
| 14 | MTrk B | 49 | 131 | 139 B |
Offsets are cumulative from each file's own length fields; the fourth chunk is the new instrument track. At k=1 it begins at offset 161, at k=7 at 112 and at k=14 at 49, because track A shrinks as notes leave. The last event tick of each track changes with the split (at k=1, track A ends at 7,627 and track B at 4,884), but the file-wide final tick stays 7,627 in all four copies.
No figure below is copied from a rendered page. Chunk lengths come from the files' own length fields, note counts from the independent parser, and the totals from the allocation formula fileBytes = 14 + (8+8) + (8+lenA) + (8+lenB):
| Formula | Computed | Corroborated by |
|---|---|---|
| 14 + (8+8) + (8+131) | 169 B | sum of three chunk length fields + 8 B headers |
| 14 + (8+8) + (8+11) + (8+131) | 188 B | k=14 copy, four chunks |
| 14 − k + k | 14 notes | notesA + notesB, every note (midi, ticks, duration, velocity) unchanged |
| 7,627 / 960 | 7.944792 s | last event tick; PPQ 480, 0 tempo events |
| 4 + 3 + Σ events + 4 | 131 B | second instrument track payload length at k=14 |
Division 01 E0 gives 480 ticks per quarter, so one tick is 60 / (120 × 480) = 1/960 s at the SMF default of 120 BPM; this file has 0 tempo events and none of the four edits adds one. The final event sits at 7,627 ticks = 7.944792 s in every copy. The single-variable check is stronger than a successful parse: all 14 notes were compared row by row on (midi, ticks, durationTicks, velocity) against the source, and merging the two tracks back, restoring program 0 and setting ntrks back to 2 rebuilt a file whose SHA-256 equals the source byte for byte — and that rebuilt file was itself re-opened and read as 14 notes at PPQ 480. Byte equality alone would only prove that nothing else moved; the re-parse is what proves the result is still a usable MIDI file.
At k=7 the two tracks split 7 / 7. The table lists every source note in parser order, its note-number byte on disk, and which track it lands in. Selection was highest pitch first with start tick as the tie-breaker, so the two C5 notes at MIDI 72 both move to B while B4 at 71 stays in A:
| # | Note | MIDI | Start tick | Track at k=7 | Pitch byte (hex) |
|---|---|---|---|---|---|
| 1 | C5 | 72 | 0 | B | 48 |
| 2 | C4 | 60 | 0 | A | 3C |
| 3 | D5 | 74 | 959 | B | 4A |
| 4 | D4 | 62 | 959 | A | 3E |
| 5 | E5 | 76 | 1918 | B | 4C |
| 6 | E4 | 64 | 1918 | A | 40 |
| 7 | F5 | 77 | 2877 | B | 4D |
| 8 | F4 | 65 | 2877 | A | 41 |
| 9 | G5 | 79 | 3837 | B | 4F |
| 10 | G4 | 67 | 3837 | A | 43 |
| 11 | A5 | 81 | 4806 | B | 51 |
| 12 | A4 | 69 | 4806 | A | 45 |
| 13 | B4 | 71 | 5755 | A | 47 |
| 14 | C5 | 72 | 6713 | B | 48 |
The six columns are the parser's own reading of the source plus the deterministic selection rule; no column is a transcription of a rendered table. Start ticks are identical in the source and in both tracks after the split: reassigning a note changes which delta-time chain it belongs to, not when it sounds. The two 48 bytes at rows 1 and 14 are the same MIDI 72 at different times, which is why the tie-breaker is stated rather than left implicit.
Six further edits change exactly one byte each in the 194 B k=7 copy — the declared track count, the new track's chunk length, its program, its first Note On channel, its End-of-Track meta type, or its chunk magic. Every copy stays 194 B. The readings are what the independent parser actually returned:
| Byte edit | Variant file | Still parses | Notes read | Size |
|---|---|---|---|---|
03 → 02 @ 11 | ctrl-01.mid | yes | 7 | 194 B |
4A → 49 @ 119 | ctrl-02.mid | yes | 14 | 194 B |
28 → 00 @ 126 | ctrl-03.mid | yes | 14 | 194 B |
90 → 91 @ 128 | ctrl-04.mid | yes | 13 | 194 B |
2F → 2E @ 192 | ctrl-05.mid | yes | 14 | 194 B |
4D → 58 @ 112 | ctrl-06.mid | no | — | 194 B |
Five of the six still parse, and two of those five silently lose information: declaring ntrks=2 makes the parser see only 7 notes, and moving one Note On to channel 1 makes it see 13. Changing the chunk length by one, the program byte, or the EOT meta type still returns 14 notes — a file that still opens can have a wrong declared length, a different instrument, or a broken terminator. Only the M → X magic-byte edit throws. A file that still parses is not necessarily a file with the same content. That is why the four reconstructions were checked for chunk-formula totals, per-note equality, per-track delta re-encoding, and a byte-for-byte restore that can be re-opened, and not merely for "it opened". The Note On / Note Off bytes and the Program Change byte were measured separately.
Open the 169 B source file in a hex editor, enumerate its 31 events from body start 38, choose the k highest notes, and write two MTrk chunks whose length fields equal 4 + 3 + Σ events + 4 each, with each event's delta taken relative to the previous event in that same track. Set the header's declared track count to 3 and re-open with a MIDI library that reports note pitch, ticks, velocity and per-track counts. The four derived files and six control files are not published here; the source file is, and every reading above can be reproduced from it. To convert audio instead, the MP3 to MIDI converter runs in your browser and produces a single-track .mid; the MIDI to MP3 tool renders in the other direction. Neither tool assigns instruments to tracks.
Not here: no conversion-accuracy measurement, no speed figure, no tempo, BPM or key detection claim, no multitrack or per-instrument output, no drum track, no URL or YouTube input, no DAW test, and no claim that this site is more accurate than anyone else. Numbers come from one 169 B file published on 24 October 2026, four single-variable two-track reconstructions and six single-byte controls, measured on 13 November 2026 (UTC). General format facts, method notes, limits and disclaimers are excluded from the exclusive-material denominators above.