22个稳定版本 (4个主要版本)
使用旧的Rust 2015
4.0.10 | 2023年12月20日 |
---|---|
4.0.8 | 2023年8月30日 |
4.0.6 | 2021年5月14日 |
4.0.4 | 2021年2月18日 |
0.2.0 | 2018年1月22日 |
#1 in #realtime
1,215 每月下载量
在 2 个crate中(通过 lv2-midi)使用
80KB
1.5K SLoC
WMIDI
MIDI编码和解码库。
用法
use std::convert::TryFrom;
// Decoding messages from bytes.
fn handle_midi_message(bytes: &[u8]) -> Result<(), wmidi::FromBytesError> {
let message = wmidi::MidiMessage::try_from(bytes)?;
if let wmidi::MidiMessage::NoteOn(_, note, val) = message {
let volume = u8::from(val) as u8 / 127.0;
println!("Singing {} at volume {}", note, volume);
}
Ok(())
}
// Encoding messages to bytes.
fn midi_to_bytes(message: wmidi::MidiMessage<'_>) -> Vec<u8> {
let mut bytes = vec![0u8; message.bytes_size()];
message.copy_to_slice(bytes.as_mut_slice()).unwrap();
bytes
}
特性
- 支持
no_std
环境。 - 解析和编码过程中没有内存分配(因此实时安全)。
- 除了
MidiMessage::OwnedSysEx
之外,创建MidiMessage
时没有内存分配。
测试和基准测试
- 使用
cargo build
构建。 - 使用
cargo test
进行测试。 - 使用
cargo bench
进行基准测试。结果将在./target/criterion/report/index.html
下。
变更日志
4.0.0
- 引入了新的
ControlFunction
类型,它简单地包装了一个U7。 - 为所有
ControlFunction
值提供了常量和文档。 - 重新编号Note枚举/常量,使其与midi更一致;例如,C0现在是C1。
3.1.0
- 将
MidiMessage::wire_size()
重命名为MidiMessage::bytes_size()
。 - 引入了
MidiMessage::copy_to_slice()
方法。
3.0.0
- U7和U14的实例现在有边界检查。
- 现在Note是一个枚举而不是u8。可以使用
Note::try_from
和u8::from
进行转换。