.........

您现在的位置: 中国乐手网 >> 专题 >> 电脑音乐 >> 综合知识 >> 专题正文
...

您想找的专题是:

...

MIDI 文件格式

作者:未知    专题来源:网络    点击数:518    更新时间:2006-8-25
   

MIDI 文件结构

Chunks

MIDI 文件由 chunks 组成:

每个chunk 的组成:

类型 

长度

数据 

4 字节

4 字节

 (前面规定的)长度

  • A 4-字节 chunk 类型 (ASCII)
  • A 4-byte 长度(32 位, msb first)
  • (前面规定的)长度数据

有两种类型的 chunks :

Header Chunks

有一个chunk标志“MThd”

Track Chunks

有一个chunk标志“MTrk”

 一个 MIDI文件由一个header chunk和紧接的一个或多个track chunks组成。

 在chunks结构中,自长度区以后是严格规定好的。它可能容纳的chunks除了“MThd”或“MTrk”其它的将被忽略。MIDI说明书要求软件能够处理意想不到的chunk,并忽略掉整个chunk。

 

<---Chunk--->

 

类型

长度

数据

MIDI
文件
:

MThd

6

<格式>

<tracks>

<division>

MTrk

<长度>

<delta_time> <event> ...

:

MTrk

<长度>

<delta_time> <event> ...

数值表示法

 在MIDI 文件中,除了基本的MIDI数据,还有一个变化的数据(类型)。如: delta-times 和 meta-events。

 这里有一些关于这样的数的一些资料,它们有通常有下面1~2种格式:

二进制数

二进制数的存贮:

  • 每个字节8位
  • MSB first (最左方的字节权(或数位)大)

(除非其它的描述)

可变长度数

 这个可变长度数是为了方便表示任意大的整数,而不必创建固定宽度的整数。

 一个可变长度数被表示为连续的7位数据。从最高位到最低位,最后一个字节bit7等于0,前面的字节bit7等于1。

例:

 数

可变长度数

十进制

十六进制

二进制

二进制

十六进制

-

abcd

aaaabbbbccccdddd

100000aa 1aabbbbc 0cccdddd

-

0
:
127

00
:
7F

0000 0000
:
0111 1111

0000 0000
:
0111 1111

00
:
7F

128
:
16383

80
:
3FFF

00000000 10000000
:
00111111 11111111

10000001 00000000
:
11111111 01111111

81 00
:
FF 7F

1000

03E8

11 1110 1000

10000111 01101000

87 68

100000

0F4240

1111 0100 0010 0100 0000

10111101 10000100 01000000

BD 84 40

 如此,你可以从上面的例子发现:小的数(0~127)可以用一个字节表示。而(比较)大的数也可以表示出来。

 在MIDI 文件中,最大的数是0FFF,FFFF。这个规定了可变长度数允许利用32位整数。

Header Chunks

 Header chunk 数据部分包括3个16位(数据)区。这个区域描述:( MIDI 文件)格式、track 的数量和 MIDI 的时间设置。

 Header chunk的长度是6个字节。无论如何软件必须遵循这个原则。即使它大于预期的,任何意料外的数据被忽略。

Header Chunk

Chunk 类型

长度 

数据 

4 字节
(ASCII)

4 字节
(32位二进制数)

<-- 长度(= 6字节) -->

16位

16位

16位

MThd

<长度>

<格式>

<tracks>

<division>

<长度>

Chunk数据部分的长度。
这是一个32位二进制数, MSB first.
这在 MIDI  1.0文件说明书中规定为6。不过,考虑到将来的扩充,(希望)任何MIDI文件的作者能够应付大的Header chunks。

<格式>

MIDI 文件的格式。
这是 一个16位二进制数, MSB first。
有效的格式是: 012

<tracks>

MIDI 文件中track chunk的数量。
这是 一个16位二进制数, MSB first。

<division>

这个定义在MIDI 文件中(一个)单位的 delta-time数。
这是 一个16位二进制数, MSB first。

有下列两者之一的的格式,依赖于最高位值。 

:

15

14 ... 8

7 ... 0

<division>

0

1/4音符tick数

1

-帧/秒

ticks / 帧

bit 15 = 0:

bits 0-14

每个1/4音符的 delta-time 数。

bit 15 = 1:

bits 0-7

每个  SMTPE 帧的 delta-time 数。

bits 8-14

负数,表示每秒中SMTPE 帧的数量。有效数应符合MTC Quarter Frame消息。

   -24 = 24 帧/秒
   -25 = 25 帧/秒
   -29 = 30 帧/秒, drop frame
   -30 = 30 帧/秒, non-drop frame

MIDI File Formats

MIDI 文件有3种变化:

  • 格式 0
    …容纳单一的Track。
  • 格式1
    …容纳一个和多个同步的Track(所有的Track同时播放)。
  • 格式2
    …容纳一个和多个独立的Track(所有的Track独立播放)。

MIDI 文件格式 0

格式0 MIDI 文件包括一个Header-Chunk 和一个 Track-Chunk。

这个 Track-Chunk 包括所有的音符和节拍消息。

MIDI 文件格式 1

格式1 MIDI 文件包括一个Header-Chunk 和多个 Track-Chunk,所有的Track同时播放。

格式1 中第一个Track是专用的。它看成“Tempo Map”。它包括所有的 meta-event :拍子记号拍子音序/Track 名称音序号标记SMTPE偏移量。在格式1中(这些)将放入在第一个 track 中。

MIDI 文件格式 2

格式2 MIDI 文件包括一个Header-Chunk 和多个 Track-Chunk,每个Track表现出独立的次序。

Track Chunks

Track chunk 的数据部分由一对和多对 <delta-time> <event> 组成。 <delta-time>是必须的,0是有效的 delta-time。

Track Chunk

类型

长度

数据 

4 字节
(ASCII)

4 字节
(32位二进制数)

<-- 长度-->
(二进制数)

MTrk

<长度>

<delta-time> <event> ...

<delta-time>

相对于前一个事件的“tick”,是一个可变长度数。

<event>

下列之一:

·   <midi   事件>

·   <sysex 事件>

·   <meta 事件>

事件

注意:在 <delta-time><event>之间,没有明确的分隔符。这个是因为 delta-times 和event有一个长度定义。  

  • Delta-time 定义最后一个字节的最高位等于0。
  • MIDI Channel 消息有一个长度定义。
  • Sysex-events 和 meta-events 有一个清楚的长度区。

MIDI 事件

MIDI Channel 消息包含:

Running status 通常应用于MIDI文件中的同一状态的表示。Running status 也可以被取消 。

Sysex 事件

  (系统高级消息的详细描述)是令人满意的,相对于 MIDI channel 消息。<sysex-data>可以被使用。

Sysex-events 流行两种风格:

Sysex Events

F0 <长度> <sysex-data>

F0 Sysex Event

 

这个导致 F0(消息的开头) 被发送。接着是<sysex_data>。

 

<长度>

一个可变长度数,表示 <sysex_data>的长度

 

<sysex_data>

F0 <sysex_data>
作为 MIDI 消息发送。

F7 <长度> <any-data>

F7 Sysex Event (or 'escape')

 

这个导致 <any_data>被发送,没有其它的附加数。

 

<长度>

一个可变长度数,表示  <any_data>的长度

 

<any_data>

<any_data>
作为 MIDI 消息发送。

将MIDI 文件格式加入网摘:

365Key  | 新浪ViVi  | 和讯网摘  | 天极网摘  | POCO网摘 

MIDI 文件格式文章录入:专题录入:admin    责任编辑:admin 

...
  • 上一篇专题:
  • 下一篇专题:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口