Standard MIDI File Inspector
Inspect local SMF tracks, events, running status and tempo maps. Export exact PPQ tick-to-time evidence; SMPTE files retain frame/tick inventory only.
Loading tool…
How to use Standard MIDI File Inspector
Read what a MIDI file actually stores without playing it or sending messages to a device. Ordered source offsets, channel data, text bytes and tempo changes remain visible. PPQ timing is integrated as exact microsecond fractions; independent format-2 patterns and SMPTE inventory are kept explicit rather than combined into a guessed song duration.
- Choose your own local SMF file, or load the genuine authored two-track example.
- Run inspection and review chunk ranges, ordered events, source ticks and literal metadata bytes. Tracks and channels are separate concepts.
- For PPQ, compare exact elapsed microsecond numerators and denominators. Divide only when you need a display estimate; the exported fractions are unrounded.
- Copy or download the complete JSON evidence. No file is rewritten, played, transmitted or uploaded.
Good to know
- One actual File from 26 bytes through 2 MiB, read locally with a 5-second wait. Blob reads cannot be forcibly cancelled; late results are ignored. One same-origin module Worker allows 10 seconds for fixed parser preparation and a separate 2-second computation deadline. Completion and failures terminate Worker ownership and clear timers.
- SMF formats 0, 1 and 2 only; 1–64 declared/exact tracks, with one for format 0, and at most 128 total chunks. The first header has at least 6 data bytes; extra header and alien chunk payloads are counted and skipped by exact bounded length. No RIFF/RMID wrapper, MIDI 2.0/UMP, compressed container, SoundFont or audio-codec support.
- At most 5,000 events across all tracks, shortest-form 1–4-byte VLQ numbers, and complete bounded channel/meta/F0/F7 framing. Running status is track-local and cleared by meta or SysEx events. Every track needs a final End of Track; trailing bytes refuse. Opaque SysEx bodies are not validated as device messages, decoded, exported or sent. Interrupted or unfinished F0/F7 packet sequences refuse.
- Each meta or SysEx body is at most 65,536 bytes; combined source text is at most 131,072 bytes. Text meta types 01–0F preserve original hex bytes. An ASCII string is provided only when every byte is below 128; other encodings are not guessed. Unknown/opaque bodies receive byte ranges and sizes only. Known fixed metadata may have an extended declared body: its recognized prefix is interpreted and extra bytes are counted, never silently read as another event.
- At most 1,000 positive tempo changes. PPQ starts at the standard default 500,000 microseconds per quarter note. Format 1 requires all tempo events in its first track, whose map is shared by the simultaneous tracks. Same-tick tempo events retain source order; the last controls subsequent intervals. Format 2 has independent track timelines and no combined duration.
- PPQ elapsed values are exact unreduced fractions from source zero, not acoustic performance timings. SMPTE -24/-25/-29/-30 divisions are inventoried with ticks per frame; elapsed fractions remain null, including drop-frame files. SMPTE Offset bytes are retained as source fields and are not added to elapsed time. Bars, note durations, voice pairing, instrument names, score interpretation and controller effects are not inferred.
- Complete JSON is capped at 2,000,000 UTF-16 units, including escaping. Unsupported or over-limit input produces no partial download. Raw channel/program/controller numbers and metadata are source evidence, not a complete MIDI conformance, authenticity or music-rights assessment. Private lyrics or track text may appear in the JSON; review it before sharing. Original source bytes stay unchanged and no source markup or URL is mounted, opened or executed.
Common questions
Why do ticks and elapsed time differ?
PPQ ticks divide a quarter note. A tempo change changes the microseconds represented by subsequent ticks, so elapsed time requires integrating every earlier tempo interval. The JSON preserves exact integer fractions instead of rounding each event separately.
Does a MIDI file contain recorded sound?
An SMF stores timestamped messages and metadata. This reader does not synthesize or record audio, connect to a MIDI device, or claim that a particular instrument will sound as intended.
Why are text hex and SMPTE elapsed null visible?
SMF text can use undeclared historical encodings, so this tool only interprets 7-bit ASCII and preserves all original text bytes as hex. SMPTE divisions remain frame/tick source inventory; no unsupported drop-frame or absolute-time conversion is guessed.
Keep going with related tools
All files →Local ID3 Metadata Reader
Read leading plain-header ID3v2.3 or ID3v2.4 text metadata and frame positions from a local file. Download bounded source evidence without playing audio.
Music & audioMusic Pitch and Interval Calculator
Convert scientific note names, MIDI notes and frequencies, or compare a pitch interval under your chosen A4 tuning.
Music & audioTempo and Note Duration Calculator
Calculate note, tuplet and bar durations from an explicit BPM beat unit, dot count and time signature.
Music & audioOnline Metronome and Tap Tempo
Practise with a local metronome, bar accents and equal subdivisions. Tap a tempo, explicitly start or stop, and download your session settings.
FilesBinary Hex Viewer
Display a bounded byte slice with hexadecimal offsets, hex values and an escaped ASCII view.
FilesMIDI Note Sequence File Builder
Turn your own note-event rows into a local MIDI file with exact tick-grid timing, a declared tempo and complete event evidence.