欢迎来到天天文库
浏览记录
ID:35222478
大小:26.00 KB
页数:5页
时间:2019-03-22
《标准midi文件格式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、标准的MIDI文件格式就像奇异的兽。总体看来,它是那样的让你无法抗拒。当然,你怎样看它无关紧要,可是用足够多的描述符描述一段音乐并使它能够重现,可不是很少的工作就可以完成的。然而,它虽然复杂,但是真正理解之后,MIDI文件格式的结构还是很直观明了的。1.概述: 一个MIDI文件基本上由两个部分组成,头块和轨道块。第二节讲述头块,第三节讲述轨道块。一个MIDI文件有一个头块用来描述文件的格式、许多的轨道块等内容。一个轨道可以想象为像一个大型多音轨录音机那样,你可以为某种声音、某种乐谱、某种乐器或者你需要的任何东西分配一个轨道。2.头块: 头块
2、出现在文件的开头,有三种方式来描述文件。头块看起来一直是这样的: 4D54686400000006ffffnnnndddd 前4个字节等同于ASCII码MThd,接着MThd之后的4个字节是头的大小。它将一直是0000000006,因为现行的头信息将一直是6字节。 ffff是文件的格式,有3种格式: 0-单轨 1-多规,同步 2-多规,异步 单轨,很显然就只有一个轨道。同步多轨意味着所有轨道都是垂直同步的,或者其他的措辞为他们都在同一时间开始,并且可以表现一首歌的不同部分。异步多轨没有必要同时开始,而且可以完全的不同步。
3、 nnnn是MIDI文件中的轨道数。 dddd是每个4分音符delta-time节奏数(这之后将做详细介绍)。3.轨道块: 头块之后剩下的文件部分是轨道块。每一个轨道包含一个头,并且可以包含你所希望的许多MIDI命令。轨道头与文件头及其相似: 4D54726Bxxxxxxxx 与头一致,前4个字节是ASCII吗,这个是MTrk,紧跟MTrk的4个字节给出了以字节为单位的轨道的长度(不包括轨道头)。 在头之下是MIDI事件,这些事件同现行的可以被带有累加的MIDI合成器端口接受和发送的数据是相同的。一个MIDI事件先于一个delta-
4、time。一个delta-time是一个MIDI事件被执行后的节奏数,每个四分之一音符的节奏数先前已经定义在了文件的头块中。这个delta-time是一个可变长度的编码值。这种格式虽然混乱,可是允许根据需要利用多位表示较大的数值,这不会因为需求小的数值情况下以添零的方式浪费掉一些字节!数值被转换为7位的字节,并且除了最后一个字节以最高有效位是0外,各个字节最有意义的一位是1,。这就允许一个数值被一次一个字节地读取,你如果发现最高有效位是0,则这就是这个数值的最后一位(意义比较小)。依照MIDI说明,全部delta-time的长度最多超过4字节。
5、 delta-time之后就是MIDI事件,每个MIDI事件(除了正在运行的事件外)带有一个最高有效位总是1的命令字节(值将>128)。大部分命令的列表在附录A中。每个命令都有不同的参数和长度,但是接下来的数据将是最高有效位为零(值将<128)。这里有个例外就是meta-event,最高有效位可以是1。然而,meta-events需要一个长的参数以区分。 微小失误就可以导致混乱的是运行模式,这是现行MIDI命令所忽略的地方,并且最终发行的MIDI命令是假定的。这就意味这如果包含了命令,那么MIDI事件就是由delta-time与参数组成而转
6、换的。4.综述: 如果这份说明仅仅是使问题更加混乱,那么以下提供的例子可能有助于澄清问题!同时,两个公用程序和一个图解文件包含在这个文档里面: DEC.EXE——这个公共程序是将二进制文件(比如.MID)转换成以十进制表示的对应每个字节的有标记界限的文本文件。 REC.EXE——这个公共程序是将有标记界限的十进制数文本文件对应的每一字节转换成二进制文件。 MIDINOTE.PS——这是一个对应键盘和五线谱的音符数字附录页。 附录A1.MIDI事件命令 每个命令字节有两部分,左nybble(4位)包含现行的
7、命令,右nybble包含将被执行的命令的通道号,这里有16各MIDI通道8个MIDI命令(命令nybble必须最高有效位是1的)。在下表中,X表示MIDI通道号。所有的音符即数据字节都<128(最高有效位是0)。十六进制二进制数据描述8x1000xxxxnnvv音符关闭(释放键盘)nn=音符号vv=速度9x1001xxxxnnvv音符打开(按下键盘)nn=音符号vv=速度Ax1010xxxxnnvv触摸键盘以后nn=音符号vv=速度Bx1011xxxxccvv调换控制cc=控制号vv=新值Cx1100xxxxpp改变程序(片断)pp=新的程序号
8、Dx1101xxxxcc在通道后接触 cc=管道号Ex1110xxxxbbtt改变互相咬和的齿轮(2000H表明缺省或没有改变)(什么意
此文档下载收益归作者所有