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 |
|
#108 in 音频
1,508 每月下载量
用于 ksynth
29KB
616 代码行
syxpack
处理MIDI系统独占消息的辅助工具。
关于解析MIDI系统独占消息的说明
MIDI系统独占消息始终以状态字节0xF0开始。通常它们以状态字节0xF7结束,但根据MIDI规范,它可以用任何其他状态字节替换,除了实时消息。然而,这似乎相当罕见。仍然,在技术层面上,0xF0和0xF7之间的块可以包含定时时钟(0xF8)或激活感应(0xFE)消息。
为了简单起见,因为这些其他消息几乎不会出现在合成器的系统独占转储中,SyxPack库仅处理严格由0xF0和0xF7分隔的系统独占消息。
某些合成器将多个系统独占消息打包到同一个转储中。SyxPack假设传递给Message::new
的Vec<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