理解MIDI文件结构:从Header到Track Chunks
需积分: 9 115 浏览量
更新于2024-10-10
收藏 104KB PDF 举报
"MIDI 文件结构详解"
在深入探讨 MIDI 文件结构之前,首先需要了解 MIDI( Musical Instrument Digital Interface)的基本概念。MIDI 是一种通信协议,允许电子乐器、计算机和其他设备之间交换音乐数据。MIDI 文件是这些数据的存储形式,它们不是音频流,而是事件序列,描述了音乐的构成元素,如音符、控制器变化和时间信息。
MIDI 文件的结构基于“块”(Chunks)的概念。每个块由三部分组成:4 字节的块类型、4 字节的长度字段以及根据长度字段确定的数据区。块类型用 ASCII 字符表示,长度字段为32位,高字节优先。这种结构使得 MIDI 文件能够灵活地容纳不同类型的块。
1. **头块(Header Chunk)**
头块的类型为 "MThd",用于定义 MIDI 文件的格式信息。它包含以下三个关键字段:
- **格式(format)**:指示 MIDI 文件的结构。可能的值有 0、1 和 2,分别代表单轨、多轨和多歌曲格式。
- **轨道数量(tracks)**:头块中指定的 MIDI 轨道数量。
- **时间分隔(division)**:定义时钟信号的单位,可以是拍子数或系统实时消息的计数,决定了事件的时间间隔如何解释。
2. **轨道块(Track Chunks)**
轨道块的类型为 "MTrk",包含一系列事件,如音符开始、结束、控制器变化等。每个事件前都有一个 delta-time(相对时间),表示该事件相对于前一事件的时间间隔。事件可以是标准 MIDI 事件,如音符消息,也可以是元事件(Meta-events),如歌曲标记或时间标志。
轨道块的结构如下:
- **长度(length)**:表示该轨道块内的数据长度。
- **事件序列**:由 delta-time 和事件组成。delta-time 以变长编码表示,可以节省存储空间。事件包括 MIDI 事件和元事件,每个事件由事件类型、参数组成。
3. **数值表示(Value Representations)**
在 MIDI 文件中,除了基本的 MIDI 数据,还存在如 delta-time 和元事件中的数值信息。这些数值通常有两种表示方式:
- **变长编码(Variable Length Encoding)**:用于 delta-time 的表示,可以更高效地存储小数值。
- **七位二进制补码(Seven-Bit Two's Complement)**:用于 MIDI 事件中的某些参数,如音符值、控制器号等,通常不超过 127。
除了规定的 "MThd" 和 "MTrk" 块,MIDI 文件结构也允许其他类型的块存在。尽管 MIDI 规范要求软件忽略不识别的块类型,但这样的设计为扩展提供了可能性,比如添加自定义的元数据或编解码器信息。
MIDI 文件通过头块和轨道块的组合,以及灵活的数值表示,形成了一种能有效存储和传递音乐信息的数据结构。理解这一结构对于读取、创建和修改 MIDI 文件至关重要,特别是在音乐软件开发和数字音频工作流程中。
2015-08-29 上传
2021-05-09 上传
2021-09-28 上传
2021-07-05 上传
2021-04-27 上传
2010-12-28 上传
2008-02-25 上传
2019-04-27 上传
alimxl
- 粉丝: 0
- 资源: 1
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍