4个版本
0.2.2 | 2023年2月25日 |
---|---|
0.2.1 | 2022年10月22日 |
0.2.0 | 2020年9月12日 |
0.1.0 | 2020年5月11日 |
#231 在 音频
每月25次下载
52KB
770 行
MIDI控制
此crate旨在提供一个高级API来处理MIDI控制器,主要是解码接收到的MIDI数据和编码发送的MIDI数据。
它解决了什么问题?
对于另一个Rust项目,一个软件乐器,我需要解码来自MIDI设备的字节数据的代码,以响应我的MIDI控制器的事件。我没有找到我喜欢或具有我想要的功能的任何crate。我找到了用于“传输层”即与设备通信的midir
。所以我写了些代码,它工作得很好。
后来我想与控制器玩耍,并发现可以配置它的专有MIDI命令。在更广泛的范围内,我想看看如何配置MIDI控制器作为音乐乐器使用,一个与供应商无关的。所以我开始编写一些丑陋的代码,然后开始使用之前编写的代码创建这个crate。
这个库将接受字节数据并解码成结构化数据。它将其中一个结构化数据转换成字节数据。它还尝试提供使用供应商MIDI消息的函数。
如何使用此库?
当你从MIDI设备接收到数据到buffer
。
let message = MidiMessage::from(buffer);
match command {
MidiMessage::NoteOn(ch, e) =>
/* note on */,
MidiMessage::NoteOff(ch, e) =>
/* note off */
}
发送MIDI命令
use midi_control;
let message = midi_control::note_on(Channel::Ch1, 60, 127);
let buffer: Vec<u8> = message.into();
/* send the buffer to your MIDI device */
从哪里开始?
示例代码arturia-blink.rs
将使用midir
发送命令,以循环颜色闪烁垫。
将以下依赖项添加到你的Cargo.toml
:
midi-control = "0.1.0"
如果你没有经验,建议你阅读有关MIDI的知识。
更多
目前只支持MIDI 1.0。这是1983年的标准及其改进。MIDI 2.0可能会到来,但现在不是优先事项。
截至今天,只支持一个供应商的Sys Exclusive消息,即Arturia™控制器的消息。这并不是由他们认可或支持的,只是恰好是我拥有的控制器:一个廉价的MiniLab MkII。
此crate不提供到传输(MIDI驱动程序)的API,但默认将支持使用midir
作为传输。禁用transport
功能以独立构建
cargo build --no-default-features
示例程序需要transport
功能。
开发者信息
源代码托管在gitlab上
https://gitlab.com/hfiguiere/midi-control
许可协议
许可协议:LGPL-3.0-or-later 作者:Hubert Figuière [email protected]
依赖项
~0–28MB
~351K SLoC