encoding - 使用十六进制从头开始写入Midi文件

标签 encoding format hex sublimetext midi

我正在尝试从头开始编写Midi文件。它将演奏C小调的3小调琶音。我一直在使用sublime文本通过十六进制编码进行保存。然后将结果导入逻辑(将扩展名更改为.mid之后)。到目前为止,这还没有成功,并且逻辑什么也没做。

我从here获得了大部分信息,并编写了以下内容:

4d 54 68 64 00 00 00 06 00 00 00 01 00 18 4d 54 72 6b 00 00 00 1e 80 18 81 3c 7f 80 00 91 3c 00 80 18 81 40 7f 80 00 91 40 00 80 18 81 43 7f 80 00 91 43 00



这是每个字节的分割,以注释形式显示,但总结了我对文件格式的理解:
Byte breakdown for MIDI file

任何人都可以指出为什么这不能将正确的结果加载到Logic中。我是否误解了文件格式本身,或者是编码中更深层的问题。
更新:这是最终的,更正的十六进制...

4d 54 68 64 00 00 00 06 00 00 00 01 00 18 4d 54 72 6b 00 00 00 22 80 18 91 3c 7f 80 00 81 3c 00 80 18 91 40 7f 80 00 81 40 00 80 18 91 43 7f 80 00 81 43 00 00 ff 2f 00

最佳答案

轨道缺少轨道结束元事件(类型2F,长度为0)。因此,添加字节00 FF 2F 00,并相应地调整轨道大小。

该音轨包含六个MIDI消息。全部六个都是注释信息,因此没有任何实际的注释。
8x是一个注释信息。9x是一个音符开启消息,但是速度为0时实际上表示音符消失。 (这是一种优化方法,在使用运行状态时很有用。)

关于encoding - 使用十六进制从头开始写入Midi文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44142513/

相关文章:

c++ - 如何使用 std::ostringstream 截断整型的宽度?

python - 当我不知 Prop 体编码时如何解码数据

linux - 在 bash 脚本中将十进制转换为十六进制

string - 转义字符串文字中的十六进制值

python - Python 中的 UTF-8

python - Python 3.3 是否比 2.7 更好地解码和重新编码已抓取的 Web 文本为 UTF-8?比如,好多了?

javascript - 使用 Prettier JS 时保留 then() catch() 格式

java - 下载文件中的 UTF-8 编码名称

java - 套接字的输入流不可读

logging - 日志消息应该更具人类可读性还是计算机可读性?