|
序列/音轨的名称
" L, c3 W9 P; gFF 03长度 文本0 u* q6 m) E' c+ T: v6 {9 e0 j# ^
乐器名称5 v0 |: ?$ w7 `, \4 i; t& Q
FF 04长度 文本
- D( Z( W# Z: x5 M说明该类型的乐器将用于在这一条音轨中使用。6 H/ D- `! l7 [) `- J+ B
歌词' e @$ W; ?8 q8 J
FF 05长度 文本
5 I- I8 ?( c$ m z写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间
/ U4 Z' O1 G! u标记
/ @3 K ^0 d2 j- h: l" pFF 06长度 文本
: d0 l/ w# r# A' t8 Q/ A通常在一个格式0的音轨,或在格式1的第一个音轨。' J7 B V7 [9 |3 E; Y6 i G
注释点4 i, m( D9 @8 W0 T: X4 q7 j1 o+ W
FF 07长度 文本; z5 X: R' S! M% a7 x
描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件
7 R! u9 H! Q* S$ v) A( ]+ ^7 S音轨终止5 Z6 s( R# ~4 \- p2 b# i9 i
FF 2F 00/ \- d" G) O: V7 N7 {
此事件必须的,以便确定的结束点。 j) Q, b9 F- M! M( r# N
设定速度,以毫秒(ms)为单位,是四分音符的时值( W- b' n6 Q T
FF 51 03 tttttt
3 _. H6 ]" ^ t* l这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。5 S: E* z, ?" G; Y2 ^
SMPTE 时间同步
+ V# K7 K( ?6 L( l5 u. EFF 54 05 hr mn se fr ff7 M$ K1 q R) Y
这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。 d2 a* M/ q3 Q: O' |4 \
拍号标记& F8 c, ~3 @- z
FF 58 04 nn dd cc bb
$ r) v$ O# {& a. X3 |# w因此,完整的 6 / 8拍号应该表示为3 }8 l, N# V# k
FF 58 04 06 03 24 08
. {& c' W# |* P& ]0 f三十二分音符。8 F( x9 T0 b" }# t. s
谱号信息" Q# P2 w5 J# w
FF 59 02 sf mf" e/ @9 C; F0 T1 [: D7 _; ~/ U4 X0 B/ h
sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。 也就是说,升号数目写成0x,降号数目写成8x
# y( `; j5 x* J! e/ S( Jmf指出曲调是大调还是小调。大调mf=00,小调mf=01
3 }0 D; ?" Y4 u对于序列器的元数据, A" T; I3 w3 Q- `, F1 W6 _4 G/ Z
FF 7F长度 数据
0 \# B4 L" N4 I8 ^$ j7 f# ?特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。
# j4 @8 a0 R. y作为一个例子, 把一个MIDI文件摘录如下所示。- v3 A' J1 ^9 [7 M& ?. Y) {
内容的MIDI流所代表的这个例子,细分在这里:
5 B2 [' v+ q; ^. l7 v3 QΔt(十进制) 事件号(十六进制) 其他数据(十进制) 说明1 s. _0 F `; X
0 FF 58 04 04 02 24 08
/ ?9 C; C9 s7 F4 U0 FF 51 03 500000
$ P+ Q0 }6 J' q2 r0 C0 5 通道1, 音色5
0 u* }$ _. q l4 T5 k4 t0 C1 46 通道2, 音色46' ^4 f9 z4 m2 A" l; Y6 W
0 C2 70 通道3, 音色70# m* v% n7 e; M, B. U+ @ A* H
0 92 48 96 通道3 开始弹奏C2, 用力+ D* h0 u( D4 K) V+ X0 `
0 92 60 96 通道3 开始弹奏C3, 用力
, g4 X7 S ]' h- e96 91 67 64 通道2 开始弹奏G3, 用力
; V. u* r: F0 W u5 n96 90 76 32 通道1 开始弹奏E4, 钢琴% X, l- q/ j, |$ b$ g" k
192 82 48 64 通道3 停止弹奏C2, 标准
3 F H6 z& M/ {+ @0 82 60 64 通道3 停止弹奏C3, 标准
3 u$ F# Z8 ?+ X* n) l4 E# W% y5 G0 81 67 64 通道2 停止弹奏G3, 标准
8 j! r; X/ q: b6 S. B6 p; C0 80 76 64 通道1 停止弹奏E4, 标准3 S. O2 g5 H7 k1 N. V/ Y
0 FF 2F 00 结束
. ?) r- ]3 n' [& p整个格式0 的MIDI文件的内容,首先,文件头块:: P2 M0 V3 M& Q
4D 54 68 64 MThd
" @7 `" y6 F$ F% V' V/ ?8 r+ L% S00 00 00 06 块长度
3 _9 C8 @# g9 y9 ?2 e00 00 格式 0
6 u; [* Q8 O) ?3 O% y" q* y00 01 一个音轨( ~% i! ~$ ]: z, G4 r
00 60 一个MIDI时间间隔等于96分之一秒
9 D' n" \9 i: V6 a2 e8 Y接着,音轨块,- a0 T) Z1 W) Q( n% A9 P& v0 X
4D 54 72 6B MTrk
5 W& ~7 w6 K' w/ U3 C# ^00 00 00 3B 音轨长度(59字节)
( C9 O+ H% a8 x8 T. ^: N! K) M时间 事件
* |5 P* p( I) p! z8 p; O# J00 FF 58 04 04 02 18 08 拍号4/4
/ z5 ?+ N" _9 B$ j00 FF 51 03 07 A1 20 速度+ p$ r9 ?8 |, K6 Y' f) P. k4 |! |
00 C0 05
* y' c% ]: d* I, _! f! d7 @8 Z00 C1 2E/ } K( O0 i4 ?/ \
00 C2 46
3 E! W; c1 _9 |: J' g00 92 30 60
* }1 o4 \; a: ]0 K3 ]& i" E: i00 3C 60 l" Z% ^3 d; o9 J. Y5 q
60 91 43 40* o3 y4 j c8 o* P# f, F7 d; M7 F- |6 b
60 90 4C 20
3 x' e7 { e& i5 Q% |- D/ P7 _5 H81 40 82 30 40. m- i H1 {/ u" x6 J$ q
00 3C 40
5 @- f* o; u+ m, X00 81 43 40$ {' ^+ f. n. G _) k* \7 [6 ?0 k, M
00 80 4C 40
- L3 W7 T" M+ j' j( J9 x! G00 FF 2F 00 终止/ M p; k: N% s+ ^ ?7 k
类似的,可以把这个文件写成1格式。. K- q) c8 l3 ~3 ^: U8 K1 h' B7 A
MIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。
7 h* {0 G& K. ]* a" Y2 q, y0 DMIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。
, n2 Z2 u) r. v5 P ]6 \! DMIDI格式由于其特殊的记录方式,受硬件影响较大。4 N: g6 E8 F$ @, b7 J) p6 n
MID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。3 a3 L. p% D$ U; p; l+ t) X7 ?
具体实例# s# H* @; C9 }7 X( J
4d 54 68 64 // “MThd”
+ V" @ ~$ g1 p( E00 00 00 06 // 长度always 6,后面有6个字节的数据
( [, p3 f6 w! V' z9 ~5 r) g J00 01 // 0-单轨; 1-多规,同步; 2-多规,异步
. m+ r# q: {7 b _ Y3 h8 M00 02 // 轨道数,即为”MTrk”的个数
" V9 w; o$ l d7 l' b1 [! r7 K1 g00 c0 // 基本时间格式,即一个四分音符的tick数,tick是MIDI中的最小时间单位
5 j0 e% s t$ ~3 p* R5 Q4d 54 72 6b // “MTrk”,全局轨为附加信息(如标题版权速度和系统码(Sysx)等)0 n9 z: x4 @3 \- y& s. y; p
00 00 00 3d // 长度3 A8 |, e7 G) ?0 J5 B' f/ k
00 ff 03 // 音轨名称
8 t- F% @, ]* ]% w( o' w/ m8 I6 h05 // 长度# a" C6 [- W7 w9 m& X, d
54 69 74 6c 65 // “Title”0 }4 h- H( S7 S8 o2 @& b. k
00 ff 02 // 版权公告
8 ^3 Q6 o) f" Y% V% \' @3 u3 @" ^! x0a // 长度
0 J4 I% r/ h% u! _43 6f 6d 70 6f 73 65 72 20 3a // “Composer :”3 e. A; N( c4 U) E
00 ff 01 // 文字事件
0 b: u; q/ a* L09 // 长度
# P! B( \4 U9 t6 x: T p' v52 65 6d 61 72 6b 73 20 3a // “Remarks :”
$ O- j* c- I7 @ {/ r00 ff 51 // 设定速度xx xx xx,以微秒(us)为单位,是四分音符的时值
; n' p5 p4 Q9 y7 E03 // 长度, d# P: k' J0 _" y/ B. u$ h1 t
07 a1 20 // 四分音符为 500,000 us,即 0.5s9 I/ D9 J) q7 Y, ?& Q' n& a- r
00 ff 58 // 拍号标记1 N( ?% S: k$ U" f) q
04 // 长度
$ R2 M( r' J& J8 t( o04 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个三十二分音符。
4 F1 T$ q" d7 B9 K00 ff 59 // 谱号信息
6 U) C3 S2 S4 ?: [9 L02 // 长度4 O5 a' v2 \) J9 o0 s: z
00 00 // sf mf 。sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x 。mf指出曲调是大调还是小调。大调mf=00,小调mf=01。
5 V; x9 G5 {- O, j/ {00 ff 2f 00 // 音轨终止 j" S9 o) d1 W5 w, D; p
4d 54 72 6b // “MTrk”,普通音轨
- O1 T" g, W/ j( @00 00 01 17 // 长度" e, A' T4 _% u3 m8 N. D
00 ff 03 // 00: delta_time; ff 03:元事件,音轨名称
& ^1 f3 \1 Q- k0 i4 Q06 // 长度
& y; S/ w4 Z, N6 |* O5 e43 20 48 61 72 70 // “C Harp”7 p( R- G+ X* n
00 b0 00 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道0号控制器值为0。( l1 G* l/ z0 ]- S/ [6 i
00 b0 20 00 // 此处为设置0通道32号控制器值为0。
' I9 X3 p9 F% M00 c0 16 // 00:delta_time; cn:设置n通道音色; xx:音色值。此处为设置0通道音色值为22 Accordion 手风琴。
* q2 _! [+ r, p) W4 A/ p84 40 b0 65 00 // 此处为设置0通道101号控制器值为0。
0 [2 z; u& n6 c& D* r00 b0 64 00 // 此处为设置0通道100号控制器值为0。
7 N5 j/ ?' a% p8 B/ F) m00 b0 06 18 // 此处为设置0通道6号控制器值为0。7 w f* M$ P! i$ ~0 O
00 b0 07 7e // 此处为设置0通道7号控制器(主音音量)值为126。2 Q4 R, ]9 h/ w; ^9 K4 A F
00 e0 00 40 // 00:delta_time; en:设置n通道音高; xx yy:各取低7bit组成14bit值。此处为设置0通道音高值为64。
1 Y- c3 x# C; `: ~. n2 a, t00 b0 0a 40 // 此处为设置0通道7号控制器(主音音量)值为126。
7 S. c9 D1 t7 N+ d00 90 43 40 // 00:delta_time; 9n:打开n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度发出67音符。& s/ M. j3 B: v! R
81 10 80 43 40 // 81 10:delta_time; 8n:关闭n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度关闭67音符。. `! ?4 l5 H% O" I& [
00 90 43 409 u, G0 e( D4 M6 s* h
30 80 43 40
4 m+ F% W6 y" a4 W6 Q! v- G% C00 90 45 40$ `+ L% x/ E6 j
81 40 80 45 40
+ r* d+ [ }8 |- ?0 _$ m00 90 43 405 R2 \" n/ U& f% K: I2 R* i# @
81 40 80 43 40 z/ B& W& g7 ?/ L' v1 T( d
00 90 48 40( v$ ]( K. w; L5 ^. _
81 40 80 48 40' t: s. G& `9 C
00 90 47 40
! y, u( Q: t# B5 t y83 00 80 47 40% b% v9 u7 M% h0 V$ |
00 90 43 40
h' A& Z0 B" d' n2 U1 p+ E& y81 10 80 43 40
1 \9 V" y1 N- ?# P- x# S3 v. R00 90 43 40' e1 r8 K6 n3 A5 P0 w% y2 r+ l% @5 u: e
30 80 43 40
* r7 U, u, Z+ V. a8 x. u00 90 45 40
, m9 X ]: T8 | }. T3 }81 40 80 45 40& Z e% T. q. s9 t4 r% ]
00 90 43 40
& @% e7 i+ N3 G1 K; f- i$ w) r G5 K81 40 80 43 40: w0 l" N8 B! A, M% E
00 90 4a 40
/ d$ J$ U, B+ y9 m81 40 80 4a 40
& b$ Y/ N0 d1 U. b9 z6 \- l- G00 90 48 40- B: g' r$ c; U ^1 m3 C
83 00 80 48 40
7 g* E8 e* o' X- N( d {" Y8 p; R$ M00 90 43 407 W# q* g5 z2 l& D
81 10 80 43 40) [4 [5 g* a2 [
00 90 43 40
$ G, d1 U( t- t8 L! X0 Z3 `30 80 43 400 x5 x* ?* K! @# k7 g; x
00 90 4f 40
; u0 m5 S7 L) m. k( J81 40 80 4f 40
& S5 O* q4 `/ B3 G& ~$ [00 90 4c 40
1 |7 I2 W0 \( Z& o4 \: W+ F; W- r81 40 80 4c 406 R S. J: E# G# Y, R* H$ t
00 90 48 405 Z9 |* t+ ^$ M, W- S" e
81 40 80 48 40
6 E. J# V$ S: P8 y2 ]9 w00 90 47 40) {% ?6 e& l @4 J5 _. R
81 40 80 47 40' @; q W9 E" [- Q9 B4 ?9 k
00 90 45 40' M" Y0 i, m1 V6 s" w9 L( a
83 00 80 45 40
9 g& L: [8 m1 i8 g) D2 W. l( F00 90 4d 40 Y& q/ I' i+ d' B7 H
81 10 80 4d 40& }5 M* D8 p3 T E' p- y; A
00 90 4d 407 B" r' S2 V" w' Q
30 80 4d 40
& {7 ]5 ?* t! T- E: Z00 90 4c 40, m+ }; v$ h) _
81 40 80 4c 40
! k8 Z! C+ `1 @ }00 90 48 40
) ~( o: s& ?% r' w81 40 80 48 40
+ T. u( K+ e1 [+ p9 M% c" `6 ^- y00 90 4a 40
0 f( N" F1 R; V+ o/ s, m0 z81 40 80 4a 40
- |# e- V, j: U: L/ V" C; o* K1 K) o00 90 48 40
! u- D( W+ m7 C83 00 80 48 40
! e1 @5 _' A* g* n# j0 Q1 \01 b0 7b 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道123号控制器(关闭所有音符)值为0。
2 b0 s6 X ~* d" [00 b0 78 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道120号控制器(关闭所有声音)值为0。
0 \' E$ L7 h" ~% L6 E& a00 ff 2f 00 // 音轨终止 |
|