This is a small header-only library to process MIDI 2.0 UMP (Universal MIDI Packet) and MIDI-CI system exclusive packets.
MIDI 2.0 is designed to be allocation free by defining every message in 32bit, 64bit, or 128bit packet, including sysex messages. This library populates those packets simply in integer values. It should be usable within realtime audio applications.
v0.6 supports June 2023 Updates to the MIDI 2.0 specifications. As of v0.6 supports June 2023 Updates to the MIDI 2.0 specifications, but turned out that we did not fully update Type 0 Utility messages. They became "groupless" - as a result, those functions took extraneous group field that affected UMP bytes output, unless they were to group 0. This issue is fixed at v0.9 release of cmidi2 API, but that means the API is not backward compatible. Please update the use of those functions and get comformant UMP outputs.
As of v0.6, every function is static inline (if you are familiar with LV2 you would notice that this implementation style is quite simiar to it, namely LV2 Atom).
No commented documentation yet, but API reference is generated by doxygen and published every time we tag a release: https://atsushieno.github.io/cmidi2/
At this state I keep making breaking changes in the API. If you use it then you should not expect any API/ABI stability at this state.
atsushieno/aap-core, atsushieno/aap-lv2, and atsushieno/aap-juce make use of this library.
libremidi internally uses cmidi2 too.
cmidi2 is distributed under the MIT License.