Cross-platform, realtime MIDI processing in Rust.
midir is inspired by RtMidi and supports the same features*, including virtual ports (except on Windows) and full SysEx support – but with a rust-y API!
* With the exception of message queues, but these can be implemented on top of callbacks using e.g. Rust's channels.
midir currently supports the following platforms/backends:
- ALSA (Linux)
- WinMM (Windows)
- CoreMIDI (macOS, iOS)
- WinRT (Windows 8+), enable the
winrtfeature - Jack (Linux, macOS), enable the
jackfeature - Web MIDI (Chrome, Opera, perhaps others browsers)
- Android (API 29+, NDK AMidi + JNI)
A higher-level API for parsing and assembling MIDI messages might be added in the future.
API docs can be found at docs.rs. You can find some examples in the examples directory. Or simply run cargo run --example test_play after cloning this repository.
- Requires Android API 29+ and the Android NDK (r20b+).
- Build (example, to remove before merging):
- Install:
cargo install cargo-ndk - Targets:
rustup target add aarch64-linux-android - Build:
cargo ndk -t arm64-v8a -o ./app/src/main/jniLibs build --release
- Install:
- Permissions/features:
- Manifest should declare
<uses-feature android:name="android.software.midi" android:required="false" />(not needed for USB/BLE MIDI).
- Manifest should declare