MIDI 协议即数字音乐接口(Musical Instrument Digital Interface),是电子乐器、合成器等演奏设备之间的一种即时通信协议,用于硬件之间的实时演奏数据传递。MIDI 协议诞生之初希望解决的事情是通过统一通信协议让不同乐器制造商的设备可以互相兼容,比如把 Roland 键盘接入 Yamaha 合成器。MIDI 协议的编码经过拓展后也可以作为一种记录音乐信息的文件格式,被称为“标准 MIDI 文件格式”。
在音乐技术研发中除了需要与音频打交道之外,许多场景中还需要直接处理音符信息。如果说 wav 与 mp3 记录的是音乐的物理现象,那么 MIDI 协议与 MIDI 文件则记录的是音乐这门语言的“文字”。本文的目的是让开发中涉及到音乐“本体”的同学可以了解这一最通用的演奏信息交互和文件存储格式的编码规则。同时通过对 MIDI 事件流等概念的认识,能在开发中更好地抽象自己的业务逻辑。
和 HTTP 这类协议不同,MIDI 作为传输协议时所有传递的信息都需要被实时响应,比如一个触键信息、一个效果器参数的改变都需要立刻被执行,所以其采用数据流的方式进行数据传输。MIDI 定义了一个 8 位的二进制数据流,许多时候我们可以使用 ASCII 码来将其表示为 16 进制的字符用于传输和保存。
对于 MIDI 标准文件格式来说,其存储的内容也是 MIDI 产生的事件流。一段典型的 MIDI 文件长这样:
4D 54 68 64 00 00 00 06 00 01 00 03 01 E0 4D 54
72 6B 00 00 00 1A 00 FF 03 03 31 32 33 00 FF 51
03 08 7A 23 00 FF 58 04 04 02 18 08 00 FF 2F 00
...
<< · Back Index ·>>
上一篇
下一篇