Webmidi Versions Save

Tame the Web MIDI API. Send and receive MIDI messages with ease. Control instruments with user-friendly functions (playNote, sendPitchBend, etc.). React to MIDI input with simple event listeners (noteon, pitchbend, controlchange, etc.).

v3.1.9

3 weeks ago
  • Fix WebMidi.supported not necessarily returning boolean (#417)
  • Various module updates for security fixes

v3.1.8

5 months ago

This is a maintenance release with a few fixes and clarifications.

  • Fix raw values not being properly sent in Output.channelAfterTouch() (#401) (19faf782b)
  • Clarify documentation for Output.clear() method (43b6285e1)
  • Fix documentation for sendAllNotesOff() (dd91df456)
  • Move to @julusian/midi module for testing (a9f4692e4)

v3.1.7

5 months ago

This version is a minor release that fixes an issue that appeared in Node.js v21+

v3.1.6

11 months ago

Fixes minor bug when calling WebMidi.disable() (issue #361)

v3.1.5

1 year ago
  • The playNote() method nows correctly sends noteoff messages when the notes are specified as an array. Thanks to @tobyhede for the fix!

v3.1.4

1 year ago

OutputChannel.playNote() now properly sends a note off when the duration is specified via the Note object (issue #337).

v3.1.3

1 year ago

This is a minor release that fixes a type issue with the new Utilities.getCcNumberByName() method. Thanks to @tobyhede for submitting PR #335.

v3.1.2

1 year ago
  • Add position (MSB/LSB) property to control change event payload (697b2c288)

v3.1.1

1 year ago
  • Add user-friendly description to control change event payload (fa29caf5e)

v3.1.0

1 year ago

This version updates the control change message infrastructure. It is now possible to listen to specific control change messages by using the form controlchange-volumecoarse.

There is now a Enumerations.CONTROL_CHANGE_MESSAGES array that contains more information than before about control change messages. Here's what the array looks like:

[
  {
    number: 0,
    name: "bankselectcoarse",
    description: "Bank Select (Coarse)",
    position: "msb"
  },
  {
    number: 1,
    name: "modulationwheelcoarse",
    description: "Modulation Wheel (Coarse)",
    position: "msb"
  },
  // etc.
]

Note that if your code references the Enumerations.MIDI_CONTROL_CHANGE_MESSAGES enum, you will get a deprecation warning in the console, but it will continue to work until version 4. From now on, you should use the Enumerations.CONTROL_CHANGE_MESSAGES array.

In some edge cases, it is possible that this version will demand an update to your code. Here are the potential problem areas:

  • If you are using the Utilities.getCcNameByNumber() method you may get different controller names than before for the following controllers: 16, 17, 18, 19, 39, 64, 66, 69, 72, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 88, 91, 92, 93, 94, 95, 96, 97.

  • Controller names have been updated to reflect the current state of the MIDI specification. If you are listening to the general rpn or nrpn events, the subtype property of the event may have changed.

  • Some control change messages (98, 99, 100 and 101) were incorrectly identified (see issue #325). They are now properly labeled as:

    • 98: nonregisteredparameterfine
    • 99: nonregisteredparametercoarse
    • 100: registeredparameterfine
    • 101: registeredparametercoarse