快好知 kuaihz

按工具类别所设置的账号称为,音乐研发必备:理解 MIDI 协议与标准 MIDI 文件格式

1. MIDI 简介

MIDI 协议即数字音乐接口(Musical Instrument Digital Interface),是电子乐器、合成器等演奏设备之间的一种即时通信协议,用于硬件之间的实时演奏数据传递。MIDI 协议诞生之初希望解决的事情是通过统一通信协议让不同乐器制造商的设备可以互相兼容,比如把 Roland 键盘接入 Yamaha 合成器。MIDI 协议的编码经过拓展后也可以作为一种记录音乐信息的文件格式,被称为“标准 MIDI 文件格式”。

在音乐技术研发中除了需要与音频打交道之外,许多场景中还需要直接处理音符信息。如果说 wav 与 mp3 记录的是音乐的物理现象,那么 MIDI 协议与 MIDI 文件则记录的是音乐这门语言的“文字”。本文的目的是让开发中涉及到音乐“本体”的同学可以了解这一最通用的演奏信息交互和文件存储格式的编码规则。同时通过对 MIDI 事件流等概念的认识,能在开发中更好地抽象自己的业务逻辑。

1.1 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 5472 6B 00 00 00 1A 00 FF 03 03 31 32 33 00 FF 5103 08 7A 23 00 FF 58 04 04 02 18 08 00 FF 2F 00...

上面这个例子可能会造成一些困惑,因为 MIDI 文件确实对人类阅读不太友好,但其编码规则实际上是较易掌握的,下面我们就来逐步认识 MIDI 的编码规则。

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:MIDI  MIDI词条  账号  账号词条  必备  必备词条  称为  称为词条  研发  研发词条