|
序列/音轨的名称5 c, D: B4 Z% T& G/ @
FF 03长度 文本 n# M' h' j! B, C) H* N% J6 l+ k
乐器名称
; k0 l3 k8 W% |FF 04长度 文本
. j: U0 h* n/ F! y+ M, c3 Z# Z说明该类型的乐器将用于在这一条音轨中使用。7 G" `- q+ j T* }/ t/ [$ m
歌词* s* z7 t! O/ z* b5 V
FF 05长度 文本3 t0 f$ b( x: s7 ^6 e9 L+ {
写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间8 L! P. k. j, B/ q- G
标记
& s$ b4 I/ A: K/ d) C4 e& W4 |FF 06长度 文本8 V- |( `# A$ ]+ `2 m; ]7 U
通常在一个格式0的音轨,或在格式1的第一个音轨。2 q5 d- |3 m) P+ ^( p6 h8 u# Q+ G4 k
注释点& p5 M5 v; K' z- D( a! y% Q E' Q
FF 07长度 文本/ Z; ^0 c; j5 M1 S% z
描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件
) x5 T" W4 X- p1 @4 z1 Y' X) ]6 S音轨终止
% r2 }- y- M1 k% hFF 2F 00
, g4 c1 s! K2 y% j* T' ^此事件必须的,以便确定的结束点。4 M e/ v+ n1 \& Q7 c8 E
设定速度,以毫秒(ms)为单位,是四分音符的时值
5 ^& v1 { Y6 _1 z. H1 m: aFF 51 03 tttttt! {+ U( X1 A! l8 E
这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。
$ t/ y. K* Q6 x! d* `3 }4 RSMPTE 时间同步0 p9 v$ t! p. | N3 J$ I3 x' h) F
FF 54 05 hr mn se fr ff
: o0 V$ A% A% j' ~4 q8 J这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。9 G* Z4 ^* b$ b% N- Y2 I# r% x& b
拍号标记! i# D# J6 ]; q/ ~. a- \) t$ G
FF 58 04 nn dd cc bb! M- b; F) u" z1 t
因此,完整的 6 / 8拍号应该表示为
5 }9 {5 S8 }4 W5 AFF 58 04 06 03 24 08' @& }- D, m. ^
三十二分音符。
8 H' E5 Y. w, p# w7 h8 m$ S谱号信息) F" v0 Q. q+ g4 E
FF 59 02 sf mf
0 f2 n% O) d) ~( `* a2 Fsf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。 也就是说,升号数目写成0x,降号数目写成8x1 f9 u. c1 [4 v! S# c- c+ k! T
mf指出曲调是大调还是小调。大调mf=00,小调mf=01. K; _" z8 @2 n ?2 |4 C D
对于序列器的元数据
, u2 t. i0 B& a$ y3 {' l3 MFF 7F长度 数据
2 m0 H' W* \. D; @6 x1 X ?8 E特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。6 e4 _7 w( u2 S6 U, k* [5 j
作为一个例子, 把一个MIDI文件摘录如下所示。
( j3 l* o8 z [$ q+ L内容的MIDI流所代表的这个例子,细分在这里:
/ w8 t. I3 }% w' a& S S# p! U- w! }5 FΔt(十进制) 事件号(十六进制) 其他数据(十进制) 说明2 O6 ?( H H, V2 h: X
0 FF 58 04 04 02 24 08
7 a. H* G5 n; L1 [0 FF 51 03 500000
, G- I @1 M, E! F+ {( K0 C0 5 通道1, 音色5
9 B2 x4 K+ ^' V( D5 K% T4 J0 C1 46 通道2, 音色461 F+ D4 v7 i* ^. ^# E0 I8 V
0 C2 70 通道3, 音色70. Z) N& O0 G& \: D, g
0 92 48 96 通道3 开始弹奏C2, 用力
" Z! F$ X6 f/ |/ C5 [( S0 92 60 96 通道3 开始弹奏C3, 用力% E* E2 U" G' X
96 91 67 64 通道2 开始弹奏G3, 用力
3 @3 B B s. r9 ~- h96 90 76 32 通道1 开始弹奏E4, 钢琴
9 M/ {( @+ |- t9 e- H1 F192 82 48 64 通道3 停止弹奏C2, 标准
" k, V4 h5 a3 ~( h8 G9 B0 82 60 64 通道3 停止弹奏C3, 标准+ k6 V9 g y1 D7 D3 e
0 81 67 64 通道2 停止弹奏G3, 标准" j7 T/ G) \) _; K
0 80 76 64 通道1 停止弹奏E4, 标准
m' B6 U& n( N* D+ e2 l: @0 FF 2F 00 结束2 C+ l+ J S1 V, O! s4 [2 M+ w1 N
整个格式0 的MIDI文件的内容,首先,文件头块:# ^$ v; e6 k& F- X9 {
4D 54 68 64 MThd" E/ |" `/ E- T* b* f$ K
00 00 00 06 块长度4 W+ G; [: V% Q' @( V
00 00 格式 0
3 w8 E0 M8 F2 a& A/ g% _) y00 01 一个音轨& }$ V& ?8 _& n5 B9 m. M
00 60 一个MIDI时间间隔等于96分之一秒
( z% Z. W/ Y! `$ o8 O) p接着,音轨块,6 g$ b$ v% p4 ? H' X4 _
4D 54 72 6B MTrk
' V; k5 A: j$ p7 w" U00 00 00 3B 音轨长度(59字节)# V/ s L* f0 n5 |0 N* m) y
时间 事件
( U8 ?& j9 b) M( ^" F00 FF 58 04 04 02 18 08 拍号4/4
$ r- F4 ?4 C9 I* B00 FF 51 03 07 A1 20 速度
]0 y+ m$ a1 _. n \) g00 C0 05
5 Z) |9 ~( S1 y# J+ c7 h1 n00 C1 2E( u! _0 n8 l$ a% |# Z0 g
00 C2 46
- }2 }; ~. s: n8 {00 92 30 60+ Y2 K8 D* {5 Q& e6 f
00 3C 60
6 J7 O" {: m8 L% B& u60 91 43 40
' P( O0 _, _' {* {/ x60 90 4C 20
* i% S3 z3 q) ~5 d5 ]& `# o81 40 82 30 40 w3 m: |2 Y h6 E( Q" Z$ @( b$ |
00 3C 40
! w) P/ ?9 ^' o. O00 81 43 40
0 M9 R& d7 j" g( Y& S2 O00 80 4C 40
2 K; R5 g8 q( d00 FF 2F 00 终止* N L5 e) w+ x5 j6 I
类似的,可以把这个文件写成1格式。
, }& n9 X. g: r4 r8 Q9 D+ x! M. pMIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。6 o, x% H( @% U2 m W
MIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。
* q! d. s* S2 r: ?8 c; uMIDI格式由于其特殊的记录方式,受硬件影响较大。
! K( N- _1 v& f( IMID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。# }8 I, K! V# H7 ^
具体实例8 H/ y; \/ @5 u, B1 d$ w3 @) c
4d 54 68 64 // “MThd”
7 p! L. s( p8 J8 `$ A00 00 00 06 // 长度always 6,后面有6个字节的数据' m% d& ^- Z! _/ k+ A4 h8 n9 M: d T
00 01 // 0-单轨; 1-多规,同步; 2-多规,异步
6 U. ^% g; [3 M+ n/ I00 02 // 轨道数,即为”MTrk”的个数
; j6 x+ g- y3 E6 q) S" ~0 @& L7 x00 c0 // 基本时间格式,即一个四分音符的tick数,tick是MIDI中的最小时间单位
+ u% r8 ?0 n! G6 y) Z4d 54 72 6b // “MTrk”,全局轨为附加信息(如标题版权速度和系统码(Sysx)等), ]% R2 n$ k$ }" _
00 00 00 3d // 长度
4 o1 A+ d8 O$ Y: E+ k$ _" H" d00 ff 03 // 音轨名称
( h% L4 ~0 u, @# I05 // 长度
: L( C6 k; Z. F9 y54 69 74 6c 65 // “Title”; C5 r; s5 y# q+ @, W
00 ff 02 // 版权公告
, m) y0 u3 N' y$ L0a // 长度9 g) `( X% A0 N4 B; y( {" b/ M
43 6f 6d 70 6f 73 65 72 20 3a // “Composer :”5 r7 |$ ~) u+ F/ w. e
00 ff 01 // 文字事件
1 ~ x$ r: Z9 V3 V. b7 K9 q09 // 长度
$ ?' u- Q/ m. r: b52 65 6d 61 72 6b 73 20 3a // “Remarks :”) A8 s" b& D) g4 q5 A8 z
00 ff 51 // 设定速度xx xx xx,以微秒(us)为单位,是四分音符的时值
]3 D% G6 K. f+ P7 \* \03 // 长度( A7 }" o- y6 h) n( Q& \9 _: e
07 a1 20 // 四分音符为 500,000 us,即 0.5s) D A- E- J! k# U% H
00 ff 58 // 拍号标记4 f$ X7 ]6 u, X, a0 U
04 // 长度
& W2 {& X: z( g8 v2 t- u" K- N04 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 e- `, M0 i9 T00 ff 59 // 谱号信息
: Z3 R& v2 R( n# t- F# O02 // 长度
5 W; ^. U% \: ^ S" J* I; j" [3 }) n00 00 // sf mf 。sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x 。mf指出曲调是大调还是小调。大调mf=00,小调mf=01。2 T2 f( D3 _5 n" _! U! v
00 ff 2f 00 // 音轨终止
0 u; B+ k0 k2 l9 g. K6 U( @4d 54 72 6b // “MTrk”,普通音轨' F( @2 M( ]& H: {5 q2 M+ S
00 00 01 17 // 长度
2 v @- g( r) }00 ff 03 // 00: delta_time; ff 03:元事件,音轨名称! f9 @7 T- U/ \: y" I5 x- d5 v, E: G+ ]
06 // 长度
- t2 N! l. Z; A J0 \+ d. q% w9 ~43 20 48 61 72 70 // “C Harp”
7 m; f* A4 h" L% H( o00 b0 00 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道0号控制器值为0。
3 ?- k5 R+ p$ v b00 b0 20 00 // 此处为设置0通道32号控制器值为0。! \) ~" F5 m7 R
00 c0 16 // 00:delta_time; cn:设置n通道音色; xx:音色值。此处为设置0通道音色值为22 Accordion 手风琴。! R' c1 x Q" d8 m; i
84 40 b0 65 00 // 此处为设置0通道101号控制器值为0。
4 }6 {5 A8 ~; T: M( Q00 b0 64 00 // 此处为设置0通道100号控制器值为0。2 s+ p$ ^ s: b: S0 R# E
00 b0 06 18 // 此处为设置0通道6号控制器值为0。9 Q, m S6 D7 N8 N
00 b0 07 7e // 此处为设置0通道7号控制器(主音音量)值为126。& ~1 V5 z3 w& d9 u
00 e0 00 40 // 00:delta_time; en:设置n通道音高; xx yy:各取低7bit组成14bit值。此处为设置0通道音高值为64。3 C% U- |2 J- ]) \
00 b0 0a 40 // 此处为设置0通道7号控制器(主音音量)值为126。1 V( Q, J6 Z2 Q, [ Y) Y6 e# r
00 90 43 40 // 00:delta_time; 9n:打开n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度发出67音符。
* n6 B! D- h# e1 K81 10 80 43 40 // 81 10:delta_time; 8n:关闭n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度关闭67音符。# M2 G0 b7 L% K
00 90 43 40
6 z) t' ~2 f6 l& p- |2 q30 80 43 40
) s2 q# @# U! y1 s8 @+ m00 90 45 40
8 ?$ o- h x1 W81 40 80 45 40( y& B+ k, c# U& Q, I0 k
00 90 43 40
! N) g, A' u2 o! ]1 Q# i81 40 80 43 40
+ j5 T- F& z2 F8 r+ ~: h$ ]8 \00 90 48 40
4 \( m' p$ y4 l3 |# O81 40 80 48 40; w7 s* @3 q, [' a" H
00 90 47 40
; P* o, U( Z; g2 E) y83 00 80 47 40
+ T+ ?. T7 M d; r( F, A00 90 43 40
. m. Z ]# D/ v, ?' ? D81 10 80 43 408 t: f; p3 y; n* @
00 90 43 400 z& E9 `! i* P$ V/ O; L, t. G, f
30 80 43 408 y: q' C- t' L
00 90 45 40
% q+ |/ l8 w* @/ A; U! @- E O81 40 80 45 40. e! T/ [) b" b0 F9 ]
00 90 43 40+ ]0 o$ {) s9 S9 X# F3 X6 C
81 40 80 43 40
! `0 u) f u# b; q00 90 4a 40' V" g4 X1 |. D2 Y5 p) `. }. H* s
81 40 80 4a 40
& N3 u% G K- T$ S6 w2 `6 S4 a' d00 90 48 40& I0 S) X! n( I$ @$ @. Y& B
83 00 80 48 40
( H1 n* m/ `0 s" q* U00 90 43 40
$ F, y, l# O' t81 10 80 43 40
7 M4 g0 u L4 H9 W L: l00 90 43 40
% C4 W p J. p8 s: e7 m30 80 43 40
5 L; f$ I4 q; r C, }$ w4 `, C6 C00 90 4f 40
/ q& K2 L# m( B0 g J5 q* o$ y, [81 40 80 4f 40
/ i. S& Y' W/ \3 i& _8 R9 k00 90 4c 408 a$ c, m) L- P; k( Z* p8 w+ g
81 40 80 4c 404 G9 X' m& B- [; j! h! Q9 k
00 90 48 40 Y, C) t* B3 N" B4 X; _
81 40 80 48 40
# L4 q, H9 ~- K; p1 n$ R00 90 47 403 e4 e" ~: N9 @/ k; u! _& M
81 40 80 47 40
8 R- t3 g0 i0 v00 90 45 407 u' z% L% y2 _+ g3 h9 G
83 00 80 45 40
* E5 f5 z( }, s% y00 90 4d 40
* \7 X+ Z* w* ]: d4 G7 Z ~' U4 \81 10 80 4d 40
+ d0 S4 b) `3 U+ n3 ?8 X00 90 4d 40
5 I- n0 J5 g; ~4 V. N30 80 4d 401 U3 ~" r% o4 m1 t
00 90 4c 40: L4 m; Q* Q2 z
81 40 80 4c 40
" L+ [7 T1 h6 x00 90 48 40
% j1 v; G0 N4 U6 ^# }( X) A; Z81 40 80 48 40; X& j- @, x, @$ J
00 90 4a 407 I# j8 b% @# a
81 40 80 4a 40
4 C" T* F' [' \; }9 Q9 z00 90 48 40' ? {. ~" J. ]2 g2 U+ a
83 00 80 48 40
5 t& A# L0 e7 O3 [1 |- H1 g, \01 b0 7b 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道123号控制器(关闭所有音符)值为0。0 `, }: J) A* m( a
00 b0 78 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道120号控制器(关闭所有声音)值为0。
5 [8 r; a- i. [; r% h8 {: y$ O' c2 b- [00 ff 2f 00 // 音轨终止 |
|