orchetect / MIDIKit

🎹 Modern multi-platform Swift CoreMIDI wrapper with MIDI 2.0 support.
MIT License
219 stars 33 forks source link

MIDI 1.0 MPE / MIDI 2.0 Per-Note Abstractions #118

Open orchetect opened 2 years ago

orchetect commented 2 years ago

MIDI 1.0 MPE / MIDI 2.0 Per-Note Abstractions

M2-104-UM Universal MIDI Packet (UMP) Format and MIDI 2.0 Protocol, page 53:

Using Note Number Rotation, Per-Note Pitch, and Per-Note Management Message for Independent Per-Note Expression

A MIDI 2.0 Protocol Sender can have fully independent control over individual Notes, even applied to simultaneous Notes on the same pitch. MIDI Polyphonic Expression (MPE) on the MIDI 1.0 Protocol uses a Channel Rotation mechanism for this kind of flexible expressive control with up to 16 notes of polyphony. In the MIDI 2.0 Protocol, a Note Number Rotation mechanism can replace the Channel Rotation mechanism for some applications. This improves on MPE by utilizing only a single MIDI Channel while providing polyphony of up to 128 notes.

orchetect commented 1 year ago

MIDI 2.0 Per-Note Events have been implemented in MIDIKit.

The Spec defines ways to use them. Abstractions could be added to aid in this but they would need to be as broadly applicable as possible for a consumer of the library to find any utility in their presence.