与波形文件不同,MIDI文件不对音乐进行抽样,而是对音乐的每个音符记录为一个数字,所以与波形文件相比文件要小得多,可以满足长时间音乐的需要。MIDI标准规定了各种音调的混合及发音,通过输出装置可以将这些数字重新合成为音乐。
MIDI音乐的主要限制是它缺乏重现真实自然声音的能力,因此不能用在需要语音的场合。此外,MIDI只能记录标准所规定的有限种乐器的组合,而且回放质量受到声音卡的合成芯片的限制。近年来,国外流行的声音卡普遍采用波表法进行音乐合成,使MIDI的音乐质量大大提高。
MIDI文件有几个变通格式,如RMI和CIF等。其中CMF文件(creative music format)是随声霸卡一起使用的音乐文件。RMI文件是Windows使用的RIFF(resource interchange file format)文件的一种子格式,称为RMID,即包含MIDI文件的格式。
以下是MIDI文件块结构
类型 | 长度 | 数据 |
4个字节 | 4个字节 | 4个字节 |
类型指的是"MThd"或"MTrk",长度指的是除去类型和长度两部分外,其他数据占的字节数。
而数据描述部份是主体,我们现在来一起分析它的结构:
在每个Midi文件的开头都有如下内容,它们的十六进制代码为:“4d 54 68 64 00 00 00 06 ff ff nn nn dd dd”。
前四个是ASCII字符“MThd”是用来鉴别是否Midi文件,而随后的四个字节是指明文件头描述部分的字节数,它总是6,所以一定是“00 00 00 06”,以下是剩余部分的含义:
ff ff | 指定Midi的格式 | 00 00单音轨00 01多音轨,且同步。这是最常见的00 02多音轨,但不同步 |
nn nn | 指定轨道数 | 实际音轨数加上一个全局的音轨 |
dd dd | 指定基本时间格式类型 | 类型1:定义一个四分音符的tick数,tick是MIDI中的最小时间单位类型2:定义每秒中SMTPE帧的数量及每个SMTPE帧的tick |
以上就是MIDI文件头了,后面的所有内容都是真正做事的,我们先来看看它的构成。
类型 | 长度 | 数据 |
4个字节 | 4个字节 | 4个字节 |