|
序列/音轨的名称' j5 W6 X/ e, D" ?0 @: _8 ^
FF 03长度 文本( w, T8 b! w0 ~& C& r
乐器名称" {8 u- N6 s& O* p" b j( f- q5 t1 E o
FF 04长度 文本
( }. `# J7 O! h0 N$ F说明该类型的乐器将用于在这一条音轨中使用。/ Z# ]. o1 u/ |$ f- m
歌词$ F; [1 P0 _4 y
FF 05长度 文本
; z9 y: M: M) c+ j8 T5 U写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间
% S5 L, C' t# Y- G( ^标记
" {9 y. l. ^6 n" K4 s2 hFF 06长度 文本9 y+ Z/ L* W+ r! T) I+ H8 H
通常在一个格式0的音轨,或在格式1的第一个音轨。
9 V# b' M( N# C8 Z注释点3 }2 ?* O) G7 J6 I5 i
FF 07长度 文本+ u! B8 H: I4 l: G! h+ |, v
描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件! x2 S' Z2 k% @% `9 [- [0 G
音轨终止! d. L( S8 d( r
FF 2F 007 E' G q# n- z
此事件必须的,以便确定的结束点。: \% R( T U c U4 f
设定速度,以毫秒(ms)为单位,是四分音符的时值
4 P4 g5 O9 C% I! _) ~, pFF 51 03 tttttt! d ]. | U" j' m X
这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。
% s$ X0 Y7 S* q$ y7 |, iSMPTE 时间同步# F; k3 x2 l& m& f
FF 54 05 hr mn se fr ff
! q! g6 ^8 Q6 r! d这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。# a; P3 w8 ^7 W, Y! b5 _4 g
拍号标记3 A% v* S- ?+ _: W/ ^0 w! `7 \. N
FF 58 04 nn dd cc bb7 t1 m! q" R( G" E6 p
因此,完整的 6 / 8拍号应该表示为* o7 m' N* y) G
FF 58 04 06 03 24 08
2 Z2 j; M3 v* s! G) k1 Z$ |三十二分音符。
2 R+ W* L% E* t- |. _- \谱号信息 `7 x" H k: ^ _$ |. h5 O7 ?
FF 59 02 sf mf
# b0 U8 C o' F Nsf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。 也就是说,升号数目写成0x,降号数目写成8x
+ Z# ^& l5 g% t1 @, w0 ^mf指出曲调是大调还是小调。大调mf=00,小调mf=01
1 q& T7 u9 [. w c# V% y3 d. \% d2 O对于序列器的元数据
2 |2 M# R# L' [) y5 JFF 7F长度 数据
; J- |4 t8 p; g+ K) W" K特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。
' {3 u$ W/ S+ ^+ w* |作为一个例子, 把一个MIDI文件摘录如下所示。
" w" V, O+ m/ A; s2 M' Z) o3 m1 W& h内容的MIDI流所代表的这个例子,细分在这里:, U5 H J& v C. I* _8 e8 Z0 N9 O
Δt(十进制) 事件号(十六进制) 其他数据(十进制) 说明
2 m5 w, d% `7 s% }- J% u% h0 FF 58 04 04 02 24 08$ R0 y( h- l; T% B+ e0 @
0 FF 51 03 5000006 D3 w, O U1 h& O5 m& G
0 C0 5 通道1, 音色5' x$ o$ f8 N% J2 J
0 C1 46 通道2, 音色46' D1 ?" A. Q0 @' ^5 o
0 C2 70 通道3, 音色70
# Q1 i; i' }& L. d2 ~$ g0 92 48 96 通道3 开始弹奏C2, 用力, [" p" U' a8 a% j
0 92 60 96 通道3 开始弹奏C3, 用力
0 J% Z3 ]% ~4 [4 o h. y* s7 b96 91 67 64 通道2 开始弹奏G3, 用力* n. T0 f' B) b3 [5 u0 V+ R9 W
96 90 76 32 通道1 开始弹奏E4, 钢琴
+ E9 f6 `8 G2 a192 82 48 64 通道3 停止弹奏C2, 标准( ~/ {5 R; f s8 u$ [( J8 d
0 82 60 64 通道3 停止弹奏C3, 标准) _% K# \' H6 t7 B$ o
0 81 67 64 通道2 停止弹奏G3, 标准2 u/ }1 C) P* \# c9 c
0 80 76 64 通道1 停止弹奏E4, 标准$ @ }6 c t* _" H4 r. R, R; T
0 FF 2F 00 结束( {: A& }) U- {- w% [+ P" `/ C
整个格式0 的MIDI文件的内容,首先,文件头块: T/ H4 U0 Q7 ~+ n- r( K
4D 54 68 64 MThd7 h) Z- M- Y. {! ~- o' L
00 00 00 06 块长度
: ^) d" ]5 w! d0 P$ F1 l4 M. ~00 00 格式 02 B, U! z" D: [4 b6 w$ C3 S' r- ?" S H
00 01 一个音轨
0 [/ Q; ~+ n' [! b6 s00 60 一个MIDI时间间隔等于96分之一秒2 q3 ] F2 y, |) v' G
接着,音轨块,
- ?1 B5 d2 o5 |& e; r4D 54 72 6B MTrk3 `* {1 r, X7 a* i7 ^3 O$ L. R
00 00 00 3B 音轨长度(59字节)& @2 ]' q2 k: e8 D* y& A
时间 事件
$ J; O9 ?+ b! Q7 f& M5 m00 FF 58 04 04 02 18 08 拍号4/4
! s' F( J% k" E/ d; C00 FF 51 03 07 A1 20 速度
& A3 G( c* m3 e7 S00 C0 05
3 c; s; Z. N5 O( I' S* L00 C1 2E l. P; ?8 |7 v0 b
00 C2 46' k# l1 J3 h2 _& c* l. R
00 92 30 60* r* [5 X* `: q! d+ S" b
00 3C 60
' h* c( M5 g$ h6 l' b' i: R: }60 91 43 40$ N, K: z0 P: h( g( Q" D( y' v
60 90 4C 206 a, A) P9 T4 k" k
81 40 82 30 40: d7 @! g" W, h5 z. k9 c
00 3C 40
! F8 W$ G/ x8 g! M00 81 43 40
1 m. J0 f& Y# U: V+ g00 80 4C 40
: j' p' g. {: H7 A( k00 FF 2F 00 终止
: X% D+ m" x- h* R0 n" A类似的,可以把这个文件写成1格式。9 `. O! o* ]4 Z/ ~% ~& T* ?: G
MIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。
`: k* H, v! I1 LMIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。" W# g" \0 Y" f1 e8 ~3 `9 c
MIDI格式由于其特殊的记录方式,受硬件影响较大。* S! O5 _1 S- Q, }* T# M# |
MID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。
# d9 ?6 ]) U2 e8 H5 K l具体实例5 \0 u, j T9 `5 M& g; l, [# n
4d 54 68 64 // “MThd”
7 W- i8 q% n) y' ~0 }- [. h00 00 00 06 // 长度always 6,后面有6个字节的数据9 E" @4 O* \4 ]# N- T
00 01 // 0-单轨; 1-多规,同步; 2-多规,异步
, M1 @7 H# C+ c$ [* l/ s- |00 02 // 轨道数,即为”MTrk”的个数
9 s L8 N! d1 W! B6 Z00 c0 // 基本时间格式,即一个四分音符的tick数,tick是MIDI中的最小时间单位
4 Y6 P+ v' j2 q: `4 v3 O/ N! z4d 54 72 6b // “MTrk”,全局轨为附加信息(如标题版权速度和系统码(Sysx)等)
+ Z- l/ H) J& I" R3 ~00 00 00 3d // 长度4 v* V" G. J$ v
00 ff 03 // 音轨名称
# |# F6 [; F$ U3 X g% k05 // 长度5 A) _: p" Z% l, ?* m1 n
54 69 74 6c 65 // “Title”+ |: e: ?; X5 X- u3 O
00 ff 02 // 版权公告. _4 f, c9 }* P' I! O. \
0a // 长度6 c( r+ _* H* q# _. Q
43 6f 6d 70 6f 73 65 72 20 3a // “Composer :”
7 k% b( S4 J' a3 ]. V8 X00 ff 01 // 文字事件
: i0 p2 N( b: v+ B09 // 长度8 |$ o, G' t9 M" E, ]
52 65 6d 61 72 6b 73 20 3a // “Remarks :”7 j; `- r# \4 D6 |+ C9 }
00 ff 51 // 设定速度xx xx xx,以微秒(us)为单位,是四分音符的时值7 y/ K! F1 h- s( i! Z* r
03 // 长度7 s6 ^9 g- C3 a5 ?4 v! ?! Y
07 a1 20 // 四分音符为 500,000 us,即 0.5s0 M* n( R# \; J' t
00 ff 58 // 拍号标记
9 r, d- R" A- P8 q5 ]04 // 长度& ~' ?3 k! v2 B% b* @7 {
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个三十二分音符。
2 c$ @ n+ @' ?# a2 b0 I3 G9 _00 ff 59 // 谱号信息1 E- K% @. m) E/ B) v4 G5 |
02 // 长度
/ M& V( E! ]* o% B00 00 // sf mf 。sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x 。mf指出曲调是大调还是小调。大调mf=00,小调mf=01。
0 O$ M" T4 y I8 @1 T9 q2 Z4 L00 ff 2f 00 // 音轨终止
0 z9 B- H1 Y" |/ k4d 54 72 6b // “MTrk”,普通音轨6 u; h; v: m7 ~: t+ y
00 00 01 17 // 长度
7 n7 Y5 T q3 m00 ff 03 // 00: delta_time; ff 03:元事件,音轨名称
4 }2 e! |( K4 B4 J06 // 长度4 s; f* G5 B9 F% W
43 20 48 61 72 70 // “C Harp”
, K0 L0 v- _: m. {0 S* f" G00 b0 00 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道0号控制器值为0。
: z4 L7 j# |& u8 H00 b0 20 00 // 此处为设置0通道32号控制器值为0。
# P' D" c8 v3 e+ D( Y, [( u& f00 c0 16 // 00:delta_time; cn:设置n通道音色; xx:音色值。此处为设置0通道音色值为22 Accordion 手风琴。
0 u9 g" }$ S1 ^9 l$ R( _- j84 40 b0 65 00 // 此处为设置0通道101号控制器值为0。
7 }$ ~ n7 H# O r0 j! t: v- r! w00 b0 64 00 // 此处为设置0通道100号控制器值为0。
& r G' U( G/ _( L0 B1 t, m$ j4 ~% G00 b0 06 18 // 此处为设置0通道6号控制器值为0。$ Y" G, k- ?: E' m) Q5 R
00 b0 07 7e // 此处为设置0通道7号控制器(主音音量)值为126。
. M- W8 C2 |7 S! w: t" r+ s) |6 n00 e0 00 40 // 00:delta_time; en:设置n通道音高; xx yy:各取低7bit组成14bit值。此处为设置0通道音高值为64。2 n1 s# ~ j6 V/ [! _) X
00 b0 0a 40 // 此处为设置0通道7号控制器(主音音量)值为126。
8 h: l M, O1 N' E$ H00 90 43 40 // 00:delta_time; 9n:打开n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度发出67音符。
: b+ v' P0 p2 |; T C+ l3 j* m81 10 80 43 40 // 81 10:delta_time; 8n:关闭n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度关闭67音符。
& j) G+ N& c3 J6 {" ~" T3 x00 90 43 402 h3 I; O* P7 D J
30 80 43 40( g! D" g% t9 X8 T7 G" x
00 90 45 406 _7 X0 T/ o* D7 x+ k
81 40 80 45 403 K/ Z0 Y! f% Z
00 90 43 40
# X, D) }; e7 H" Y0 S( H81 40 80 43 402 C, N1 T% C- ?! r4 s
00 90 48 402 v! y8 k- Q) J# Z, x3 ~+ L1 Y
81 40 80 48 40- x# h, w p$ q1 `" C: q
00 90 47 40
$ Q6 p- t% {* Q+ H) a) q83 00 80 47 40
6 U1 s7 U) Q8 D1 V7 d6 H8 B00 90 43 404 V9 u0 j* g2 U' X7 \ E; _
81 10 80 43 40
7 [0 V. A$ d( `4 m6 t& w( ^2 y) ^3 g00 90 43 401 v, Q1 p7 z) V
30 80 43 40
0 E$ C( x! }$ i! @6 x' T00 90 45 405 l% q. N. e* B$ G
81 40 80 45 40
: B! s+ M# s4 k% i, a) e: U8 m00 90 43 401 |2 P, ]1 F3 n9 g* b% s# V
81 40 80 43 40! ^2 B1 X5 E& d
00 90 4a 40
; \, K& D1 u, d3 M81 40 80 4a 402 p+ Z+ Q$ D* S. f
00 90 48 40
2 s# ^6 ?4 V m) d W o% H83 00 80 48 40
8 l6 J, @1 q1 _00 90 43 40& k# {. Z. S0 G2 K: {4 o) K& h- X
81 10 80 43 40. `! _) ]8 y$ t. {
00 90 43 406 n) E3 B, T ~1 t; I- R
30 80 43 40
9 N M3 B- |8 q9 a+ M# g00 90 4f 40
2 a+ i J3 T: n7 q% Z0 X81 40 80 4f 40 W4 D7 Q+ h( s; ^, S( a) E
00 90 4c 40+ F; g: d8 [* q
81 40 80 4c 401 u4 Y4 a ]2 p6 v1 z
00 90 48 40
6 [0 f" e: n! P: B8 V81 40 80 48 40
- z4 f) [7 o% M5 C1 K- {* C& G00 90 47 40$ }1 I7 U( p V5 R9 u I
81 40 80 47 409 W) I( [4 ]7 E D& P+ V
00 90 45 406 k8 }0 N2 p0 m4 C
83 00 80 45 40$ v, t2 b" Y7 A8 T! g9 R6 H. b5 O" m
00 90 4d 408 a% @4 [, S+ e% d8 x( u, l
81 10 80 4d 40. a/ P6 S( A/ P: r( n+ l
00 90 4d 40
3 h- b4 j3 b& I8 x9 f, W30 80 4d 40
' R% H' N8 J2 b; ^00 90 4c 40
* I( b9 H$ p' S: g- m4 [# K* X) C81 40 80 4c 40
6 E3 F0 ?8 L: |! k00 90 48 40
7 E: G* x% l$ \$ `) K81 40 80 48 40$ p( j/ {+ i+ I8 [
00 90 4a 40! l# _; g$ ^& ^/ J: F4 L+ z
81 40 80 4a 40
6 d9 H' c' D* G00 90 48 40
* r: @4 l$ E7 Y! B83 00 80 48 408 O: \( n' C% k
01 b0 7b 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道123号控制器(关闭所有音符)值为0。
+ h1 E; b4 r8 W" U! x: i9 y* ^00 b0 78 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道120号控制器(关闭所有声音)值为0。
9 [! a: B- L: Q4 `00 ff 2f 00 // 音轨终止 |
|