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
| Capability | Chrome · Edge · Firefox | Safari (macOS, iOS, iPadOS) |
|---|---|---|
| Open and inspect a MIDI file, piano roll | Yes | Yes |
| Play the file (Web Audio + AudioWorklet) | Yes | Yes, 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 yet | Not 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.