This library is designed to assist in writing "MIDI interchanges", which consume and/or produce MIDI messages.
A transforming MIDI router is a type of "interchange" that accepts MIDI messages from an input, "transforms" the data based on a series of rules, and the outputs the results. This type of real time transforming router can do things like:
- Output MIDI messages to play chords instead of individual input notes.
- Remap inputs, for example to change the tuning of an input device.
- Repurpose input controls, for example by making inputs that send control codes result in notes being played.
- Split a single input among multiple MIDI channels.
Many things like this can be accomplished only by writing new rules and configuration options. This is a by-product of the two underlying libraries used, namely Infusion and Flocking. These libraries make it possible create complex "components" whose behaviour can change dramatically simply based on the configuration options. New instruments are often little more than a thin skin of key changes on top of an existing component.
Devices like the Novation Launchpad series, Ableton Push series, and Keith McMillan Instruments QuNeo have UI elements (lights) that change based on received MIDI messages. This package provides a "UI router", which is another type of "interchange", this time between desired UI updates and MIDI outputs. Like the Transforming MIDI router, this type of router uses transformation rules to translate a desired UI update into the appropriate MIDI messages. By writing alternate rules, a wide range of devices can be easily modeled. For more information, see the ui router documentation.
In addition to the above, this package provides onscreen equivalents of select devices, that can be used to operate an interface with a mouse and keyboard, either as a sole means of input, or in combination with a connected device. For more information, see the onscreen device analogue documentation.
This package includes a handful of demonstrations of various routers. To use them:
- Check out this package.
- Install its dependencies (i.e. run
npm install
). - Open the file
index.html
in this directory in a browser that supports the WebMIDI API (Opera and Chrome at time of writing).