Skip to main content

MIDI player online

Upload, visualize, and play MIDI files with piano roll display and analysis.

Free & unlimitedWorks offline

Upload a Standard MIDI File (.mid) to visualize its notes on a piano roll and play it back through your browser. Supports multi-track files with per-channel coloring.

All processing happens in your browser. No data is sent to any server.

A .mid file is not audio — it is a list of note events with no sound of its own, which is why double-clicking one so often does nothing useful. This page reads the Standard MIDI File structure directly: the MThd header for format, track count and ticks per beat, then each MTrk chunk event by event, with running status handled, tempo meta events collected and track names picked up. The notes are drawn as a piano roll on canvas and played back through the Web Audio API with a single oscillator per note. That gives you a clear, honest rendering of the note data — pitch, timing, velocity and channel — rather than an instrument performance.

Key facts about MIDI player online

Key facts about MIDI player online
ParserA purpose-written Standard MIDI File reader: MThd header, MTrk chunks, variable-length delta times, running status, note on and note off, tempo and track-name meta events
Sound sourceWeb Audio oscillators. One oscillator and one gain envelope per note, chosen from sine, triangle, square or sawtooth
No soundfontThere are no instrument samples and no General MIDI voices. Program change messages are parsed and discarded, so a piano part and a trumpet part sound identical
DrumsChannel 10 percussion plays as pitched tones, because the note number is treated as a pitch rather than a drum map index
EnvelopeEach note starts at a gain set by its velocity divided by 127 and decays exponentially; any note longer than 2 seconds is cut at 2 seconds
TempoTempo meta events are read and the BPM is reported. Playback uses one constant tempo, so a piece with tempo changes plays at a single speed
Default tempo120 BPM when the file contains no tempo event, as the MIDI specification requires
Piano rollCanvas rendering with a playback position line, coloured either by channel across a 16-colour palette or by note velocity
StatisticsBPM, note count, channel count, lowest and highest note, note range, average velocity, most common note and total duration
TransportPlay, stop, playback speed presets, volume and mute
ExportA tab-separated note list with note, start, duration, channel and velocity columns, plus a copy-statistics button
Formats.mid and .midi. SMPTE timecode division is not handled — only ticks-per-beat timing

What happens to your file

The MIDI file is read into an ArrayBuffer and parsed by JavaScript in this tab; the piano roll is drawn on a canvas in the same page and the sound is synthesised locally by the Web Audio API. Nothing is uploaded, nothing is streamed from a server, and the note-list export is generated in page memory and saved by your browser. That also means the page works with no network once loaded, and that an unreleased composition can be inspected here without a copy of it existing anywhere but your own disk.

About this tool

  1. 1

    Drop the .mid or .midi file

    Drag it onto the page or browse. The header and every track are parsed immediately and a toast reports the note count and the tempo.

  2. 2

    Read the statistics

    BPM, note count, channel count, note range and average velocity tell you what kind of file you have before you hear a thing — a 16-channel arrangement and a one-channel melody line are obvious at a glance.

  3. 3

    Look at the piano roll

    Colour by channel to see how the parts are separated, or by velocity to see where the loud notes are. The position line follows playback.

  4. 4

    Pick a waveform and play

    Sine is the cleanest for hearing melodic lines, sawtooth the most cutting for picking a part out of a dense arrangement. Adjust volume and playback speed as you listen.

  5. 5

    Export the note list

    The tab-separated export gives note, start, duration, channel and velocity per event — ready for a spreadsheet, an analysis script or a bug report about a sequencer.

Specs & compatibility
Accepted extensions.mid, .midi
SMF formats0, 1 and 2 are read; the header reports which
TimingTicks per beat from the header, converted with the tempo to seconds per tick
WaveformsSine, triangle, square, sawtooth
Note cap2 seconds of sustain per note
Playback speedAdjustable; it scales seconds per tick, so pitch is unaffected
SchedulingEvery note is scheduled up front when playback starts, so very dense files are heavy on start
ExportTab-separated values (.tsv) note list
Audio requirementWeb Audio; playback starts from a user gesture as browsers require
Cost / accountFree, unlimited files, no signup
  • Use the sawtooth waveform and a slow playback speed to follow one line inside a dense arrangement.
  • Average velocity is a quick check for a file that was step-entered rather than played: a constant 64 or 100 across every note means no human touched a keyboard.
  • The note range tells you immediately whether a part fits an instrument before you assign it in a DAW.
  • A drum track will sound wrong here by design — channel 10 note numbers are drum map indexes, and this player treats every note number as a pitch.
  • If the playback speeds up or drags against your expectation, the file probably contains tempo changes; playback uses a single constant tempo.
  • Export the note list and open it in a spreadsheet when you need to count how many notes fall on the beat versus between beats.
  • Colour by velocity rather than by channel to see at a glance whether the dynamics were played or programmed.
  • Standard MIDI File parsing in the browser
  • Piano roll with playback position
  • Colour by channel or by velocity
  • Four synthesis waveforms
  • Playback speed, volume and mute
  • Tempo, note, channel and velocity statistics
  • Tab-separated note-list export
  • Copy statistics to clipboard
  • Hearing what a downloaded .mid file contains before importing it into a DAW.
  • Checking which channels and note ranges a MIDI arrangement uses.
  • Reading the melodic contour of a file as a piano roll without opening a sequencer.
  • Exporting note timings to a spreadsheet for analysis or for a transcription exercise.
  • Confirming that a MIDI export from notation software contains the notes you expected.
  • Playing a MIDI file on a machine with no music software and no system synthesiser.
Because there is no soundfont. Playback uses Web Audio oscillators — one oscillator with a decaying gain envelope per note — in your choice of sine, triangle, square or sawtooth. Program change messages that name an instrument are parsed and then discarded, so every channel sounds the same. That keeps the page small and instant, and it makes the note data audible, which is what a viewer is for. For an instrument performance, import the file into a DAW with a sample library.
No. The file is read into an ArrayBuffer and parsed by JavaScript in this tab, the piano roll is drawn on a local canvas and the audio is synthesised by your own browser. There is no upload, no streaming server and no stored copy. The note-list export is likewise generated in page memory and saved locally, so a piece you have not released stays entirely on your own machine.
Because MIDI channel 10 is a percussion map, not a pitch map: note number 36 means a kick drum, not the note C2. This player treats every note number as a pitch and plays it on an oscillator, so a drum track comes out as a stream of odd pitched tones. It is still useful for seeing the rhythm on the piano roll, but for hearing drums you need a player with a General MIDI drum kit.
It reads them but does not follow them. Tempo meta events are parsed and the reported BPM comes from them, but playback computes one seconds-per-tick value and uses it for the whole file, so a piece that ritards or switches tempo mid-way plays at a single speed. If the timing feels wrong against a score, that is usually why. The piano roll positions are derived the same way, so they follow the same simplification.
It is a tab-separated file with one row per note giving the note, its start time, its duration, its channel and its velocity, so it opens directly in any spreadsheet. That makes it useful for counting notes per channel, checking whether a part was quantised, measuring velocity spread, or feeding a quick analysis script. It is a description of the file, not a MIDI file — you cannot import it back into a sequencer as music.
No. This page reads, visualises and plays; it does not edit notes, change instruments, or render to WAV or MP3. Recording the oscillator output would produce a bare synth tone rather than anything you would want to keep, which is why the export is the note data instead. For editing or rendering, use a DAW or a notation program, and use this page as the quick look before you decide the file is worth opening there.
View all

Part of File viewers that open the file in your browser

Updated

We use anonymous analytics to improve ToolChamp. No personal data is stored or sold. Privacy Policy