|
|
序列/音轨的名称- [$ P7 m( s8 k$ H5 x/ g$ J
FF 03长度 文本* { g- U/ p5 O4 I% A
乐器名称9 k9 ^9 T* M0 Z2 s/ A* V
FF 04长度 文本6 y4 K* k2 m! X7 Q% j3 Z( V- }
说明该类型的乐器将用于在这一条音轨中使用。" i. E5 z- S' U! ]8 c! G3 F
歌词
% G* k" S |. Y% eFF 05长度 文本
+ ] u: s+ ?7 b4 ]+ `1 w, l写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间4 v- j, S0 P/ z$ ~
标记! V: z/ v1 f6 H
FF 06长度 文本
) t; Y1 ~( P: D' i通常在一个格式0的音轨,或在格式1的第一个音轨。 x* r7 y- [: \& }/ ^; ~
注释点
& D, G) K# Y5 E. eFF 07长度 文本% C/ H s4 [' e
描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件7 L9 ]7 T1 c/ a+ {* k( F L" Y
音轨终止
5 ]4 [4 h! O' D zFF 2F 00
0 Q* Q8 M9 G% I9 ~9 ?. D- u此事件必须的,以便确定的结束点。
& W# }0 e/ {% z. n设定速度,以毫秒(ms)为单位,是四分音符的时值
: K/ _- p ~% }FF 51 03 tttttt& E! U( b* k; ~% a1 n# t* r5 m
这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。
& L! _& K% ^$ a' ?* uSMPTE 时间同步
$ P! R2 |0 | ]/ h+ c; \- G# nFF 54 05 hr mn se fr ff
& k( @6 j) |8 Q! ^. j这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。/ U3 \1 n6 T6 O) S9 p) H
拍号标记9 A( B# l* s- U( g7 m9 m8 w
FF 58 04 nn dd cc bb6 R8 J8 k7 ~9 ^- C" N
因此,完整的 6 / 8拍号应该表示为9 L5 }$ ?8 Q+ ?$ T& |
FF 58 04 06 03 24 08
6 ~' j- ` h' A4 h9 j- C. h三十二分音符。% h! r8 w" _; D
谱号信息5 Y3 |* {- x i" _$ ~+ Q' ^+ r" ]
FF 59 02 sf mf
. n6 O5 g' q: s# v# _sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。 也就是说,升号数目写成0x,降号数目写成8x- l( m, W- X) H, O( j( y
mf指出曲调是大调还是小调。大调mf=00,小调mf=01
0 U2 W6 V5 g, ]7 C8 r对于序列器的元数据7 K' j- F% m$ [7 P5 s& k Y9 \
FF 7F长度 数据 }6 ~* ^, d% p! x2 x
特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。
% B$ a+ o4 R0 w8 m7 \0 g作为一个例子, 把一个MIDI文件摘录如下所示。
$ c% u8 a, d! o- v, n5 V1 a. R内容的MIDI流所代表的这个例子,细分在这里:
! M- N( @" I' EΔt(十进制) 事件号(十六进制) 其他数据(十进制) 说明, r. Q) a& ^) H0 t, K6 M
0 FF 58 04 04 02 24 08/ b. |& U+ i: [
0 FF 51 03 5000001 \2 O! `; u! y# S1 ^' H9 I; a! ?
0 C0 5 通道1, 音色5- ^- f0 {0 ]5 r
0 C1 46 通道2, 音色46
) }/ J* B/ v4 p0 C2 70 通道3, 音色701 O& h3 e+ |% \5 }1 n
0 92 48 96 通道3 开始弹奏C2, 用力
: e9 t( O% w; O6 P$ t$ e. \8 _0 92 60 96 通道3 开始弹奏C3, 用力" o2 ]8 q0 L+ J. Q# C( d m% \/ \
96 91 67 64 通道2 开始弹奏G3, 用力" f' y& A$ Q6 K# g$ I0 n
96 90 76 32 通道1 开始弹奏E4, 钢琴# \6 n9 @. f& ]6 ?
192 82 48 64 通道3 停止弹奏C2, 标准; W( B3 w$ W5 F+ ^6 W( E
0 82 60 64 通道3 停止弹奏C3, 标准
/ F" _# F1 v1 a4 y1 k0 81 67 64 通道2 停止弹奏G3, 标准# H- d; S/ v" ]" T
0 80 76 64 通道1 停止弹奏E4, 标准
* L0 S6 `& f9 v: [0 a: l* I0 FF 2F 00 结束
' F3 J* i% i0 O; g2 h整个格式0 的MIDI文件的内容,首先,文件头块:2 I& t, p2 ^# D K- X
4D 54 68 64 MThd- ~. T- F# ?0 J, H4 F0 Z- [/ E2 A
00 00 00 06 块长度% }5 @1 J- `. p1 Q
00 00 格式 06 J3 a" N: h1 x9 S4 Y8 ]
00 01 一个音轨
: U1 m* F. P# `9 r: C! b4 q) }2 L00 60 一个MIDI时间间隔等于96分之一秒
* h5 w: i1 G% @; O. L接着,音轨块,: j; d o2 F- }7 X
4D 54 72 6B MTrk
! q( P/ z. G; D; O00 00 00 3B 音轨长度(59字节)0 x9 [* P' ^/ a
时间 事件3 U. `8 k$ d) a! v# P* s+ ]3 m
00 FF 58 04 04 02 18 08 拍号4/4$ w& W: m0 \6 U
00 FF 51 03 07 A1 20 速度
7 K: G7 ]) T% f' I00 C0 05
8 v x" u3 W% H6 |' {: A9 W# e5 ?00 C1 2E
0 T, M9 c% p6 \1 `6 d00 C2 462 E) @# _7 t) {) |; A- e
00 92 30 60
( H. D6 B3 D( ~00 3C 60
7 G4 d8 E9 I& M# u. s60 91 43 40: m- E1 n4 s$ `- R- Z" T
60 90 4C 20
! [* H1 [1 L8 C: h2 E8 y1 ^81 40 82 30 40: g C( q/ I, e+ |* S1 I, _; ]
00 3C 40, ?5 c+ X; e( d- e; o" O& n/ ^
00 81 43 40
8 f: o. r1 A- _5 `4 `) j( v: y00 80 4C 40
* y3 z9 x9 B+ _ b* w- g9 X00 FF 2F 00 终止
% f$ ~, V5 ~$ Z3 N& r类似的,可以把这个文件写成1格式。4 F6 h" X( f' S7 D1 y
MIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。- b2 z1 o# U7 F& s4 z6 S
MIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。
9 S* R/ M; }& Q3 ^1 n9 aMIDI格式由于其特殊的记录方式,受硬件影响较大。7 z1 ?& k$ A1 ~
MID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。
" M! a1 ~- D. w! M9 _具体实例
+ h& Z9 S6 \; L4 c' h0 \4d 54 68 64 // “MThd”
* o4 I$ F5 Z5 w! }4 G) \/ ?00 00 00 06 // 长度always 6,后面有6个字节的数据
+ X% q& V9 D) t& U( H, n00 01 // 0-单轨; 1-多规,同步; 2-多规,异步: B' h C1 t4 X
00 02 // 轨道数,即为”MTrk”的个数. z8 c6 u T$ H1 Q" j4 s
00 c0 // 基本时间格式,即一个四分音符的tick数,tick是MIDI中的最小时间单位
$ S# I+ Z" f) S* V1 u4d 54 72 6b // “MTrk”,全局轨为附加信息(如标题版权速度和系统码(Sysx)等)
. K5 y3 ~8 G& t1 b00 00 00 3d // 长度: |# h6 B7 R5 C/ e
00 ff 03 // 音轨名称, h! g. Z n* a, L; Y
05 // 长度, A6 r3 \' R. p# U/ Z; l
54 69 74 6c 65 // “Title”' d; u% O! c$ Y$ U+ s
00 ff 02 // 版权公告- G" c9 A# r: e8 m' J9 Q
0a // 长度
$ q" [$ W& c2 T43 6f 6d 70 6f 73 65 72 20 3a // “Composer :”
8 V8 L7 f/ ?% c00 ff 01 // 文字事件) ^" o8 t$ I/ J# B
09 // 长度
+ ~5 y9 ]" Q! K) E$ d+ X: X52 65 6d 61 72 6b 73 20 3a // “Remarks :”" h% o# [6 a" M! m+ {+ d
00 ff 51 // 设定速度xx xx xx,以微秒(us)为单位,是四分音符的时值6 m* n+ M, k. I5 k
03 // 长度
9 {7 E/ x2 c5 _2 G# k! |07 a1 20 // 四分音符为 500,000 us,即 0.5s
/ |, t! U: E, {. R; A1 Q00 ff 58 // 拍号标记
' \. G8 Y/ j, L+ ]! r04 // 长度. W: _3 [1 T( e& H- p0 r- 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个三十二分音符。
& ]0 q# I8 Q; [1 M00 ff 59 // 谱号信息
4 n8 ]2 b& n1 G: [ m02 // 长度 s. B9 P- S% q& A8 R; V, ^
00 00 // sf mf 。sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x 。mf指出曲调是大调还是小调。大调mf=00,小调mf=01。9 O+ p _ {& u* K2 V
00 ff 2f 00 // 音轨终止5 R6 ?2 e$ l) ], W3 o4 s
4d 54 72 6b // “MTrk”,普通音轨, k# ~8 E1 P* Q& q) `7 @ b: \
00 00 01 17 // 长度
# ^# z' s% I2 i4 ]9 C6 N00 ff 03 // 00: delta_time; ff 03:元事件,音轨名称* W' h+ V% S# t0 s c+ I- L- W
06 // 长度
$ s' a8 j% f% G+ n* X# u43 20 48 61 72 70 // “C Harp”# ?5 Z$ E8 k6 Z( @" l; T
00 b0 00 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道0号控制器值为0。$ g! G6 a9 z' d; W; G. d
00 b0 20 00 // 此处为设置0通道32号控制器值为0。
, y" R# P/ E; ^7 U" t/ W00 c0 16 // 00:delta_time; cn:设置n通道音色; xx:音色值。此处为设置0通道音色值为22 Accordion 手风琴。
* h- \$ n; m6 i, I84 40 b0 65 00 // 此处为设置0通道101号控制器值为0。. W, [, S6 f% O+ I0 X
00 b0 64 00 // 此处为设置0通道100号控制器值为0。( y: U+ U8 a8 `6 E
00 b0 06 18 // 此处为设置0通道6号控制器值为0。
7 V' R0 Z7 R6 L* J5 [6 s4 V* e! b00 b0 07 7e // 此处为设置0通道7号控制器(主音音量)值为126。
, H# w+ i7 S: a+ b00 e0 00 40 // 00:delta_time; en:设置n通道音高; xx yy:各取低7bit组成14bit值。此处为设置0通道音高值为64。# g; r0 b( H0 @, s* m
00 b0 0a 40 // 此处为设置0通道7号控制器(主音音量)值为126。# b& Y) p4 _' _
00 90 43 40 // 00:delta_time; 9n:打开n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度发出67音符。
# `' ~. T) f/ ?) V( Q" h) d81 10 80 43 40 // 81 10:delta_time; 8n:关闭n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度关闭67音符。, Y5 Q C* O6 }+ {, Q
00 90 43 40
8 ?" Q1 X2 G' [+ o$ ^) d30 80 43 40
* T, k. Z S6 g& y3 t2 ~- R" N00 90 45 40, S. F/ O v- J9 L( y
81 40 80 45 40
! Y; | y% k. y' W: a, t" e00 90 43 409 a( `8 e) Z# Y- |( F. _3 n* V
81 40 80 43 40
% L) n/ x l+ ?& i. L# A00 90 48 40. Y1 q) c( S) z' k" W7 o
81 40 80 48 40, u. K# j' T3 M
00 90 47 40
( ^% v G( \8 t* Q3 o83 00 80 47 40
6 X) Z1 |# j. _( R* g" y00 90 43 409 u9 T0 y3 R3 j f0 t Z3 {9 `
81 10 80 43 40
- b% }5 I" ^& O5 N4 }5 j8 q4 O7 w. A00 90 43 40
& E" ?1 B. f4 @* n' [2 q30 80 43 404 U3 n Z# J& Y6 Z9 P# A9 V! G
00 90 45 40
4 I8 K) l/ N; i- W9 j81 40 80 45 40# U- h" r: h5 e2 e) d6 y
00 90 43 40
4 D% c3 \+ y* y8 U, W81 40 80 43 40: e6 X7 f" n- p" z9 H! O4 l( [
00 90 4a 402 [& L2 |: \ k* t7 N
81 40 80 4a 40) X' u/ j6 G0 o, J+ |
00 90 48 40
$ j h$ Z( |% p- e" a5 f0 Y Q9 X/ I83 00 80 48 40
# \2 I/ `# \/ I" u+ C- r00 90 43 40+ `5 \! O2 { h4 Q
81 10 80 43 40
4 j, `5 l* P1 t3 p; w00 90 43 408 l3 v K: n# T0 Z. Z( d
30 80 43 40
* E# i* W$ W9 w00 90 4f 40
4 |) ?1 `0 U' ?/ V. W81 40 80 4f 40# l& T- p: A% l7 \( M
00 90 4c 40
7 k# T; j0 d8 `% L% J81 40 80 4c 40
0 v) ~; n" n$ @00 90 48 40
$ ]: F1 e4 e4 R1 |8 ]9 X$ K81 40 80 48 40( u M2 o+ k9 H1 ?9 A3 S
00 90 47 40
2 R( h0 E) G; t: M) @81 40 80 47 40
2 x6 B( x# m% e7 Z00 90 45 40# Q& P: M. E* @" A+ u
83 00 80 45 40
& c( V$ A% Z5 a+ U* Q) D00 90 4d 40
9 @; F: A! V0 J0 q( S81 10 80 4d 40/ ?2 _* v) g ^5 a; {
00 90 4d 40
- G- U9 H0 R3 {. Z! s% U30 80 4d 40
; \. G. ]7 j% J7 l1 a. C* Q3 b$ B00 90 4c 403 v: a3 ^3 F7 Y$ s" _0 o7 _! ~
81 40 80 4c 40. {5 N/ s) p2 C* Y5 N5 x
00 90 48 40
8 {8 V! |' k- I/ N81 40 80 48 404 h( I- R0 |+ C0 a1 V7 ?9 m% g
00 90 4a 40
# U/ V# K: A5 s* g9 `, i81 40 80 4a 40
% m8 s" P" o1 O$ G( U/ h00 90 48 406 Q U% K! }5 x$ Y z3 y
83 00 80 48 408 j& N: B1 d1 b4 x
01 b0 7b 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道123号控制器(关闭所有音符)值为0。
+ j" j2 c& t1 ] d00 b0 78 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道120号控制器(关闭所有声音)值为0。" p S- A* U3 i# Z3 X, n2 _
00 ff 2f 00 // 音轨终止 |
|