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.2.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.2-cp312-cp312-win_arm64.whl (590.3 kB view details)

Uploaded CPython 3.12Windows ARM64

pylibremidi-5.4.2-cp312-cp312-win_amd64.whl (636.8 kB view details)

Uploaded CPython 3.12Windows x86-64

pylibremidi-5.4.2-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.2-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.2-cp312-abi3-macosx_11_0_arm64.whl (431.8 kB view details)

Uploaded CPython 3.12+macOS 11.0+ ARM64

pylibremidi-5.4.2-cp312-abi3-macosx_10_14_x86_64.whl (441.0 kB view details)

Uploaded CPython 3.12+macOS 10.14+ x86-64

pylibremidi-5.4.2-cp311-cp311-win_arm64.whl (591.1 kB view details)

Uploaded CPython 3.11Windows ARM64

pylibremidi-5.4.2-cp311-cp311-win_amd64.whl (637.1 kB view details)

Uploaded CPython 3.11Windows x86-64

pylibremidi-5.4.2-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.2-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.2-cp311-cp311-macosx_11_0_arm64.whl (432.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pylibremidi-5.4.2-cp311-cp311-macosx_10_14_x86_64.whl (440.6 kB view details)

Uploaded CPython 3.11macOS 10.14+ x86-64

pylibremidi-5.4.2-cp310-cp310-win_arm64.whl (591.0 kB view details)

Uploaded CPython 3.10Windows ARM64

pylibremidi-5.4.2-cp310-cp310-win_amd64.whl (636.8 kB view details)

Uploaded CPython 3.10Windows x86-64

pylibremidi-5.4.2-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.2-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.2-cp310-cp310-macosx_11_0_arm64.whl (432.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

pylibremidi-5.4.2-cp310-cp310-macosx_10_14_x86_64.whl (440.1 kB view details)

Uploaded CPython 3.10macOS 10.14+ x86-64

File details

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

File metadata

  • Download URL: pylibremidi-5.4.2.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.2.tar.gz
Algorithm Hash digest
SHA256 5fc88d756bc0df9b31510e2d2511f980733c1f100200e6546ea42c5ad8ecf6a9
MD5 4e2a52f50853601efbc32bb76a78ade3
BLAKE2b-256 d8ef43080929bd50cc31ccb089cb3258190ca098488925e2e34d27b65ddce224

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2.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.2-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 bf08744efe2abe72231390d6a397efa98c586b4967ec18d231162d9c46262c16
MD5 affae9fba02cb108ea8ddb6f63e64d92
BLAKE2b-256 93c8d8862d6f405a706d6a76e678aa56e571241eeb57c80de8ba1b95e0cf59ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pylibremidi-5.4.2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 636.8 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.2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b43951962ad7774dddf33f16826512f193f4e4695393de622ed9d80767f8a9a0
MD5 b0f7f256f48cd053e988c1f1fed20d64
BLAKE2b-256 8effed52013b67666790bae8176d08c5446ff445ef3c4cce842aa16fc768fb71

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 511f3c2059ab0a684697b1badba38e854019178f4894742fae758e678e2700f0
MD5 1916765002d2af866b5ccd3994ffa6c1
BLAKE2b-256 eee63ce4df2f92cc51b6d95290a8ad7d80dfda63db423b6fa53fe5f724d5ae60

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 dcacc9ec4947462d0f63da15a4ae640cfd1f53ad41f79298f2de6bded0e18da7
MD5 9f29127624643c356bbfb3fc19ecad92
BLAKE2b-256 d79ea7795aac47e21fadab481ddb936d4175119894346efb095636d074970647

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 be02efe5be71fc89152fe05e0054c388655ef405f0f09d614d6990b16355738a
MD5 bdb3b9de9a0a3f59f703c5aac69e0f73
BLAKE2b-256 f8a68ea1bc9ac483cd55e60250772ea52ba37450ec6d995b7630baab64d337c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp312-abi3-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp312-abi3-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 0b73b942b40e2cf8b4f6a611edfe4e9b9f59d7686226662a1c96c047737ea424
MD5 b5617422e0ec32f27d770b9a5343d27f
BLAKE2b-256 31392676eac368a047700adb8163260ecf974b0a882aa0312affaf3f928977c2

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp311-cp311-win_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 fd78b512061d388e596a8a7164630c393e6b25f508247d8f7fc1ad215651428b
MD5 ee01280709043610c8d88addb379c184
BLAKE2b-256 25c2931fd176b8f5362dcbb507d1c4fa8b9f0bcf8e8b22a67cff0dd2983c4155

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pylibremidi-5.4.2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 637.1 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.2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 644432a9e5828f36988ce671617ef840c5453046605ea37d2f5eef271e02104d
MD5 8581e474fd356f9f0a7c5479d7b73750
BLAKE2b-256 2962357b6f780f226fd938813111f5b163b9582f7bd57910d15d91c9c4bb1bb1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 da5dae1b4c16e0feaf31a4164dde85f043cd7b7521f31381fdd17ce3b9d9d681
MD5 9c4059e223a5819acf4f3fa9f228f958
BLAKE2b-256 220c2d0857f248c14a769bc51895ef0d5f1a0525f1daf6de7d16006161b76977

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1466017382fe6ad74612fcf00acbdc72c7ee19acb2356041fdb4e0cbd6421711
MD5 f929a60f88d25040785d582319a24267
BLAKE2b-256 f636f00455869928120f61da6023aa9d215de721f6388e3f88c8b059739c940c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 faa00e300cd2a6e6a80cca340a6fb1345dcee9a43d36b667de90434fe8100d9b
MD5 ad9fcc8ad565bca78cc20b49b93f4e5d
BLAKE2b-256 b93f486e584a27bc6e88f96db5a59a63700d59abfda913de081084c8daf0d78e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp311-cp311-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp311-cp311-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 87e683cfeb935637cc02d74531e4b786e5e5bb2d357570bbfd4c0fbbdc716b85
MD5 d74f651e376e59f3ba4fe0ed370ad6eb
BLAKE2b-256 8614a19f1886496b55a820281b53c2bf32a7add7a1e8582429ede497cdb91c23

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp310-cp310-win_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 5eb5c81d95851b50375f66d4c5b74f04ac8ba1950d50b0cc09fd0d31aa05990e
MD5 f5df584faf9d22af58308b152e669326
BLAKE2b-256 65f334782603a737c6b69b94cdc2d336adf7f76cdeaaa7861818d439de011adf

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: pylibremidi-5.4.2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 636.8 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.2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9e23f090dfb030d0dfeefa59d9b61271451e63902af35a373d816d53b083549c
MD5 3666f4e731d92dfcc1ffeff515b8641d
BLAKE2b-256 48fed0f809eed6477fd7ba2d3731173314669176355eddaac637aa996e6035fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 83ef6553e509753fd1e4967a0998f49d252455cd13400cd7156b3731dc0fb267
MD5 a94a4e833042d55ab29ef2df42b01cc3
BLAKE2b-256 4ba71413c7c13251aad408a1a3d666655224da3fa55c1d3d13dc06f1289cf955

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 99248ae962bb4ac960a019546811a5231501903e9e8597417ba04f7e627edda8
MD5 e0b8673654f1b00319547fc179698d0e
BLAKE2b-256 0c5d9902e1255d52809c2063e57b3ce70829b3785110fd578b48f82d6a4d527c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 892d57c03cd84ac1185c124f3e70d8cd704e41a11f6ae260cea919b0c834e9ce
MD5 00e44f547c7af9a15a453387016abaa8
BLAKE2b-256 961001e1e3b4e4701c9a2620530a8c5de9c857b0e5ec19abbda67018811a1b42

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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.2-cp310-cp310-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pylibremidi-5.4.2-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 04606605091673dadad07a1f5e70887a1c60cef3c6a4d1474347097d9882a381
MD5 922136a8e51b15a3984d5159c1200f45
BLAKE2b-256 6eb8bbc14760ebb82ab4ad48c8b6a6ffa32496d398e3404988ec4d66b4ab69c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pylibremidi-5.4.2-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