Skip to main content

Roadmap for version 3.x

Enhancements Still Remaining

  • Publish TypeScript definitions to DefinitelyTyped when v3 is stable (they are currently available in the dist directory)

  • Adjust InputChannel.EVENTS to include all controlchange-xxx events

  • Add inputconnected, inputdisconnected, outputconnected and outputdisconnected events.

  • There is something in InputChannel.test.js that prevents the tests from running correctly in Output.test.js

  • A combined CC0 / CC32 / ProgChange method to call program changes with bank selection in a single method

  • The callback for WebMidi.addListener() and Input.addListener() should probably have both a target and a port property when the target is not the same as the port. Perhaps both should be kept everywhere for consistency.

Enhancement Already Baked In

  • Added triggering of portschanged event in WebMidi object (v3.0.2).

  • Add filter option to allow listening to only a subset of events (e.g. specific controller change or NRPN messages, discussed in PR #88)

  • Add a way to forward inbound messages on an Input object to an Output (to behave like a physical MIDI THRU port). This could be expanded to a more elaborate filtering and routing system (example)

  • Add mechanism to Generate TypeScript type definitions (.d.ts files)

  • Add getNoteState() method to InputChannel so it it is possible to check if a note is currently playing or not. This allows to check for chords when a noteon message is received.

  • Properly handle when a laptop's lid is closed then reopened (Issue #140)

  • As suggested by users, allow sending MSB and LSB at once when sending control change messages (Issue #57). This would have to be done for CC messages 0-31 which all have a matching LSB.

  • Rewrite the NRPN parsing mechanism in InputChannel. I do not think it works correctly. Here are starting points:

  • Allow sendSysex() to accept Uint8Array (Issue #124, forum thread) or perhaps to accept a Message object that can be built from a Uint8Array (this needs to be carefully examined)

  • Add a Message object

  • Add the ability to set default values for attack velocity, release velocity, etc. ( see forum discussion)

  • Various utility methods should probably be stashed in a Utils class (e.g. getCcNameByNumber(), etc.)

  • Add convenience method to convert float and 7 bit: to7bit() and toNormalized()

  • Add the ability to individually transpose Input, Output, InputChannel and OutputChannel.

  • Add InputChannel and OutputChannel objects (Issue #20)

  • Use ES6+ modern syntax and add default export so library can be imported with import (Issues #49 and #89)

  • Move to Rollup for packaging the library (Issue #61)

  • Drop support for Bower (Issue #60)

  • Extend a proper event library to allow for modern event support (probably djipevents).

  • Implement port statechange events (connected and disconnected)

  • Make WebMidi a singleton (see example here)

  • WebMidi should dispatch 'enabled' and 'disabled' event

  • Check that disable() really does disable everything

  • Add methods for channel mode messages

  • Implement clear() method (Issue #52) [this will automatically work when browsers add support for it but will show a warning in the console until then).

  • Added the new (software) parameter for requestMIDIAccess [this will automatically work when browsers add support for it).

  • Emit events for all channel mode messages

  • Add statusByte and dataBytes properties to the event triggered when receiving messages (#109)

  • Deprecate the ability to send on all channels (default behaviour). This clogs up the MIDI stream and I do not really see a good use case for it.

  • Create a Note object with duration and velocity property

  • Add official support for Node.js (Issue #15)

  • Allow specifying different note durations and velocities in playNote() when using arrays (Issue #75 and #90). [this is now possible with Note objects].

  • Add editorconfig file

  • Complete test suite for all objects

  • Add sendRaw() method accepting either list of integers or Uint8Array.

  • Allow send() to accept Uint8Array