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次下载

LGPL-3.0-or-later

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