|
|
序列/音轨的名称' R) z) Q! |- f6 T' M% u
FF 03长度 文本: B- u e9 \3 u
乐器名称1 z/ @8 f% X, \+ s' e4 Z5 @) Q
FF 04长度 文本
( a' `9 X1 B8 y) U说明该类型的乐器将用于在这一条音轨中使用。
1 Y/ s1 T l7 o歌词/ Q# y+ F% ^$ w0 Z/ O! D# m6 @ Z
FF 05长度 文本7 i6 ^& {9 C9 x4 V
写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间; E- t% ~$ C' O' ` H/ w0 c
标记# _* d4 M H" d( f. p; }1 S
FF 06长度 文本
- N' `4 L8 G# T1 j通常在一个格式0的音轨,或在格式1的第一个音轨。+ C) L5 T" c. j0 N3 a0 e. f
注释点 r; R2 [# l+ y% ~
FF 07长度 文本 G; H* O5 r/ A( j7 {% r- p- @$ {
描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件7 J+ g+ K) l0 r3 M7 p' H
音轨终止* a- ~2 J2 R% k( z* p- ]! @
FF 2F 00
9 N& T$ b6 T( `' T% Y3 V此事件必须的,以便确定的结束点。* j+ ^& L; ?3 L1 k4 X5 T
设定速度,以毫秒(ms)为单位,是四分音符的时值7 B2 J* R4 I& P. y0 M
FF 51 03 tttttt
8 ^% Z: b% F; p7 n! I: {( `这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。
/ i6 V; J( O, Y6 S9 o9 B% aSMPTE 时间同步" l3 b5 h; h1 ]% P, Z/ V
FF 54 05 hr mn se fr ff
* x) i' m. g4 R, R7 D- h8 ?+ e1 ~9 z这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。
5 ]# c( k$ p: o7 f0 L- e( _' T) L2 h拍号标记
5 P' \3 J7 N% n& a% `+ t8 {FF 58 04 nn dd cc bb% d. h4 {' Z# {" b0 r0 B
因此,完整的 6 / 8拍号应该表示为4 Z- \: I/ R; k8 j
FF 58 04 06 03 24 08
2 A, g3 L" Q, M2 E. C5 @三十二分音符。9 w4 w" j4 \) z6 `! I9 S' Q
谱号信息
+ ?! g) r3 Y+ t! _8 ]* V* sFF 59 02 sf mf, q4 ^2 l- |$ O! B! l8 m& A
sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。 也就是说,升号数目写成0x,降号数目写成8x. w6 ]/ b; m6 o4 U
mf指出曲调是大调还是小调。大调mf=00,小调mf=013 E) {1 q. E% j( Q% R
对于序列器的元数据
6 @! i- v. o& Z' L" C/ MFF 7F长度 数据
$ `' R$ E9 K9 R特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。6 L3 `! I1 ^$ ^+ c! x- h
作为一个例子, 把一个MIDI文件摘录如下所示。
1 L2 ~7 ^2 H3 L6 k2 u5 [ D) C内容的MIDI流所代表的这个例子,细分在这里:
( p' {+ d) O1 FΔt(十进制) 事件号(十六进制) 其他数据(十进制) 说明
1 n9 e$ R! A, w1 \" @0 FF 58 04 04 02 24 08) N/ y0 D' O, [. {. T! s
0 FF 51 03 5000007 F) z( d2 D. ]2 S
0 C0 5 通道1, 音色5$ P2 S2 k, M: P0 ?9 T+ n. j$ f2 [
0 C1 46 通道2, 音色46' w: S1 A0 ?% b
0 C2 70 通道3, 音色70' S% k. e* e W/ h b
0 92 48 96 通道3 开始弹奏C2, 用力. a' ?! e: ^1 }
0 92 60 96 通道3 开始弹奏C3, 用力
/ A( P f) h% |2 w) Y1 {96 91 67 64 通道2 开始弹奏G3, 用力# V5 k( A. F' C1 j+ m- ]( l; }" f
96 90 76 32 通道1 开始弹奏E4, 钢琴6 z9 R$ |4 f: S- O+ O" h
192 82 48 64 通道3 停止弹奏C2, 标准3 L2 F6 t4 V1 C! n3 N6 f
0 82 60 64 通道3 停止弹奏C3, 标准
! L: ?% }7 R/ q, U) e* Y0 81 67 64 通道2 停止弹奏G3, 标准4 _0 G) M) n V, S
0 80 76 64 通道1 停止弹奏E4, 标准
: D7 s& k; f" W- _0 FF 2F 00 结束8 i( G4 M8 p" k3 T
整个格式0 的MIDI文件的内容,首先,文件头块:. K" x, u- O1 I0 d6 R" W
4D 54 68 64 MThd6 V" U/ k' G0 q, a2 `6 y
00 00 00 06 块长度8 Y. g1 |+ w: D9 F, R: ~' r
00 00 格式 0( G) \, b6 b# Y4 V* d( H( Y; u+ g8 c
00 01 一个音轨5 B7 o' O0 a0 r: E
00 60 一个MIDI时间间隔等于96分之一秒
7 `6 D/ O7 L$ q/ ^8 b接着,音轨块,* T4 K9 t w y* A
4D 54 72 6B MTrk
3 q7 y1 y7 x( |5 o9 N- @% F$ y00 00 00 3B 音轨长度(59字节)
. _- F& b6 Z' a; a时间 事件
) @9 V7 I# t3 Q- T- C+ l00 FF 58 04 04 02 18 08 拍号4/4
2 W* n) z/ o' F' p5 ?$ g1 {00 FF 51 03 07 A1 20 速度5 L7 N% z# Y* Z5 f9 c s, d1 j6 i! ^
00 C0 052 z' [% y8 f, \6 ~' D
00 C1 2E' ]' Y; M, ^! }& ]8 B. K% e
00 C2 46) ?# H ^8 s) w8 ~- N; J! f; B$ f
00 92 30 60
6 M+ e1 F. D3 ~: h00 3C 60
* k( d- [& p5 a- c! H60 91 43 40
5 O8 K8 y- v& r$ p60 90 4C 20
+ ^3 T0 V/ y' e& H81 40 82 30 406 t( [0 B6 E d4 N1 K
00 3C 40
; W5 p' p: I2 b5 w/ k% p) X00 81 43 40/ h& D" m! r+ U6 e* f$ i
00 80 4C 404 A6 Z1 t3 K- o3 K- h4 v
00 FF 2F 00 终止* L* Y: P' n) z0 O4 q3 a. e
类似的,可以把这个文件写成1格式。* h3 c! H9 `0 c: D' w
MIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。
+ O! H1 b( _" j3 BMIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。
! f! d8 ?& l6 g! h, v/ _6 q lMIDI格式由于其特殊的记录方式,受硬件影响较大。+ q6 v+ s6 t O) W% w
MID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。( n/ F. k7 _, x) c0 w
具体实例
0 B4 C+ j. z" Z* F3 W9 V6 z4d 54 68 64 // “MThd”
( W8 k$ J$ R) h1 x00 00 00 06 // 长度always 6,后面有6个字节的数据
6 o0 n5 X! E" S' a4 t00 01 // 0-单轨; 1-多规,同步; 2-多规,异步4 q4 g% \. G" n
00 02 // 轨道数,即为”MTrk”的个数$ h6 w- d7 E% c' Z
00 c0 // 基本时间格式,即一个四分音符的tick数,tick是MIDI中的最小时间单位
) q: M6 C: u( \5 C$ H" G( @4d 54 72 6b // “MTrk”,全局轨为附加信息(如标题版权速度和系统码(Sysx)等)0 G7 H1 B6 C" C6 s% U9 {
00 00 00 3d // 长度' c( x# `1 @2 t3 J
00 ff 03 // 音轨名称8 ?; I D4 q* J& e9 n h' h
05 // 长度4 a6 k. i/ z1 q, o' O# x
54 69 74 6c 65 // “Title”5 f. C$ \5 h8 U
00 ff 02 // 版权公告. [* O: s( O) q# ?' j
0a // 长度
* p4 z# z% H4 y6 l! h( `) r5 B43 6f 6d 70 6f 73 65 72 20 3a // “Composer :”& [/ `6 d1 }( Z# F5 ?1 ^! |
00 ff 01 // 文字事件
. F0 X& u7 V6 f1 G09 // 长度, |* N$ D K' D* g& |0 m$ m1 o
52 65 6d 61 72 6b 73 20 3a // “Remarks :”+ |2 U4 ~( R: F: U- G( B
00 ff 51 // 设定速度xx xx xx,以微秒(us)为单位,是四分音符的时值& ~" |3 t! ~9 v5 M" ~
03 // 长度
! B9 ]3 G! k" H+ `, e07 a1 20 // 四分音符为 500,000 us,即 0.5s o' Y3 S7 d- x; m1 a' k
00 ff 58 // 拍号标记& n- g D, h7 M9 E8 S
04 // 长度: [# P+ s) l2 y- t K6 p
04 02 18 08 // 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个三十二分音符。' b1 R V% C6 f; @3 R- y( {
00 ff 59 // 谱号信息; S9 ?0 R$ M, s
02 // 长度* D" n1 z+ z% u2 Y) m" |- \- {
00 00 // sf mf 。sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x 。mf指出曲调是大调还是小调。大调mf=00,小调mf=01。
; G: k* \0 x6 ?& K7 `- x2 l, j00 ff 2f 00 // 音轨终止; E7 u7 o( a4 D) Q& H
4d 54 72 6b // “MTrk”,普通音轨
! L3 _; _4 ~' c& M* X7 z7 M* E00 00 01 17 // 长度. E. a+ ]9 k; l F" C8 Y9 T- t
00 ff 03 // 00: delta_time; ff 03:元事件,音轨名称& b" k: N! {5 G( j3 H; i
06 // 长度9 g4 H! U& T1 z: l5 }) Q
43 20 48 61 72 70 // “C Harp”
+ j2 T4 K6 U( L& F! C0 N00 b0 00 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道0号控制器值为0。. w% q" Q2 M8 U5 W/ ^3 h, j
00 b0 20 00 // 此处为设置0通道32号控制器值为0。
2 x5 O2 [5 @5 C; ], t00 c0 16 // 00:delta_time; cn:设置n通道音色; xx:音色值。此处为设置0通道音色值为22 Accordion 手风琴。+ Q0 f8 M2 s" P1 M' a9 q& g% d
84 40 b0 65 00 // 此处为设置0通道101号控制器值为0。6 X* W: N' w4 }0 _
00 b0 64 00 // 此处为设置0通道100号控制器值为0。* }. J3 O; f3 k
00 b0 06 18 // 此处为设置0通道6号控制器值为0。
/ ?& e5 r! n4 x00 b0 07 7e // 此处为设置0通道7号控制器(主音音量)值为126。
3 ~$ Y3 x0 u. X! Q6 f' Y$ C3 H7 P. ?00 e0 00 40 // 00:delta_time; en:设置n通道音高; xx yy:各取低7bit组成14bit值。此处为设置0通道音高值为64。
/ G' G7 X! f' ~9 w00 b0 0a 40 // 此处为设置0通道7号控制器(主音音量)值为126。3 e% W! I5 o& Q
00 90 43 40 // 00:delta_time; 9n:打开n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度发出67音符。
; ~* g/ C' Z$ e- b, z, |81 10 80 43 40 // 81 10:delta_time; 8n:关闭n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度关闭67音符。$ B- E9 u6 Q- Z1 a
00 90 43 40' ~' w7 ^( q. i$ q$ t! w
30 80 43 40' g" v1 l& I j3 v# ^5 N8 [5 H8 Z
00 90 45 40
# a% N; D4 \* O7 k! U81 40 80 45 402 N" Q$ v6 {+ ^, }
00 90 43 405 d0 D: \) [; Z1 L, V
81 40 80 43 40
; W5 O5 b' l; {7 y0 w. X00 90 48 405 ]" O: ?% _5 X+ H2 G
81 40 80 48 40
' V# H) s+ `1 D00 90 47 40* p$ b2 P0 R" ?; w! e
83 00 80 47 40
/ M( C4 ]7 ~4 A7 w6 u1 @4 b3 _00 90 43 40* X! t8 _- d0 }/ i
81 10 80 43 403 `% f7 n( a9 m$ v: M+ ?
00 90 43 405 W- d% i) z6 t; d6 C( u: m' }/ G9 Q
30 80 43 401 W: ^, Z7 R3 z
00 90 45 40- B8 c7 Y" T9 r+ V3 {' a
81 40 80 45 40
! d$ h% d }6 @4 ]00 90 43 40
8 _3 d' z$ q# \# R& W7 x81 40 80 43 40
. l0 Z1 i0 n9 a; ?4 M' e/ K00 90 4a 40; ^0 N) C2 m# P- n: F
81 40 80 4a 408 c% @/ z$ ~5 q* ?2 `" b7 {
00 90 48 40
+ e! C; }1 Q! d0 D9 E |. X83 00 80 48 401 B# q0 @1 t& K0 d4 u7 ]4 c6 L: \
00 90 43 40: _# d$ d' Z2 p3 _# l3 `
81 10 80 43 40* N# d9 m S' J3 u& r
00 90 43 40' T }0 O, `# K
30 80 43 40* `' L1 A! b: D" I. o' x
00 90 4f 40% b' v. F. r. E+ k
81 40 80 4f 40
2 a6 G. M# Z7 U8 P2 l: j! p00 90 4c 40
, X4 y) B- c3 i( j6 {2 b' q' p7 }81 40 80 4c 40; i, z0 ?, u, k, R. m
00 90 48 40
. x# f* ~) o- A81 40 80 48 40
+ [2 D) j* b7 p9 v- _: O$ \00 90 47 408 V, q( v# a4 D; k
81 40 80 47 40
3 U" Z4 f# v, s! V: k00 90 45 40
% w8 h* t) ]! _+ g83 00 80 45 40, X. K1 m0 V. F9 _
00 90 4d 407 g( x3 d" y0 ? C. p: a l7 Q7 @
81 10 80 4d 400 L$ P+ `$ F: ~
00 90 4d 40
8 E1 [3 z4 N0 v/ T/ W30 80 4d 40
& \+ o; \) ]+ M! [4 \00 90 4c 404 }6 f# i! b9 Y! W
81 40 80 4c 40
4 P3 P+ i" p) U4 D. O( [3 _00 90 48 403 Q8 Z7 J) h& d: K. u' Y
81 40 80 48 409 V; _/ S% {) P1 O& ?' M
00 90 4a 40* B- M! g0 Q- _0 |% n
81 40 80 4a 403 _' Z, @ H1 P* x% P3 Q
00 90 48 40
2 G- `: G P4 |/ h; D& v0 d83 00 80 48 40' d7 O1 w* O, ?- R0 J" j
01 b0 7b 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道123号控制器(关闭所有音符)值为0。
& Q/ g3 s1 ]9 K$ r00 b0 78 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道120号控制器(关闭所有声音)值为0。+ U0 }3 E9 r0 X. @$ M( J; M
00 ff 2f 00 // 音轨终止 |
|