MIDI文件格式结构 2.docVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MIDI文件格式结构 2

MIDI文件格式结构 2 midi 格式,编程,(1)2006年08月04日 星期五 08:41对于制作midi音乐来说,比播放midi文件本身更复杂得多。我们得了解一些乐理常识和midi文件结构。 一、midi文件结构分析   midi文件包含首部块(header chunk)和音轨块(track chunk)两部分。其格式一般如下:   mthd 数据长度 header数据 //首部块   .......   mtrk 数据长度 track数据 //音轨块   header chunk 结构为:   char midiid[4];   long length;   int foarmt;   int tracknum;   int division; 其中:   midiid称为midi文件头标志,一般将其设置为mthd;   length为文件首部数据长度(除它本身和文件头标志占用的字节以外),通常它设置为6,即format,tracknum和division共占用的字节数据长度;   format表示midi文件存放的格式,当前只有3种格式:   0 表示midi文件只有一个track chunk;   1 表示midi文件只有一个或多个track chunk;   2 表示midi文件只有一个或多个各处独立的track chunk。   division指定计数的方法,一种随时间计数(最高位设置为0时),另一种使用制式的时间码(最高位设置为1时)。这里,主要介绍随时间计数的一种格式。其各位意义如下:   ┌─┬─────────┐   │0 │ 每一拍的计数值 │   └─┴─────────┘   b15 b14  ̄ b0   其最高位一定要设置为0,其它的15位表示每一拍的计数值。如该数据为96(以八分音符为一拍),则表示一个四分音符延时数应该为192。   另外,在midi文件中,long和int型数据均将高字节值存放入低地址上,如一个long型数据为0x45678,则在文件中, 存放的结果为:0x00,0x04,0x56,0x78。而在内存中,int,long的变量值通常将崐高字节值存放高地址上。因此,存放数据时,应该作一下调整。   track chunk为用来播放歌曲的数据信息。每一个track chunk是一组简单的midi码(包括一些非midi码)的集合。它又由头部信息和崐若干个mtrk event组合而成。   头部结构和意义为:   char trackchunkid[4]; //track chunk标志mtrk   long trackchunkmsglength; //该track chunk信息长度   而mtrk event是由时间计数值(dela-time)和event(midi码信崐息)组合成的。即:   mtrk event=dela-time event   dela-time使用可变长度的形式存储数据,它代表处理event 之前要计数时间值。 它在音乐中,即表示拍数。通常音乐开始演奏时,总是将计数时间值设置为0。为了能连续处理两个event,我们可以将deta-time设置为0。如:3和5同时演奏2拍(每一拍计数值为24 ),可以设置如下:   deta-time event   0 开始演奏3   0 开始演奏5   48 停止3演奏   0 停止5演奏   event表示midi码信息集,如0x9n表示开始发音,0x8n表示关闭发音等等(下有说明)。   上述的dela-time使用可变长度的形式表示数据值。可变长度形崐式是midi文件中对于大于8位的数据打用的一种存储方式,它把每一个数据定义为7位,剩下的最高位作为数据长度的识别。当这一位为0时,表示数据是最后一个,若为1,则表示还有下一个。   如:数值0x3fff,可变长度形式便为0xff,0x7f;0x4000则应该为0x81,0x80,0x00。此数据的转换可以参阅writelenghttobuf()函数。 二、常见midi码说明   midi码是制定音乐交换的信息码,它使用串行非同步传送,因此数据码是用多码形式。第一个midi码是状态码,剩余的都是数据码,其长度视状态而定。   以下是一些常见的midi码。   1、开始发音(0x9n)   格式为:0x9n note speed   它一共占用3个字节,n表示通道号,取值0-15。midi 可以同时演奏16个通道,用此指定在哪一个通道上发音(以下n相同)。   note表示音高数值,即音阶码值。如c4(中音1)为60,它的取值在0xc和0x6c之间(具体码值,可参考「参考书籍1」)。   speed表示按键时的速度,用此表示音的力度。若没有力度感,可以

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档