20个版本 (破坏性)

0.16.0 2024年5月3日
0.14.0 2023年8月12日
0.11.1 2023年6月21日
0.8.0 2022年11月4日
0.1.0 2021年8月25日

#108 in 音频

Download history 155/week @ 2024-04-22 175/week @ 2024-04-29 4/week @ 2024-05-06 12/week @ 2024-07-01

1,508 每月下载量
用于 ksynth

MIT 许可证

29KB
616 代码行

syxpack

处理MIDI系统独占消息的辅助工具。

关于解析MIDI系统独占消息的说明

MIDI系统独占消息始终以状态字节0xF0开始。通常它们以状态字节0xF7结束,但根据MIDI规范,它可以用任何其他状态字节替换,除了实时消息。然而,这似乎相当罕见。仍然,在技术层面上,0xF0和0xF7之间的块可以包含定时时钟(0xF8)或激活感应(0xFE)消息。

为了简单起见,因为这些其他消息几乎不会出现在合成器的系统独占转储中,SyxPack库仅处理严格由0xF0和0xF7分隔的系统独占消息。

某些合成器将多个系统独占消息打包到同一个转储中。SyxPack假设传递给Message::newVec<u8>只包含一个由0xF0和0xF7分隔的系统独占消息。如果有多个消息,有效载荷将包含实际消息数据和所有其他数据,直到最后的终止字节0xF7。

函数message_count根据找到的0xF7终止字节数返回字节向量中的消息数。如果此函数返回的值大于1,您应该首先使用split_messages函数根据0xF7终止字节将向量拆分为多个向量。

use syxpack::Message;

let mut all_messages: Vec<Message> = Vec::new();
let count = message_count(buffer.to_vec());
if count >= 1 {
    if count == 1 {
        all_messages.push(Message::new(buffer.to_vec()));
    }
    else {
        let messages = split_messages(buffer.to_vec());
        for message in messages {
            all_messages.push(Message::new(message));
        }
    }
};
println!("Messages found: {}", count);

依赖关系

~150KB