|
序列/音轨的名称+ ~6 s+ B$ V% X( G8 s: n M
FF 03长度 文本
9 F& C9 F1 Z6 e; A5 J' j乐器名称/ f$ w. f; v/ e& W, l; ^
FF 04长度 文本$ Y6 y; d. \% c7 m( w+ G/ f1 f
说明该类型的乐器将用于在这一条音轨中使用。
8 k8 k7 s7 ~) P* \: n, Q歌词 Z5 i% k! h# p' z8 }. Q+ ~
FF 05长度 文本
4 I+ {8 A, w+ w$ d写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间1 T, S0 v. C% U0 S
标记' `! }2 t! P( ] m- y3 ?
FF 06长度 文本- m+ e5 w0 ]+ y- Y, b; Y
通常在一个格式0的音轨,或在格式1的第一个音轨。- v f; c* b0 ?* w, v* I
注释点
6 [* x7 N6 m2 {FF 07长度 文本
U% n# l* a! h) a* L! Z描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件 K" r6 A3 C9 r; e, } r, @7 B& C
音轨终止' V' h( _8 z5 G$ s% }
FF 2F 008 N5 O& j2 q/ _! a
此事件必须的,以便确定的结束点。" C6 B$ f3 h) r5 [
设定速度,以毫秒(ms)为单位,是四分音符的时值3 |" t5 n2 x" {* ?9 L" q
FF 51 03 tttttt
5 s" U" L8 |5 q9 ~3 X. o这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。# h1 p! x7 O4 B5 p5 U1 {- @# @
SMPTE 时间同步" M9 c$ n" H4 r4 H2 K8 p
FF 54 05 hr mn se fr ff
* `% D) l) E. J5 a# u! a/ r! t这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。. x) R" k6 X4 z; i, D* c) _2 _
拍号标记( Z8 f; N+ o# F4 @' q8 k8 ]* x
FF 58 04 nn dd cc bb
3 D( X9 \# l2 E% n( g因此,完整的 6 / 8拍号应该表示为
& ?; T, N1 {* H+ r$ KFF 58 04 06 03 24 08
. j; m6 a+ ~+ N. n6 a# s+ j3 ^三十二分音符。
. S# i6 X# T0 }; i" j谱号信息
$ Q1 h0 u @, gFF 59 02 sf mf
# q1 F/ R e. G' l/ ksf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。 也就是说,升号数目写成0x,降号数目写成8x: n, v6 R$ a; V5 f9 ^+ g; K
mf指出曲调是大调还是小调。大调mf=00,小调mf=01
5 S' m, U/ U+ _* ^; b对于序列器的元数据
% z# ], g, z- R J" TFF 7F长度 数据
8 k7 P& L3 O7 A- d% [特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。4 M# g$ S! E4 \1 d3 |) O x! c1 p' ]
作为一个例子, 把一个MIDI文件摘录如下所示。9 o1 Q; b5 b5 O2 }
内容的MIDI流所代表的这个例子,细分在这里:+ c, A) i) P) ], m
Δt(十进制) 事件号(十六进制) 其他数据(十进制) 说明
. z# P: Z# D2 R) m6 ?0 FF 58 04 04 02 24 08
( d b. T/ @9 H5 \/ r, d0 FF 51 03 500000
, \6 U% o" L- F. e( M0 o0 C0 5 通道1, 音色5
- l; [2 E0 ?* w& {5 M2 {0 C1 46 通道2, 音色46
# Z1 |7 `# T% W# q+ e8 a+ o/ W0 C2 70 通道3, 音色70
1 p- B. n' {! v# O0 92 48 96 通道3 开始弹奏C2, 用力
% k" G6 r {& x0 92 60 96 通道3 开始弹奏C3, 用力
5 |8 S! M( F$ C; `) F V96 91 67 64 通道2 开始弹奏G3, 用力# d; }8 P6 k, n X, J+ M% a
96 90 76 32 通道1 开始弹奏E4, 钢琴
, Y2 s V5 U/ h. I192 82 48 64 通道3 停止弹奏C2, 标准
2 c, ^7 t5 W4 t# t0 O0 82 60 64 通道3 停止弹奏C3, 标准% h% F6 M* b( F
0 81 67 64 通道2 停止弹奏G3, 标准8 n0 ^. N) P! |; Q
0 80 76 64 通道1 停止弹奏E4, 标准' a$ g7 `* x' A% s6 R! w2 Y
0 FF 2F 00 结束
; ?' b1 \/ H8 w7 k; |整个格式0 的MIDI文件的内容,首先,文件头块:
, k- Y8 j7 o# i! `: D- k5 `4D 54 68 64 MThd
4 q( M7 s% b7 A [00 00 00 06 块长度! w7 P& e# S5 H7 F6 Q! m& S
00 00 格式 0$ P; Q V3 U$ i
00 01 一个音轨
( W- E6 e0 S1 a) g00 60 一个MIDI时间间隔等于96分之一秒/ \3 o: `+ O2 Y7 v
接着,音轨块,
: `" L( C2 `% ?$ D% {: ^; ]4D 54 72 6B MTrk
4 T# u/ q- D9 y; w: j# e00 00 00 3B 音轨长度(59字节)
; A1 x" Q. e, _+ [" v& n0 T时间 事件5 l) X; L& m' D
00 FF 58 04 04 02 18 08 拍号4/4) ~; E; \# A/ m1 y$ u& W6 p+ d
00 FF 51 03 07 A1 20 速度
- ?) F! `- G1 B/ S00 C0 05
, s( D3 X0 t. k8 V00 C1 2E- ^2 x$ [, G2 u. z% V; F& ]9 u
00 C2 46% s- o( ^% f' O) u
00 92 30 60# v9 R* p% S" H: n
00 3C 60. `/ N9 x; x* ~7 O/ p
60 91 43 40
9 U- p0 R! I8 N0 Q60 90 4C 20
# v% C' `2 Z! j& h; n0 G81 40 82 30 40
, w, w- _! J0 w/ v2 N6 r, h00 3C 401 J0 J( s2 B/ v( Z. d$ k
00 81 43 40
* ~: }# o4 [( R+ e$ [00 80 4C 40+ V% C, K5 G: O4 Z
00 FF 2F 00 终止* I5 f! ]. R+ b/ l8 k. J7 S$ w; Q
类似的,可以把这个文件写成1格式。8 M9 j! E, \' r- a: \+ k# W
MIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。
5 q* Y9 v- e, D! P0 O! { I- eMIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。6 q) `# x( ?, f" Q* {% e
MIDI格式由于其特殊的记录方式,受硬件影响较大。
& I6 ~2 B$ x1 m& v- X; QMID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。8 y3 n4 g" G! n7 t( G( a
具体实例
( u1 J9 V" L$ I0 u ~- s/ G4d 54 68 64 // “MThd”
& f* |$ I8 b: ]. ]; D# f00 00 00 06 // 长度always 6,后面有6个字节的数据
& s. X# K N, P* G00 01 // 0-单轨; 1-多规,同步; 2-多规,异步. x5 _8 \9 t! Q: }4 S
00 02 // 轨道数,即为”MTrk”的个数
0 X7 \5 S2 l7 f+ v00 c0 // 基本时间格式,即一个四分音符的tick数,tick是MIDI中的最小时间单位
/ I4 O0 k5 Z! I# \7 k4d 54 72 6b // “MTrk”,全局轨为附加信息(如标题版权速度和系统码(Sysx)等)
" c" f: k5 F0 Q( C0 @- u00 00 00 3d // 长度
/ W4 N+ ^' f, p00 ff 03 // 音轨名称9 Z# ~/ b" u9 {# A7 h
05 // 长度" { |8 i2 Q1 Y" v! G3 X
54 69 74 6c 65 // “Title”
8 Z: }; e) L- H. S# a% H00 ff 02 // 版权公告- I7 `% c. |2 ]9 ?
0a // 长度
# W/ s" Y. L7 T0 ?) r) x0 Z43 6f 6d 70 6f 73 65 72 20 3a // “Composer :”2 {, O" K- A, S% Z( E0 S& |& c
00 ff 01 // 文字事件
+ e! r8 J$ } `6 l- {09 // 长度
9 S6 h# j- z, n8 \52 65 6d 61 72 6b 73 20 3a // “Remarks :”
6 S8 b( s* x4 A1 x( V00 ff 51 // 设定速度xx xx xx,以微秒(us)为单位,是四分音符的时值( E( y5 ^/ {9 S: J4 \
03 // 长度& V; n2 I/ q/ `2 `2 R9 { j, ~
07 a1 20 // 四分音符为 500,000 us,即 0.5s* e7 Y3 }5 q Q. h' O
00 ff 58 // 拍号标记6 r* I0 J) b: l) a) w
04 // 长度
# N' i8 I( W. o3 I04 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个三十二分音符。, m6 c V) T M. Y1 I$ L* H$ S5 |
00 ff 59 // 谱号信息
2 q: t8 [ H: l" A" o; s02 // 长度7 T! [, T2 j3 r$ w& O8 V
00 00 // sf mf 。sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x 。mf指出曲调是大调还是小调。大调mf=00,小调mf=01。 k x- q) w0 ]% a/ e
00 ff 2f 00 // 音轨终止
8 D! q* l# [& \' X4d 54 72 6b // “MTrk”,普通音轨0 K6 {# |* r& V" c
00 00 01 17 // 长度, j4 a [ F' K( A/ \. P
00 ff 03 // 00: delta_time; ff 03:元事件,音轨名称
5 W! x5 {! t0 W# |06 // 长度
3 Z6 B5 I! G0 N$ B2 I7 {43 20 48 61 72 70 // “C Harp”
) T0 v( @" e9 k0 @* j) X& n00 b0 00 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道0号控制器值为0。
8 L' o6 J2 ^7 R* N0 @0 B! H, L/ d! y9 v0 D00 b0 20 00 // 此处为设置0通道32号控制器值为0。 l% B; f5 `9 ~& x
00 c0 16 // 00:delta_time; cn:设置n通道音色; xx:音色值。此处为设置0通道音色值为22 Accordion 手风琴。
$ m R( X) l- a& @8 D) U84 40 b0 65 00 // 此处为设置0通道101号控制器值为0。7 \$ r% j% W4 j' x" }3 Q5 ] F
00 b0 64 00 // 此处为设置0通道100号控制器值为0。
. @) S4 K; b2 t( C00 b0 06 18 // 此处为设置0通道6号控制器值为0。9 t" x5 E& v! F) R+ W
00 b0 07 7e // 此处为设置0通道7号控制器(主音音量)值为126。
+ C! H/ g# d- \+ X, v z7 l00 e0 00 40 // 00:delta_time; en:设置n通道音高; xx yy:各取低7bit组成14bit值。此处为设置0通道音高值为64。
9 X1 t# ]6 ^2 o3 |' F00 b0 0a 40 // 此处为设置0通道7号控制器(主音音量)值为126。
$ U4 Z" c. X$ c2 \* D+ U00 90 43 40 // 00:delta_time; 9n:打开n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度发出67音符。. c$ n. K/ s7 [" P# m1 r# n0 |2 |
81 10 80 43 40 // 81 10:delta_time; 8n:关闭n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度关闭67音符。
) E/ B; g$ k' W8 |* o- f00 90 43 40 a3 C7 }6 }( @7 i6 ?% b7 ?
30 80 43 405 Y$ j: c2 ?7 W! a0 W5 Y* n$ ?
00 90 45 400 H, L3 x1 M( c4 @6 r& }
81 40 80 45 40
! E. M4 `" v0 R! U' K00 90 43 40
% S2 M$ ~* T0 Z' \81 40 80 43 40
& m. `& D- U A" {1 }% m$ Z00 90 48 40- ^* K/ c0 g# O& ^
81 40 80 48 40
+ r2 g: p* s, o: Q/ @8 x) h00 90 47 40
; ~' R+ ^. n/ Y7 _- ^83 00 80 47 40, D5 ]0 s. b0 I% V9 h( D7 k
00 90 43 40% { Z2 j# H6 g8 a, F/ s* o7 H+ `
81 10 80 43 40; x# N9 P Q: N1 X
00 90 43 40
5 h9 T4 C% M6 R+ p! B1 f7 r30 80 43 40& G7 F5 E4 X4 B3 N' ], b. s
00 90 45 404 Z4 X$ F" e. q2 F+ R6 h3 p- U" j
81 40 80 45 40
# P& k p4 }; b; O" h% k: |- e8 M* S9 D00 90 43 40
5 U& M2 ^+ P2 x* ?; M$ W81 40 80 43 403 R& y s: @. [; O
00 90 4a 40
0 {8 y" N4 z0 n- k( R1 |" w81 40 80 4a 40
7 k V) ]2 W& A2 i! Z8 l- O) k" P00 90 48 40
2 U, g4 K! P- X$ J- O83 00 80 48 40
' B) z- S- d6 y5 J' Y4 s# n/ I00 90 43 40! p8 {7 D: H4 K6 ?4 z
81 10 80 43 40! g2 R6 P) k. ?5 t7 T0 |: H( K
00 90 43 40
b6 o. ~( |0 @1 G+ D0 ^9 z9 O5 L- [6 |30 80 43 407 g4 y1 n. n% u; y. Y$ @
00 90 4f 403 p8 T( J# f3 J! S. ~/ C6 s
81 40 80 4f 40: p4 g' i/ {& B! F4 X+ L
00 90 4c 40! D. h4 x1 ]1 s' v
81 40 80 4c 402 }7 o8 R) J, J: `( `& n0 d; p3 ^
00 90 48 40
4 Z1 ?& W r. S* G1 t5 Z9 J81 40 80 48 40- f+ ]+ N4 k( P; L" @ l, P5 Y
00 90 47 40
' B' P9 j4 {; @4 s& n P81 40 80 47 40, y! R; q9 ?+ i4 v# V4 G4 [4 e
00 90 45 40
3 i7 h. s$ B+ G4 M83 00 80 45 40
- D4 g" F- ?5 p; k8 e00 90 4d 40
2 f* E, [0 q: K5 c3 h+ B81 10 80 4d 40
4 V3 d# \" N4 j! K+ x2 g# r. K00 90 4d 40+ p; F0 d+ I- l( C% i' M, c
30 80 4d 40$ ?8 o6 |3 A: K/ A3 l& I% [! X k4 N; M: U
00 90 4c 40
$ U& Y# d1 O. u3 G81 40 80 4c 409 ?) u: K/ X3 {- l# H7 p. q2 C% \
00 90 48 40
4 ~# x4 k- d+ E) p- v2 Z- @81 40 80 48 40
. ]! j* _& Z2 w4 r& `00 90 4a 403 k, h) Q' v6 O4 \% a6 x0 _
81 40 80 4a 401 t9 v6 ?+ _. l( ?
00 90 48 40) k" g/ V7 s0 J4 @8 w- g
83 00 80 48 40
1 Z% _8 d( t% U* z. k. a* Z01 b0 7b 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道123号控制器(关闭所有音符)值为0。! c% Q% o" R, P% I# z9 e
00 b0 78 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道120号控制器(关闭所有声音)值为0。$ G% i0 m* R) ~1 d9 {" e% d8 X
00 ff 2f 00 // 音轨终止 |
|