|
序列/音轨的名称: Q+ P0 C! J6 D
FF 03长度 文本
" a" U/ |8 G+ M1 t. E% d# X乐器名称5 q1 x2 X1 E1 ?
FF 04长度 文本
: `, S: O9 Z3 R v! J1 [5 n- j. `% O. p9 t说明该类型的乐器将用于在这一条音轨中使用。
& Z" T' ]+ R. T z" r歌词
: @* x) p% k$ P0 ?1 T1 s2 ZFF 05长度 文本3 W0 l& S' z7 a3 D4 J. |
写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间 H7 J6 m9 i6 a, s* {7 W- {; I
标记( x6 Z# S% a* h, P9 i
FF 06长度 文本
( ^ O ?* }# s# [4 k通常在一个格式0的音轨,或在格式1的第一个音轨。# N+ e7 \2 Y$ k1 v& x7 T
注释点5 G3 A6 ]1 C3 ~7 B: u- r
FF 07长度 文本
! J) [% Q) D0 q+ E* [ U描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件
L, o# a# p- \+ l音轨终止% ^" _5 ]$ ?' |/ n( L
FF 2F 00" O4 N+ x/ j# n" ~/ `, p
此事件必须的,以便确定的结束点。
4 h w2 }3 N: g5 b3 E( V* a9 }设定速度,以毫秒(ms)为单位,是四分音符的时值% F3 ~+ R7 ?2 S) G5 H. l$ g9 i* D: F2 E% l
FF 51 03 tttttt
- g% B+ E4 O' r+ ^; F这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。) s' ]# K4 w; K7 u8 {' q! m
SMPTE 时间同步
) q. N- W( X+ |4 }* HFF 54 05 hr mn se fr ff, t, y3 L7 {9 a! ?' x
这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。
' P x! @7 x3 }: [拍号标记
; Q2 [% R, z! h5 ~8 R0 pFF 58 04 nn dd cc bb
$ z* ^6 k: E4 O f- @! z因此,完整的 6 / 8拍号应该表示为9 ], H5 z5 U3 @# G$ v- W' j
FF 58 04 06 03 24 08: Q7 ]4 F9 w& X1 E$ M
三十二分音符。
* S/ p w* w( V( {" a4 N$ s谱号信息3 z! I* d8 U! h! _8 H1 c0 g+ L
FF 59 02 sf mf3 K) k% I1 F/ }3 ^3 ?+ K
sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。 也就是说,升号数目写成0x,降号数目写成8x
, V0 `- ~3 @' C0 Z! K0 Bmf指出曲调是大调还是小调。大调mf=00,小调mf=01
; t6 D) s( \. {# y对于序列器的元数据
0 W8 @# w/ y/ [0 Q: @/ c& H3 y. `FF 7F长度 数据4 v5 ^+ A) M$ \- b( p; [
特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。( D: Z" ^8 b& V0 I/ I6 a$ k
作为一个例子, 把一个MIDI文件摘录如下所示。/ _! A( R& v, O" R
内容的MIDI流所代表的这个例子,细分在这里:1 r, }% y# H% r4 _5 W
Δt(十进制) 事件号(十六进制) 其他数据(十进制) 说明
1 N# j/ }9 q( x0 S# ]0 FF 58 04 04 02 24 08: ]8 Y0 M/ V3 T
0 FF 51 03 5000006 D( D$ h- P- R6 k2 l) B
0 C0 5 通道1, 音色5
1 B/ W5 z. g) q2 Q% S/ ?( v0 C1 46 通道2, 音色46
+ s8 ~3 p( }/ L6 H% t2 e. N( |) v0 C2 70 通道3, 音色70
+ o, T4 y# c7 k6 Y% g0 92 48 96 通道3 开始弹奏C2, 用力
0 c0 t8 j7 Z; d: P# f* d0 92 60 96 通道3 开始弹奏C3, 用力
o. j0 d1 `0 k96 91 67 64 通道2 开始弹奏G3, 用力
& C! f5 j5 F. s96 90 76 32 通道1 开始弹奏E4, 钢琴+ w$ _- q4 _% ^& C. h7 l4 z2 [
192 82 48 64 通道3 停止弹奏C2, 标准
1 I8 I% g2 P0 G% v) ^5 B0 82 60 64 通道3 停止弹奏C3, 标准
; b9 O! v( Q3 |$ F, v; x) p' c0 81 67 64 通道2 停止弹奏G3, 标准& q, ~4 M$ m( T
0 80 76 64 通道1 停止弹奏E4, 标准4 s; ^* _3 H. H2 ~ V
0 FF 2F 00 结束
% D" o3 T: g T0 P* X- B整个格式0 的MIDI文件的内容,首先,文件头块:" Q4 H; A* r! G$ p& p
4D 54 68 64 MThd
& d- m* d4 ^ G) {. I00 00 00 06 块长度
" Y; w6 ^" ~" v. p5 T" z/ a0 `( t00 00 格式 0
' R! o6 @% m5 j: `- m0 N4 R; Z7 z00 01 一个音轨: S+ L6 T# Y" Y2 f# g
00 60 一个MIDI时间间隔等于96分之一秒' c7 }( \" ` Y, l, E
接着,音轨块,6 Z2 ?: U# `- y
4D 54 72 6B MTrk. y" J# G" P$ V& s
00 00 00 3B 音轨长度(59字节)" Y7 x" s0 G7 V
时间 事件7 p: Y# R7 w7 T, L! j9 H- a( o
00 FF 58 04 04 02 18 08 拍号4/45 n o' @4 G; E1 P- l/ j8 s& \
00 FF 51 03 07 A1 20 速度
. |0 r" e$ `5 I6 H4 I; z' ^00 C0 05$ `) `* H, E L' U) L0 w" b
00 C1 2E1 v! t. e5 e% }3 w4 i2 s; x9 j- I
00 C2 461 B( v" O6 f( Z: \. z
00 92 30 60- f7 F0 r* L; M* T9 |! r
00 3C 60$ n. i+ a8 w! q, D; d! ^
60 91 43 40
8 Y" f- V7 i6 X6 _, [3 ]% T7 b: R60 90 4C 20- H# P4 t; x, {- G. x. z
81 40 82 30 40
( B: N8 S6 h. d00 3C 40) K/ L5 F* u3 n% s! L& l
00 81 43 40
" h$ k0 x% v; R00 80 4C 40
6 _* G w9 E6 l2 A00 FF 2F 00 终止
4 B7 E3 E! m6 Q ~类似的,可以把这个文件写成1格式。
0 b9 b7 e; r6 ^& X) l6 ?MIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。
' L; }2 N1 n, V" kMIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。1 a: j5 X$ O1 t. n3 |
MIDI格式由于其特殊的记录方式,受硬件影响较大。
9 H( S% z) e0 b7 `9 g T3 A! UMID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。
4 K- f# P7 Z! Y具体实例
/ X# x1 H1 _4 c& K4d 54 68 64 // “MThd”
$ K6 B% J4 B1 j$ o& Z' }00 00 00 06 // 长度always 6,后面有6个字节的数据% }- O+ k0 p9 E- e; \: T- v
00 01 // 0-单轨; 1-多规,同步; 2-多规,异步1 h- h: K# D* b/ a1 w- ~5 U
00 02 // 轨道数,即为”MTrk”的个数
7 D- [4 q/ ]1 J0 G s& ^00 c0 // 基本时间格式,即一个四分音符的tick数,tick是MIDI中的最小时间单位
! [& V: N% c! K/ l- h" B3 M7 a4d 54 72 6b // “MTrk”,全局轨为附加信息(如标题版权速度和系统码(Sysx)等)
; O; a1 D8 V9 O# p( `00 00 00 3d // 长度. P4 v5 a0 g- ~; b, t" z
00 ff 03 // 音轨名称
9 [8 E, { I4 ]. k05 // 长度
9 N: ]& z) J; ~4 ~' i0 W/ R54 69 74 6c 65 // “Title”
" U, Z8 D: t4 V Q/ N1 ~+ l00 ff 02 // 版权公告
4 V7 G5 ]6 y' F' [+ a' \0a // 长度5 |& d: ]# u1 q" ^2 v5 d
43 6f 6d 70 6f 73 65 72 20 3a // “Composer :”
# T+ m4 i! g. l4 q& h$ D4 K+ x+ U00 ff 01 // 文字事件1 ~& I7 G/ J1 p5 s
09 // 长度, P( a" ~3 {, M# g: D# Y) m
52 65 6d 61 72 6b 73 20 3a // “Remarks :”/ X6 R; y5 d! l, f* r5 a
00 ff 51 // 设定速度xx xx xx,以微秒(us)为单位,是四分音符的时值$ C; v5 n4 f. k }* q
03 // 长度
, \5 Y$ T) E E9 ]+ `3 V: S07 a1 20 // 四分音符为 500,000 us,即 0.5s
3 R8 `! G W7 B/ Z00 ff 58 // 拍号标记% V4 \5 `8 W3 b$ U5 D: A
04 // 长度
5 }4 s. o: L _3 u04 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个三十二分音符。7 u$ T# e6 P% i2 ~: Y
00 ff 59 // 谱号信息
0 H9 z, h O1 \5 `- o* s s, s02 // 长度4 T1 D2 ?2 Z- Z: J2 ~0 o) r. ?
00 00 // sf mf 。sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x 。mf指出曲调是大调还是小调。大调mf=00,小调mf=01。
& O7 X! h& }, _/ T00 ff 2f 00 // 音轨终止
* q4 v5 ^( k# u1 A; e4d 54 72 6b // “MTrk”,普通音轨) C I1 p6 d5 f* u& [7 l4 K# Z6 I( I
00 00 01 17 // 长度
# I* ?! g$ g- |3 J' O3 y) }00 ff 03 // 00: delta_time; ff 03:元事件,音轨名称
2 V% ^ e" n5 E: z6 K5 P06 // 长度2 h- q+ c6 m' I8 \+ V" b& {0 ^, M8 t3 W
43 20 48 61 72 70 // “C Harp”
z, X, x# o$ W6 m/ J00 b0 00 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道0号控制器值为0。
' L# _, y6 n: ?- N( K/ [00 b0 20 00 // 此处为设置0通道32号控制器值为0。. X8 J1 q. h& w3 n
00 c0 16 // 00:delta_time; cn:设置n通道音色; xx:音色值。此处为设置0通道音色值为22 Accordion 手风琴。
* S" L4 A4 O# j4 i8 x! s9 q84 40 b0 65 00 // 此处为设置0通道101号控制器值为0。, z$ T' h, e. N
00 b0 64 00 // 此处为设置0通道100号控制器值为0。
4 G6 D' W8 c- U) [: B+ `00 b0 06 18 // 此处为设置0通道6号控制器值为0。
$ P+ w; J) B' T! C+ w! ~: h00 b0 07 7e // 此处为设置0通道7号控制器(主音音量)值为126。
/ C% S! ?/ [$ ^: \# [00 e0 00 40 // 00:delta_time; en:设置n通道音高; xx yy:各取低7bit组成14bit值。此处为设置0通道音高值为64。
4 W& k! V. d# U2 Y( Z. h5 X00 b0 0a 40 // 此处为设置0通道7号控制器(主音音量)值为126。' O8 L0 Z# q6 o6 E
00 90 43 40 // 00:delta_time; 9n:打开n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度发出67音符。! S& N+ q& N8 N) `. n' [2 D; }5 L
81 10 80 43 40 // 81 10:delta_time; 8n:关闭n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度关闭67音符。) o3 I6 Z+ S, Q# a
00 90 43 40. k$ g! \9 ?7 }3 i z, S
30 80 43 40; |4 C; H' `7 m3 \: J
00 90 45 40
9 C% Y4 ?* U" j6 K. J$ n81 40 80 45 406 K+ {' j) t7 y; c
00 90 43 40
/ M( v( ?7 I" L1 D/ c0 k$ }' w81 40 80 43 40
& R1 W& ]* J& _. Q4 s$ H00 90 48 40
# L! g; [" {0 h% N81 40 80 48 40/ ^+ Q- c) D' F! N7 O: [2 B3 {! Z
00 90 47 401 _: X1 k* }" z
83 00 80 47 40
: v) z7 ^" |; v! O( C$ m( C8 n00 90 43 40
+ k N/ O: [; o' R5 Q( w7 f81 10 80 43 40
' }- u- J, z: w$ Q' M00 90 43 40% R8 ]1 M: q+ n* \% X
30 80 43 40
$ J- ~2 }; a) h00 90 45 40
1 P" Y* U; F. }, u81 40 80 45 40
) X8 C+ i' W- @' |9 g00 90 43 408 K9 s" F `% `; w) V
81 40 80 43 40; ^0 o, \+ x. e; N1 [2 X5 a
00 90 4a 40, S# V) {4 B/ R8 _2 a0 G2 A+ L
81 40 80 4a 40
) v: m' G, n7 j; M, \- G2 M00 90 48 400 b M, p& h& v* D; U) T1 R* \
83 00 80 48 403 \$ u2 l- N# A* H- t1 z
00 90 43 40, E/ @4 ~4 f: p& f& b
81 10 80 43 401 v X d% Q `6 W8 ]" y1 `
00 90 43 402 ^1 i' [! W) V+ [& A; u, ^; H
30 80 43 40$ y) y) E! ]8 J0 T8 ?
00 90 4f 40
) H* g: l O! u# G/ {81 40 80 4f 40 E, F1 G. z+ F# K0 f7 j2 z+ ^5 A
00 90 4c 409 L- V7 }) ~3 |- _+ a
81 40 80 4c 40
( d, r8 }7 v( C1 |" P7 I, _00 90 48 407 U# j0 D% y* X6 ~; Y
81 40 80 48 401 R+ A! T K& i. t0 C
00 90 47 40
0 }9 d( e5 n g) Q; B3 }6 I8 m81 40 80 47 40( `! f. \; |+ C/ F
00 90 45 40! }7 S+ f5 |; A- c* Y3 W3 v+ e
83 00 80 45 40
- m! L3 X7 M% K3 I1 G" W00 90 4d 406 b( v- |9 v* L: W0 e& C0 F7 ?) z
81 10 80 4d 40
9 v1 d/ v3 m; Q% Q00 90 4d 405 F7 C' B( }1 G
30 80 4d 40, p' i4 f) S- o) G
00 90 4c 40/ a* S' k. E1 U
81 40 80 4c 40
) O. P; v. V- z) ?; Y$ R$ C4 e1 D00 90 48 400 j1 T9 ^) p+ H) Z/ \
81 40 80 48 40% }& X0 G" V6 [+ M y$ ^& H, ?% c
00 90 4a 401 s* h& w3 C/ l( B* i, m/ j
81 40 80 4a 40, P) u0 ^; `/ x+ _( ?4 q8 W
00 90 48 40$ C* s; C' k7 u1 V
83 00 80 48 40
- |$ J; S( ?4 c4 ~ D01 b0 7b 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道123号控制器(关闭所有音符)值为0。
* H+ J% M( |" }% @$ a00 b0 78 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道120号控制器(关闭所有声音)值为0。
0 r: w8 G; J- O p8 _8 @00 ff 2f 00 // 音轨终止 |
|