UNPKG

midi-player-js

Version:

Midi parser & player engine for browser or Node. Works well with single or multitrack MIDI files.

62 lines (46 loc) 2.83 kB
# ♬ MidiPlayerJS [![npm version](https://badge.fury.io/js/midi-player-js.svg)](https://badge.fury.io/js/midi-player-js) [![CI](https://github.com/grimmdude/MidiPlayerJS/actions/workflows/node.js.yml/badge.svg)](https://github.com/grimmdude/MidiPlayerJS/actions/workflows/node.js.yml) MidiPlayerJS is a JavaScript library which reads standard MIDI files and emits JSON events in real time. This player does not generate any audio, but by attaching a handler to the event emitter you can trigger any code you like which could play audio, control visualizations, feed into a MIDI interface, etc. ## Demos * [Neopixel Music](https://github.com/robertvorthman/neopixel-music) by robertvorthman @robertvorthman * [Autocomposer](https://github.com/rjsalvadorr/autocomposer-js) by RJ Salvador @rjsalvadorr * [Simple Browser Player](http://grimmdude.com/MidiPlayerJS/) by Garrett Grimm @grimmdude * [Orchestra](https://lexcast.github.io/orchestra/) by Daniel Alejandro Cast @lexcast ## Getting Started Using MidiPlayerJS is pretty simple. Create a new player by instantiating `MidiPlayer.Player` with an event handler to be called for every MIDI event. Then you can load and play a MIDI file. ```js import MidiPlayer from 'midi-player-js'; // Initialize player and register event handler const Player = new MidiPlayer.Player(function(event) { console.log(event); }); // Load a MIDI file Player.loadFile('./test.mid'); Player.play(); ``` ## Player Events There are a handful of events on the `Player` object which you can subscribe to using the `Player.on()` method. Some events pass data as the first argument of the callback as described below: ```js Player.on('fileLoaded', function() { // Do something when file is loaded }); Player.on('playing', function(currentTick) { // Do something while player is playing // (this is repeatedly triggered within the play loop) }); Player.on('midiEvent', function(event) { // Do something when a MIDI event is fired. // (this is the same as passing a function to MidiPlayer.Player() when instantiating. }); Player.on('endOfFile', function() { // Do something when end of the file has been reached. }); ``` Note that because of a common practice called "running status" many MIDI files may use `Note on` events with `0` velocity in place of `Note off` events. ## See Also Need to generate MIDI files programmatically? Check out [MidiWriterJS](https://github.com/grimmdude/MidiWriterJS) — a JavaScript library for creating expressive multi-track MIDI files. Together they form a complete MIDI toolkit: - **MidiPlayerJS** — parse and play MIDI files with real-time event callbacks - **MidiWriterJS** — generate MIDI files programmatically ## Full API Documentation [http://grimmdude.com/MidiPlayerJS/docs/](http://grimmdude.com/MidiPlayerJS/docs/)