|

楼主 |
发表于 2005-11-14 07:34:00
|
显示全部楼层
2. 文件头块
在文件初的文件头块指定在文件中关于数据的一些基本信息。数据部分包含三个16位的字段,首先被存放高位字节(当然)。 这里有完整的块的句法:
<块类型><块长度><格式><音轨数><分区>
如上所述,块类型是四个ASCII字符’ MThd’ ; 随后的长度是一个6 (高位优先的32位数字表示法)。 格式,是指定文件的整体组织。
格式的只有三种值,指定三种格式:
0 文件包含一条唯一的多通道音轨
1 文件包含一个或更多同时的音轨
2 文件包含一个或更多独立的音轨,相继进行播放
音轨数,是文件中音轨块的数量。
分区,是在文件的Δt之中1代表的是一秒的多少分之一。
格式0 ,多通道的音轨,是最容易转换的数据。应用格式1 的MIDI文件可以很容易转换成这种格式。声音是最重要的东西,格式并不重要。这种转换是非常应该的,这可以化繁为简。
MIDI文件有可以表达的节奏和拍号的信息。对于0的文件格式,节奏,将分散的存储;对于格式1,节奏必须(在0.04版起)一起储存,作为第一条音轨。这个规定是合理的。
所有的MIDI文件,应指定节奏和拍号。如果他们不这样做,拍号假设为4 / 4 ,节奏和节拍120每分钟。在格式0中 ,这些元事件应该在开头。在格式1 中,这些元事件应包含在第一个音轨中。在格式2 中,每一独立的音轨,应至少包含一条拍号和节奏的信息。
3 、元事件
不是每个程序,都必须支持每一个元事件。元事件最初的定义包括:
序列数
FF 00 02 ssss
这一类事件,必须发生在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前,用于指定序列的数目。序列数对应在这条音轨的序列数。在一个格式0或1 MIDI文件,其中只包含一个序列,这个数字应包含在第一个音轨。
文字事件
FF 01 长度 文字
任何数量描述任何事情的文字。在音轨开头放上这条音轨的相关的所有信息是很好的,这有助于日后查看。文本事件也可能发生在其他时间,被用来作为歌词。在此事件中文本应用可打印的ASCII字符进行书写。
元事件类型01到0F的是预留给各种类型的文本使用的,但使用的目的各不相同:
版权公告
FF 02 长度 文本
载有版权声明,作为打印ASCII文本。文本中应包含字符( c ),版权所有的时间,版权所有者。如果几段音乐是在同一个MIDI文件中,所有的版权声明应放在一起,把它放在文件的开头。这个事件应该是第一个事件,在时间0放在第一条音轨块。
序列/音轨的名称
FF 03长度 文本
乐器名称
FF 04长度 文本
说明该类型的乐器将用于在这一条音轨中使用。
歌词
FF 05长度 文本
写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间
标记
FF 06长度 文本
通常在一个格式0的音轨,或在格式1的第一个音轨。
注释点
FF 07长度 文本
描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件
音轨终止
FF 2F 00
此事件必须的,以便确定的结束点。
设定速度,以毫秒(ms)为单位,是四分音符的时值
FF 51 03 tttttt
这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。
SMPTE 时间同步
FF 54 05 hr mn se fr ff
这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。
拍号标记
FF 58 04 nn dd cc bb
拍号表示为四个数字。nn和dd代表分子和分母。分母指的是2的dd次方,例如,2代表4,3代表8。cc代表一个四分音符应该占多少个MIDI时间单位,bb代表一个四分音符的时值等价于多少个32分音符。
因此,完整的 6 / 8拍号应该表示为
FF 58 04 06 03 24 08
这是, 6 / 8拍号( 8等于2的三次方,因此,这里是06 03),四分音符是32个MIDI时间间隔(十六进制24即是32),四分音符等于8个三十二分音符。
谱号信息
FF 59 02 sf mf
sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。 也就是说,升号数目写成0x,降号数目写成8x
mf指出曲调是大调还是小调。大调mf=00,小调mf=01
对于序列器的元数据
FF 7F长度 数据
特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。
作为一个例子, 把一个MIDI文件摘录如下所示。
内容的MIDI流所代表的这个例子,细分在这里:
Δt(十进制) 事件号(十六进制) 其他数据(十进制) 说明
0 FF 58 04 04 02 24 08
0 FF 51 03 500000
0 C0 5 通道1, 音色5
0 C1 46 通道2, 音色46
0 C2 70 通道3, 音色70
0 92 48 96 通道3 开始弹奏C2, 用力
0 92 60 96 通道3 开始弹奏C3, 用力
96 91 67 64 通道2 开始弹奏G3, 用力
96 90 76 32 通道1 开始弹奏E4, 钢琴
192 82 48 64 通道3 停止弹奏C2, 标准
0 82 60 64 通道3 停止弹奏C3, 标准
0 81 67 64 通道2 停止弹奏G3, 标准
0 80 76 64 通道1 停止弹奏E4, 标准
0 FF 2F 00 结束
整个格式0 的MIDI文件的内容,首先,文件头块:
4D 54 68 64 MThd
00 00 00 06 块长度
00 00 格式 0
00 01 一个音轨
00 60 一个MIDI时间间隔等于96分之一秒
接着,音轨块,
4D 54 72 6B MTrk
00 00 00 3B 音轨长度(59字节)
时间 事件
00 FF 58 04 04 02 18 08 拍号4/4
00 FF 51 03 07 A1 20 速度
00 C0 05
00 C1 2E
00 C2 46
00 92 30 60
00 3C 60
60 91 43 40
60 90 4C 20
81 40 82 30 40
00 3C 40
00 81 43 40
00 80 4C 40
00 FF 2F 00 终止
类似的,可以把这个文件写成1格式。
MIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。
MIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。
MIDI格式由于其特殊的记录方式,受硬件影响较大。
MID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。 |
|