Online MIDI Player

Behind the player

How it works

What happens when you open a MIDI file here: local parsing, the General MIDI sound bank, browser support, limits and the open-source licenses behind the player.

Pipeline

From file to sound, all on your device

1. Reading. When you choose a file, the browser hands its bytes to JavaScript on this page. A Standard MIDI File parser checks the header, walks every track, builds the tempo map and extracts each note with its start and end time. Damaged or truncated tracks are clamped and reported; files without a MIDI header, without tracks or without notes are rejected with a reason.

2. Visualizing. The piano roll is drawn from the parsed notes on an HTML canvas. It only draws the notes in view, so files with tens of thousands of notes stay smooth.

3. Playing. Sound is generated by SpessaSynth, an open-source SoundFont synthesizer that runs inside a Web Audio AudioWorklet. It loads the General MIDI sound bank below and sequences the file itself, including tempo changes, pitch bends, controllers and drums on channel 10. Speed changes re-time the sequence, so pitch is unaffected.

4. Muting and soloing.Track toggles rewrite the file in memory without the muted tracks' notes and hand the result back to the synthesizer at the same position. Program changes and controllers on muted tracks are kept, so tracks that share a channel still sound right.

Compatibility

Browser support

CapabilityChrome · Edge · FirefoxSafari (macOS, iOS, iPadOS)
Open and inspect a MIDI file, piano rollYesYes
Play the file (Web Audio + AudioWorklet)YesYes, Safari 14.1 / iOS 14.5 and later. Audio starts only after you tap Play.
Connect an external MIDI keyboard (Web MIDI)Available in the browser, not used by this player yetNot available in Safari or any iOS browser

Playing a file and connecting a keyboard are separate browser features. The absence of Web MIDI on iPhone and iPad does not stop file playback; this version does not use Web MIDI at all. Desktop Chromium and WebKit playback paths were verified with automated browser tests before delivery; a physical iPhone or iPad test is still pending.

Limits

What the player accepts

  • Standard MIDI Files, format 0, 1 or 2, with a .mid, .midi, .smf, .rmi or .kar extension. RIFF-wrapped (RMID) files are unwrapped automatically.
  • Up to 10.0 MB per file and 50,000 notes. Larger files are refused with a message rather than freezing the page.
  • No song library, no MIDI downloads, no audio export and no account. Bring files you have the right to use.

Credits & licenses

Sound bank and synthesizer notices

The instrument sounds are the FluidR3 General MIDI SoundFont by Frank Wen, in the mono conversion FluidR3Mono_GM by Michael Cowgill, as shipped with MuseScore 3.6.2 (file FluidR3Mono_GM.sf3, 22.6 MB, SHA-256 2aacd036d7058d40a371846ef2f5dc5f130d648ab3837fe2626591ba49a71254). Both are released under the MIT license. The original license file is mirrored at /soundfonts/FluidR3Mono_License.md; the upstream source is https://github.com/musescore/MuseScore/tree/3.6.2/share/sound.

Mono version:  Copyright (c) 2014-16 Michael Cowgill
Copyright (c) 2000-2002, 2008 Frank Wen <getfrank@gmail.com>

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

Acknowledgements kept as requested by the FluidR3Mono license file:

FluidR3 (original version) by Frank Wen Copyright © 2000-2002
Mono conversion (FluidR3Mono) by Michael Cowgill Copyright © 2014-17
Temple Blocks instrument provided by Ethan Winer Copyright © 2002
Drumline Percussion provided by Michael Schorsch Copyright © 2016

Fluid was constructed in part from samples found in the public domain that
Frank Wen edited/cleaned/remixed/programmed and largely from recordings of his
own and in conjunction with the people below who helped along the way:
Suren M. Seron, Scott Hanan, Steve Aupperle, Chris Gillman, Alex Taubr,
Chris Prola, Andrew Klenk, Winfried Hubbe, Dylan, Tim, Gort, Uros Katic,
Ethan Winer (http://www.ethanwiner.com)

Synthesis is performed by SpessaSynth (spessasynth_lib and spessasynth_core), licensed under the Apache License 2.0.

SpessaSynth (spessasynth_lib 4.4.0 and spessasynth_core)
Copyright © Spessasus
Licensed under the Apache License, Version 2.0. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0. Distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.

The demo file is an original short piece written for this site and may be used freely. No copyrighted songs or commercial sample libraries are distributed here.