Skip to main content

A modern C++ MIDI 1 / MIDI 2 real-time & file I/O library. Supports Windows, macOS, Linux and WebMIDI.

Project description

libremidi

Build status

Packaging status

libremidi is a cross-platform C++20 library for real-time and MIDI file input and output.

This is a fork / rewrite based on two libraries:

Additionnally, for MIDI 2 parsing support we use cmidi2!

Read the documentation here.

Citation

If you use this work as part of academic research, please kindly cite the paper:

@inproceedings{celerier2024libremidi,
  title={libremidi: a cross-platform library for real-time MIDI 1 and 2},
  author={Celerier, Jean-Micha{\"e}l},
  booktitle={Proceedings of the Sound and Music Computing Conference (SMC)},
  year={2024},
  address={Porto, Portugal}
}

Changelog

Since v5.4

  • 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.

Since v5.3

  • Minor bugfixes
  • More MinGW CI
  • Add an example of converting MIDI files to .pat format
  • MSVC ARM64 CI

Since v5.2

  • Minor bugfixes
  • Support detecting presence of ALSA sequencer at runtime
  • Add conversion functions for MIDI 1 <-> 2

Since v5.1

  • Report USB device identifiers with ALSA and udev
  • PipeWire and JACK UMP support (requires PipeWire v1.4+)

Since v5

  • Use stdx::error for error reporting until C++26 and std::error are widely available :-)
  • Hunt exceptions down
  • MIDI 2 support on Windows with the Windows MIDI Services.
  • WinUWP support on MinGW / MSYS2.
  • Getters for USB location, etc. in libremidi::port_information.
  • Reverse-engineered implementation of Mackie Control Universal & Logic Control protocols. Tested with TouchMCU and a BCF2000.
  • C API for bindings to other languages (libremidi-c.h).
  • Python binding.
  • Haskell binding courtesy of @ejconlon λ!
  • Java binding courtesy of @atsushieno!
  • Support for getting raw, unfiltered MIDI data (e.g. no SYSEX recombination logic).
  • Computer Keyboard backend to easily map scancodes to keyboard-like MIDI maps ⌨.
  • Network backend to send MIDI 1 and UMP packets over OSC 🛜.
  • libremidi finally supports MIDI 2 on all desktop platforms 🎉!

Since v4.5

  • Input logic refactored across all backends.
    • e.g. previously not backends had the same rules wrt timestamping, sysexes, etc. Now there is a single MIDI state machine which processes this.
  • PipeWire support.
  • Many bugfixes across the stack.

Since v4.4

  • iOS support restored (thanks @fwcd)
  • CI work: added Debian Bullseye, Bookworm, Trixie and make sure UMP code is being built.
  • 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.

Since v4.3

  • 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

Since v4.2

  • More robust MIDI 2.0 support.
    • On macOS through CoreMIDI (input / output, requires macOS 11+).
    • On Linux through ALSA sequencer API (input / output, requires kernel 6.5+ and latest libasound).
    • The API can be used through MIDI 1 or MIDI 2 affordances, e. g. one can send UMP packets to a MIDI 1 API, they will get converted automatically.
    • More backends to come, in particular with the new Windows MIDI Services started here!
    • Sysex handling on MIDI 2.0 is the responsibility of the user of the library, which simplifies the design immensely and allows the library to be used in stricter real-time contexts (as an UMP message has a fixed size, unlike MIDI 1 sysex which required potentially unbounded dynamic allocations with the previous design).
    • See midi_echo.cpp for a complete example.
  • Linux: libasound and udev are now entirely loaded at run-time through dlopen. This is necessary for making apps that will run on older Linux versions which do not have the ALSA UMP APIs yet. Note that to make an app which supports MIDI 2 on recent Linuxes and still runs on older ones, you will need to use the latest ALSA library headers as part of your build on an older distribution, by building alsa-lib yourself (as the old distributions with an old glibc that you want to build against to make compatible software of course also ship an old libasound which won't have the UMP API...).

Since v4

  • Experimental MIDI 2.0 support.
  • A neat configuration system which enables to pass options to the underlying backends.
  • Possibility to share the contexts across inputs and outputs to avoid creating multiple clients in e.g. JACK.
  • Hotplug support for all the backends!
  • Reworked port opening API which now uses handles instead of port indices to increase robustness in the face of disconnection / reconnection of MIDI devices.
  • Integer timestamps everywhere, and in nanoseconds. Additionnally, it is now possible to choose different timestamping methods (e.g. relative, absolute monotonic clock...).
  • Experimental API to allow to poll manually in ALSA (Sequencer and Raw), in order to give more control to the user and enable processing events on any kind of Linux event-loop.
  • Increase the checks done by the MIDI parser.
  • Internally it's pretty much a complete rewrite. Standard threading primitives are now used, as well as modern Linux facilities for polling control (eventfd, timerfd). Most of the code has been refactored.
  • Ability to set a fixed message size for zero-allocation scenarios, with -DLIBREMIDI_SLIM_MESSAGE=<NBytes> (in CMake or directly to the compiler)

Since v3

  • Allow to pass span when available (C++20) or (uint8_t* bytes, std::size_t size) pairs whenever possible to reduce copying.

Since v1

  • The library can be used header-only, as explained in the docs
  • Callbacks are passed by std::function and generally simplified.
  • Ability to use boost::small_vector to pass midi bytes instead of std::vector to reduce allocations.
  • Less indirections, virtuals and memory allocations.
  • Simplify usage of some functions, use C++ return style everywhere.
  • Use of standard C++ snake_case.
  • Simplification of exceptions.
  • Passes clean through clang-tidy, clang analyzer, GCC -Wall -Wextra, ASAN, UBSAN etc etc.
  • Support chunking of output data (only supported on raw ALSA backend so far).

New & improved backends

  • JACK support on Windows.
  • JACK support through weakjack to allow runtime loading of JACK.
  • UWP MIDI support on Windows
  • Emscripten support to run on a web browser with WebMIDI.
  • Raw ALSA support in addition to the existing ALSA sequencer support.

Roadmap

  • Migrate to std::expected instead of exceptions for error handling.
  • Finish MIDI 2 implementations, provide helpers, etc.
  • More tests and compliance checks
  • Work even more towards this library being a zero-cost abstraction on top of native MIDI APIs
  • Rethink some design issues with the original RtMidi, for instance the way port numbers work is not reliable
  • Refactor duplicated code across backends

They use this library

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylibremidi-5.4.3.tar.gz (15.7 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pylibremidi-5.4.3-cp314-cp314-win_arm64.whl (601.2 kB view details)

Uploaded CPython 3.14Windows ARM64

pylibremidi-5.4.3-cp314-cp314-win_amd64.whl (649.8 kB view details)

Uploaded CPython 3.14Windows x86-64

pylibremidi-5.4.3-cp313-cp313-win_arm64.whl (592.1 kB view details)

Uploaded CPython 3.13Windows ARM64

pylibremidi-5.4.3-cp313-cp313-win_amd64.whl (637.9 kB view details)

Uploaded CPython 3.13Windows x86-64

pylibremidi-5.4.3-cp312-cp312-win_arm64.whl (592.2 kB view details)

Uploaded CPython 3.12Windows ARM64

pylibremidi-5.4.3-cp312-cp312-win_amd64.whl (638.0 kB view details)

Uploaded CPython 3.12Windows x86-64

pylibremidi-5.4.3-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibremidi-5.4.3-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.12+manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

pylibremidi-5.4.3-cp312-abi3-macosx_11_0_arm64.whl (432.8 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

pylibremidi-5.4.3-cp312-abi3-macosx_10_14_x86_64.whl (442.0 kB view details)

Uploaded CPython 3.12+macOS 10.14+ x86-64

pylibremidi-5.4.3-cp311-cp311-win_arm64.whl (592.8 kB view details)

Uploaded CPython 3.11Windows ARM64

pylibremidi-5.4.3-cp311-cp311-win_amd64.whl (638.3 kB view details)

Uploaded CPython 3.11Windows x86-64

pylibremidi-5.4.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibremidi-5.4.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

pylibremidi-5.4.3-cp311-cp311-macosx_11_0_arm64.whl (433.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pylibremidi-5.4.3-cp311-cp311-macosx_10_14_x86_64.whl (441.5 kB view details)

Uploaded CPython 3.11macOS 10.14+ x86-64

pylibremidi-5.4.3-cp310-cp310-win_arm64.whl (592.7 kB view details)

Uploaded CPython 3.10Windows ARM64

pylibremidi-5.4.3-cp310-cp310-win_amd64.whl (638.1 kB view details)

Uploaded CPython 3.10Windows x86-64

pylibremidi-5.4.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

pylibremidi-5.4.3-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

pylibremidi-5.4.3-cp310-cp310-macosx_11_0_arm64.whl (433.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pylibremidi-5.4.3-cp310-cp310-macosx_10_14_x86_64.whl (441.1 kB view details)

Uploaded CPython 3.10macOS 10.14+ x86-64

File details

Details for the file pylibremidi-5.4.3.tar.gz.

File metadata

  • Download URL: pylibremidi-5.4.3.tar.gz
  • Upload date:
  • Size: 15.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibremidi-5.4.3.tar.gz
Algorithm Hash digest
SHA256 30a35fc38f46477263a4ee94966cdc2fd47bf74ee2cb17784f8cb99692977617
MD5 d30552c039bf37d4f2d3043ee901f9d7
BLAKE2b-256 2ed63855709c3d44f5aed41db68561fdd26aa89af15ed333429cfb8b0ab20b53

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3.tar.gz:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp314-cp314-win_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 f6745fe76a7d7e21b31dc5e49fc638c85a7a0c0020391b9c4c5d5528ebddf9d4
MD5 759bf4d527e9c2ae73ab5c65cfd00736
BLAKE2b-256 e9e73886163e9996da5778d73bdec2b7b8a32895fa17d46e66fab84604a9f8c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp314-cp314-win_arm64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pylibremidi-5.4.3-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 649.8 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibremidi-5.4.3-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 f36817e3c70a2c6e52632ebf76b77473b413c272f23aee928760433d67813206
MD5 30e59a2ac8a9e5769131576141f799ff
BLAKE2b-256 e7d2dc9466f9f7f9ab991385f904d0b28867b37afb047a71a49dd63aa1952e94

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp314-cp314-win_amd64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp313-cp313-win_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 97c01708c95a5f02fcbe54d8f372cd263d8f3a9b7f0b5ca4ff3e32418d26513c
MD5 26601888f5b4af0f552a04494f91b6cf
BLAKE2b-256 ebb7746f28f4c7b03c2bb5af99c1c6e221c689dce06d882a0356ae2d045baf74

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp313-cp313-win_arm64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pylibremidi-5.4.3-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 637.9 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibremidi-5.4.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 9d7f0f184dd7cfa907da5cfedf117df22da977548c6afffe0f9bec0baa7df6eb
MD5 a3e742f0fe0529bd3a91f3eca5da06e2
BLAKE2b-256 30e889829fca585d70db19189b76d952d94b4b9a71d562178472ec67e8b2c254

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp313-cp313-win_amd64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 690479dbbabc771cb7dfe49290acd2e7313694b215ae2757aee7ff34327e7f9b
MD5 2de56a22583377e905539d321d8aeae2
BLAKE2b-256 ef2a646a315bf4467cb0a5ce84a14e5c37bade99b8f3f9cf02a366430b64188a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp312-cp312-win_arm64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pylibremidi-5.4.3-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 638.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibremidi-5.4.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 beb20823adbefc678f360060a0f8e87ee5ddaa9aedbd32f7e1b61c4a8d7e5f75
MD5 fa87c1c4458f601a61aaaf3bc17ca650
BLAKE2b-256 96fc3a4908b239a84a17e2c438daf0fc5339333d4eb8ce9b46f27182b7f96a83

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp312-cp312-win_amd64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c55737457bb2ebb9f80b25464be22866103b2b0c092cc07915dcd86d7b24cbe9
MD5 168f952db5fca621d3bd404712ad2790
BLAKE2b-256 9bda3d5dd5d4c6a9ff3d9b81b7a2af8623e8a9ee32c3f642af69bf35ae1dc74b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3a63e84d789188302f5903e78f58aa45750d3e7efd8594add52be29a1f2706e6
MD5 c54e077b949ebef0a05eaf0da2d4619b
BLAKE2b-256 d9946527c0ab36599064800cbafc2acf147f515ea30daae9dd33666c5e89b08d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 38089ac19dfaa0c16dcd4aa83eb206813a28bf9e813ffb5b06817527d26b693d
MD5 b5f49cd840f727d29bb93ec5d6fddc3f
BLAKE2b-256 a74650849da21bee4fac014359c72bd16f4ed2c01b3205c61e8779c9e7a5fa1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp312-abi3-macosx_11_0_arm64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp312-abi3-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp312-abi3-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 63dde1aec8f5ce2bf6c765ecd23e788cc2d60522db77c0d56a568c6e37d411fb
MD5 5221c16daf485395525e298ce6b468e2
BLAKE2b-256 a9a17ec8e806752345d737e84bda14905d04ac9e0327b8783868d9d3b44446c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp312-abi3-macosx_10_14_x86_64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp311-cp311-win_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 5d6a659cf7bde02913819075b306764c4b57614a7ac26192781ec1ff50a1d872
MD5 6179cae092e6c526d0ad3f342cb6bf59
BLAKE2b-256 c676317da9553af0246384491265594b5b4bd45f4b71f2ff6baec5e7864838bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp311-cp311-win_arm64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pylibremidi-5.4.3-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 638.3 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibremidi-5.4.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 fc8ad3a2d4bc10d90ccb6a7c90d69dc737ce38545b75e8c84cecb8de2bafe71d
MD5 8286af9e9a781510eeecfbd35b09619e
BLAKE2b-256 6ac604d3c89b8991f14208c6d7fbe1c85e24b340defa320358a4fa4c71d2f281

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp311-cp311-win_amd64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f32adb3b6e0a973b13c1b381bd40cd1a668e74b696e608fe50c493625e454b2e
MD5 20a448ba7a523d6d7eec830d45ae5c67
BLAKE2b-256 4b5227b052fa5aceda1014f9e07d43fbf428a0174614af363eb1e4a4bf50870e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 876c901d5894e3b630d304676bf261531a065deba110c33be08b48ee817fe497
MD5 74fb458e185e844a7d457bd89a3045f7
BLAKE2b-256 e649be27bf330dc7939c96fd69549243feafde65d07d7fcbb4bb0ca71306f5a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 538ad87a89246915777310d5d027e0b0952f0e4e7a1e5e33163e8b03b389b30e
MD5 36bcefd19b5fc54a5c57f52c5703f7ad
BLAKE2b-256 9a55ee73036b717fb257fde161e50af6fec1903fb8ae0607ee29c5cb3477c856

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp311-cp311-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp311-cp311-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 8586474a2752175ff9967b2ca313053f18d82bbaca392138caef8a07554dd6f6
MD5 1a728d380b8b35ee7ba84ed6fd13fa83
BLAKE2b-256 33705ab7e6a6b7c6b34a442ab8b7db46c3a8ae679bb28456d3b28264840c54a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp311-cp311-macosx_10_14_x86_64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp310-cp310-win_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 1c9355c114f00b5e611ef51ce28ac84de869b992a4815ec3b61e307dd930eff3
MD5 67fa57212cebe9dc8807dff0c98f60ec
BLAKE2b-256 8a41a7a258d74b0ee2f4bd1dc27f59ee8ddcffb4d9828b14e8c38849c2e8a5e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp310-cp310-win_arm64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pylibremidi-5.4.3-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 638.1 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pylibremidi-5.4.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5054539bf3e92e545bac8ae081b11ac152d8e81b144541d0dd29378a65faa103
MD5 0cbf7335fc52bb21960b5b9b85b56f70
BLAKE2b-256 1c762c7ee988dac8a638d46ec6dc6945d93b64924e753c8b0f66491736e214b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp310-cp310-win_amd64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 715bf51966d895b83d882f095aee0cbfa2d0d8866d546eaa166560751297514c
MD5 33863eeb18e0583481969f6f8690e12c
BLAKE2b-256 a526fe7a79ef5af62d3b4bbbb4dd77a63d365fe9d07c80b5077f778363b7afdd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6ff2c7c5352b3b36ffe620fede8851b2c84f4841bf946532f065a3dc349731d5
MD5 2ce0222f7300f32b3d4243cd99ff0186
BLAKE2b-256 c2dbb10132ee9b2b096caa5f6650b6d8e10a8feaf43185f74f1953e99833be89

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e09dff37b9891e786a29fda6adb11a6384c108539b64634ec3c735e6cd5cc2d9
MD5 cf824f735717ec11c8bedc0f5d168d91
BLAKE2b-256 d8ab76e5415ebb437de942d7d80efe94f4762913a8235db685708e7e466523be

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pylibremidi-5.4.3-cp310-cp310-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.3-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 848acfda301105907143253194c5f3708f08749b95d93f00306abfec92e98809
MD5 49a753d086ae8f7c960414285bbb604f
BLAKE2b-256 9c1530568898bbe76c8d3c990ee10a5173cd221bdeaa0537c6fd50c838b4c032

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.3-cp310-cp310-macosx_10_14_x86_64.whl:

Publisher: publish_pypi.yml on celtera/libremidi

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page