Skip to content

Releases: celtera/libremidi

v5.4.1

05 Jan 02:52

Choose a tag to compare

Essentially the same as v5.4.0, simply with correct version number everywhere

v5.4.0

04 Jan 15:45

Choose a tag to compare

  • ALSA: observation will now slightly be delayed as otherwise udev fields are sometimes not populated yet.
  • Port the Android backend from RtMidi, developed by @YellowLabrador.
  • C++: add initial C++ modules support: import libremidi;. So far compilers other than Clang 20+ crash. Enable with -DLIBREMIDI_LIBRARY_MODE=MODULE. Note that one cannot mix a module-based and a non-module based API. An example is provided in examples/modules.cpp
  • Add a utility libremidi::set_client_name / client_name function to simplify construction of an API object with a custom client name.
  • Many improvements to MIDI 1 <-> MIDI 2 conversion, every MIDI 1 message is supported now.
  • Port information: add as much metadata as we can get from the host API.
  • Port information: remove sorting and comparison as there's no generally correct way to compare two port_information / input_port / output_port objects. Multiple ways of doing this comparison depending on the use case have been provided as examples in <libremidi/port_comparison.hpp>.
  • Port information: added a heuristics-based libremidi::find_closest_port(query, existing_ports) utility function which tries to lookup the most likely candidate for a MIDI port across backends with the lookup information that can be provided.
  • Python: add a pyproject.toml to facilitate integration with the Python ecosystem. Thanks @TheStaticTurtle!
  • Windows MIDI Services: support updated to the RC1 release headers.
  • Windows MIDI Services: add support for the newly introduced COM fast-path to provide maximum performance.

v5.3.1

14 Jul 16:24

Choose a tag to compare

Discord GitHub Sponsors

libremidi is a modern C++ MIDI 1 / MIDI 2 real-time & file I/O library. It supports Windows, macOS, Linux, FreeBSD and WebMIDI.

Release 5.3.1 is a bugfix-only release.

Full Changelog: v5.3.0...v5.3.1

  • The only fixes are for build system issues on some platforms.
  • An example of converting a .mid file to simple drum-machine patterns format (http://github.com/jcelerier/drum-patterns) have been introduced, as a larger example of the file reading / writing API.

v5.3.0

04 Jul 12:45

Choose a tag to compare

Discord GitHub Sponsors

libremidi is a modern C++ MIDI 1 / MIDI 2 real-time & file I/O library. It supports Windows, macOS, Linux, FreeBSD and WebMIDI.

Release 5.3.0 is a bugfix-only release.

Full Changelog: v5.2.0...v5.3.0

  • udev: replace potential nullptrs by empty strings as we cannot construct std::string with a null const char* by @jcelerier in #155
  • cmake: allow using system-installed readerwriterqueue by @alebcay in #157
  • MinGW CI by @jcelerier in #162

New Contributors

v5.1.0

17 Mar 21:39

Choose a tag to compare

Discord GitHub Sponsors

New features

  • PipeWire: implement UMP backend with the PipeWire 1.4 UMP support
  • JACK: implement UMP backend with the PipeWire 1.4 UMP support
  • ALSA: fill what information we can gather from udev to enable identifying the ports

Full Changelog: v5.0.1...v5.1.0

v5.0.0

12 Mar 17:11

Choose a tag to compare

Discord GitHub Sponsors

New features

v4.5.0

03 Mar 02:07

Choose a tag to compare

Discord GitHub Sponsors

New features

Changes

  • MIDI 1 logic refactored across all back-ends to make sure they all behave exactly the same wrt timestamping and filtering.

v4.4.0

11 Feb 21:38

Choose a tag to compare

New features

  • Add Debian (bullseye, bookworm, trixie) to the CI to make sure ALSA UMP and RawMidi support gets tested
  • Fix iOS support and add iOS CI (thanks @fwcd !)
  • Add compatibility with ni-midi2: the libremidi::ump type will convert automatically from / to midi::universal_packet and it is possible to send directly some ni-midi2 data types through libremidi::midi_out
  • Added an example of very basic MIDI-CI interoperation with MIDI2.0Workbench: https://github.com/jcelerier/libremidi/blob/master/examples/midi2_interop.cpp
  • Observer: add a track_any flag to track MIDI ports that are not reported as being hardware or software.
  • UMP: allow send_ump to handle UMP streams, not only single UMP packets.

Bugfixes

  • Fix sysex concatenation on WinMM
  • Various MIDI 2-related fixes across the entire stack
  • Work-in-progress on RawMidi MIDI2 backend - output should work, input not there yet. Testing and reporting issues highly appreciated!
  • Some compatibility bugfixes, better detection of available features in cmake

Other

  • Revamp and cleanup the cmake backends in separate files for clarity.

v4.3.0

07 Feb 18:54

Choose a tag to compare

  • Improvements to timing handling:

    • Added a Custom timestamping mechanism which allows the user to provide a custom callback to run timestamping as close as possible to the event's reception.
    • Added midi_in::absolute_timestamp() to get the origin timestamp for driver-provided ticks as accurately as possible.
      • e.g. in practice this is taking the time just near the ALSA queue creation or WinMM MIDI open.
  • Bugfixes in JACK

  • Many warning fixes - thanks @lilggamegenius for the extensive work!

  • Fix MIDI dump example - thanks @chdiesch!

  • Add SOVERSION to dynamic library