binary - .mid 文件中的额外字节

标签 binary messages midi byte

我正在尝试从 .mid 文件中读取信息,但我一直看到似乎不是任何 midi 消息一部分的额外字节。我不知道如何预测/处理这些,它在我的项目中抛弃了其他一切。有什么建议?下面是几个例子:

4d 54 72 6b 00 00 04 48 轨道头
00 c0 19 程序更改
00 ff 03 07 54 72 61 63 6b 20 31 轨道标题
00 b0 05 00 Controller 事件
00 64 00 00 06 0c 00 26 00 ????
00 b0 20 00 Controller 事件

00 ff 58 04 0c 03 0c 08 拍号
81 89
50 ff 51 03 0f 42 40 速度
00 ff 2f 00 轨道结束

00 ff 21 01 00 未知元事件
30 b0 79 00 Controller 事件
00 07 64 01 0a 32 01 5b
14 01 5d 11 01 20 00 00 00 ????
00 c0 23 程序更改
8c 7c 90 23 ????

我怀疑我什至在这里出现故障,因为其中一些似乎毫无理由地具有非零增量时间。

最佳答案

MIDI 事件中的 Delta 时间是可变长度的,因此每个事件使用 1 个或更多字节来编码应该从最后一个事件过去的时间。见 this .

每个 MIDI 事件都有一个时间增量,它要么是 0(表示它与前一个事件在完全相同的时间发生)要么是某个正值(表示它应该在前一个事件之后发生)。

关于binary - .mid 文件中的额外字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1180873/

相关文章:

java - 为什么 mac 上的 java midi synth 停止播放音符

algorithm - 二叉搜索树算法——从非根节点开始搜索

c# - 无法应用位掩码

如果数据大小超过 1074 字节,则 TCP 消息在 Win7 中被分段(拆分)

oracle - 如何使Oracle错误消息更加详细?

midi - MIDI 文件的分辨率会影响其速度吗?

javascript - Sonnification javascript 只返回一个音符

c - 二进制 "become"什么时候是十进制或十六进制?十六进制 "faster"是十进制吗?

binary - Code Golf - 十六进制到(原始)二进制转换

uibutton - 如何使 UIButton 导致 UITextField 开始编辑文本