mid格式

王朝百科·作者佚名  2010-09-19  
宽屏版  字体:   |    |    |  超大  

简介经常玩音乐的人应该常听到MIDI(Musical InstrumentDigitalInterface)这个词,MIDI允许数字合成器和其他设备交换数据。MID文件格式由MIDI继承而来。MID文件并不是一段录制好的声音,而是记录声音的信息,然后在告诉声卡如何再现音乐的一组指令。这样一个MIDI文件每存1分钟的音乐只用大约5~10KB。今天,MID文件主要用于原始乐器作品,流行歌曲的业余表演,游戏音轨以及电子贺卡等。*.mid文件重放的效果完全依赖声卡的档次。*.mid格式的最大用处是在电脑作曲领域。*.mid文件可以用作曲软件写出,也可以通过声卡的MIDI口把外接音序器演奏的乐曲输入电脑里,制成*.mid文件。

标准midi文件格式

Dustin Caldwell

mid格式
mid格式图案

标准midi文件格式就像一头奇怪的猛兽。整体看来,它很有威力。当然,不管你怎么看待这个问题,足够详细地描述一个音乐使其可以再现,的确不是一项小工作。尽管复杂,当你了解midi的文件结构时,这个格式是很直观的。

在这里我必须说我不是一个midi文件专家。最近我为我的电脑弄来一部Gravis超频率音响,听了一些mid文件后我想,“嘿,我想能做自己的mid音乐多好。”嗯,头疼的几小时之后,我发现这不是件小事情。但是我也不会让一个乏味的文件格式难住我。(besides, i once told my wife that computers aren't really that hard to use, and i'd hate to be a hypocrite)所以如果你在这段介绍中发现错误,请通知我,我会做出改正。同样,这段介绍的应用范围也不包括所有midi命令和设置。

基本介绍1 总观

一个mid文件主要包括两部分,标头数据和音轨数据。简介的第二部分介绍标头数据,第三部分介绍音轨数据。mid文件包含仅一个标头数据来描述文件格式等,和任意数量的音轨数据。一个音轨可以被理解为多声道磁带的磁轨你可以指定一个音轨为一个声音,一段填充空白,一个乐器或你希望的什么东西。

2 标头数据

标头数据出现在文件的开头,描述文件的三个部分。标头数据总向这样:

4D 54 68 64 00 00 00 06 ff ff nn nn dd dd

前4比特等价于ASCII字符“MThd”。在这4比特头标签之后,总是00 00 00 06,因为头信息总是六比特。(译者按:这六比特头信息是4D 54 68 64 00 00,最后两比特用0填充。之后是的00 06而不是06,是因为整型变量要占两个字节。这就是数字6前面多出来一个字节的原因。下同。)

ff ff是文件类型,一共有3种类型:

0 - 单音轨

1 - 多音轨,同步音轨

2 - 多音轨,异步音轨

单音轨,顾名思义,只有一条音轨。

同步多音轨是说所有的音轨并行播放,通俗地说,同时开始播放,这样可以在音乐中代表不同的声部。

异步多音轨不一定在音乐开始时播放。它们可以完全异步。

nn nn是mid文件的音轨数量。

dd dd是每个四分音占用的时间片(这个以后再详细说明)。(译者按:这两个比特越大,音乐节奏越快。)

3 音轨数据

标头数据之后,文件剩下的部分是音轨数据。每个音轨都有一个标头,和你需要的数个命令。就像文件的标头数据,音轨标头是这样的:

4d 54 72 6b xx xx xx xx

这里的前4比特等价于ASCII字符的“MTrk”。之后的4个字节说明了这个音轨长度,音轨字节数(不包括音轨标头)。

标头之后的是midi事件。这些事件实际上是送向midi合成器接口的数据和一个附加数据:时间片。时间片表示经过多少tick之后事件开始被运行。每四分音之后的时间片被预先定义在标头数据里。这里的时间片是可变长度的编码数据。这种格式尽管有些混乱,却可以使大数字使用随意的字节数,不用浪费被填成0的字节。这些数被转换为7比特的字节,每个字节最特殊的最高有效位(MSB),除了数字的末字节是0外,其他字节是1。这样,读取数字每次读一字节,当你看到最高有效位是0时,你就会知道这是数字的最后一个字节。根据mid规格,整个时间片最多占4字节。时间片之后是mid事件,每个mid事件(除了运行事件)有一个最高位是1的命令字节(字节数值>=128)附录列表A是大部分命令。每个命令有不同的参数和长度,但命令后的数据必须是最高位为0的字节(字节数值)。以上规则有一个例外,是meta事件,它可以包含最高位是1的数据字节。然而,meta事件要求有一个长度参数,这样能减轻你的困惑。

一个可能带来混乱的细节(subtlety)是运行模式。实际上这里是mid命令被疏忽,最近的mid命令发行物被假设的地方。这意味着mid事件可以由时间片和和参数构成,这参数会转到可能存在的命令。

4 总结

如果这些解释只能增加本文的混乱,那么附录的例子可能使本文清晰一些。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有