|
|
序列/音轨的名称7 X9 B+ v9 d: G) H: u$ }* |
FF 03长度 文本
1 A( Q8 e& [3 O1 u o, _乐器名称9 G: e/ J6 |6 U2 o5 Y
FF 04长度 文本
% I9 p3 ?3 _* H- }说明该类型的乐器将用于在这一条音轨中使用。* I* N# p& c( b8 f3 {7 |; g
歌词: K) M" ~9 @5 J6 \/ v2 J/ \
FF 05长度 文本) }) P& t1 c% x# G
写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间& W% i2 \% b/ U6 @) m
标记
) @$ L! T$ v0 `+ w, D' XFF 06长度 文本
& q3 s2 ] F" S( g4 C5 Y1 Z通常在一个格式0的音轨,或在格式1的第一个音轨。
- } e U; l, ^( u! R8 ~注释点
2 ?( a- j% Q- u( Y( XFF 07长度 文本
; b" |* e3 _' c+ j. h; T# v: r( F& K0 @" T描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件
* z- S3 m1 @% R# |; ~, P: X音轨终止/ H$ x: v( a6 K( c. ~& Y
FF 2F 008 y: A v y/ s- h3 R
此事件必须的,以便确定的结束点。1 k, i( y. N, k# x4 ]' T( [
设定速度,以毫秒(ms)为单位,是四分音符的时值: x$ ?! n5 q9 o1 _( f
FF 51 03 tttttt$ u! ?9 E3 n. H0 g5 N, P
这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。
\/ f* C& T' |, r1 [2 XSMPTE 时间同步
1 X* ?+ [* ]6 Z# N9 yFF 54 05 hr mn se fr ff, @! N# S. w- i+ z+ Q
这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。
) V4 n# u6 S1 C+ k拍号标记
5 [ T# p' Z# U; DFF 58 04 nn dd cc bb
. K1 K1 u( Y, R8 Q因此,完整的 6 / 8拍号应该表示为: g9 r+ R/ i& K* F" J [
FF 58 04 06 03 24 08
, Q6 q% V1 _5 H三十二分音符。, y |2 i1 D, l, t0 x
谱号信息; e, D4 C' k/ F2 ^9 X
FF 59 02 sf mf& e: [. }" g; W* A8 R& ?* ^
sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。 也就是说,升号数目写成0x,降号数目写成8x2 [5 l. N' Q4 s: e
mf指出曲调是大调还是小调。大调mf=00,小调mf=01
4 }# c6 w0 x8 e5 `$ R对于序列器的元数据, X& q, E1 Z- D! ]+ ]$ ], Y
FF 7F长度 数据( w: m6 v6 S- n' j. ?
特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。 n) b: R# `, H" O4 @9 \6 {: U
作为一个例子, 把一个MIDI文件摘录如下所示。
. {: a, }; N8 J内容的MIDI流所代表的这个例子,细分在这里:
|# r; u Y' h6 W% ]Δt(十进制) 事件号(十六进制) 其他数据(十进制) 说明
* c1 \2 u8 M; T' o' {1 b/ [0 FF 58 04 04 02 24 08$ ]$ C% n4 h8 G+ V0 G; M
0 FF 51 03 5000008 o; R1 a$ \- s( d' g e# s
0 C0 5 通道1, 音色5; L8 R6 P/ b9 l0 q" Z0 K& G
0 C1 46 通道2, 音色46
+ G: z% R Q: s/ p0 C2 70 通道3, 音色70
1 h% Z: k) t# Q. {) b0 92 48 96 通道3 开始弹奏C2, 用力
" c- }0 V4 _3 v: r/ E3 M1 C0 92 60 96 通道3 开始弹奏C3, 用力
) c1 B! q# B2 I$ a$ `* j96 91 67 64 通道2 开始弹奏G3, 用力
' F; o( m8 V- _ y! `& | E96 90 76 32 通道1 开始弹奏E4, 钢琴
4 y! U1 G) {; E* }192 82 48 64 通道3 停止弹奏C2, 标准
4 D: B4 ]& E$ I" @6 r! p0 82 60 64 通道3 停止弹奏C3, 标准3 v8 h6 ?! M w2 W/ S
0 81 67 64 通道2 停止弹奏G3, 标准/ ?3 Y) n: d. P# B
0 80 76 64 通道1 停止弹奏E4, 标准
( x9 S5 a( H3 Y/ D) S }0 FF 2F 00 结束+ M' @/ U. t: F- }. m1 S9 i
整个格式0 的MIDI文件的内容,首先,文件头块:0 W3 b8 E2 |7 r$ A5 H) x
4D 54 68 64 MThd
8 }. g" c& b5 ?* T00 00 00 06 块长度
4 h# m( k9 ^) M* g, D00 00 格式 0
( {6 M2 o E& |1 D1 [: g& S00 01 一个音轨: Q* b4 A1 A+ V3 V0 g5 j
00 60 一个MIDI时间间隔等于96分之一秒3 f1 \( ]* M8 H) ?
接着,音轨块,
4 s8 N6 c/ T' |" ?# U4D 54 72 6B MTrk3 T* @8 x7 B( Y' M$ Z- x2 Z. J
00 00 00 3B 音轨长度(59字节)
$ `& s( N( G" |时间 事件" z2 Q- N$ Y7 O3 d) ]% B+ t' r6 f
00 FF 58 04 04 02 18 08 拍号4/4) a+ i2 B8 I( {& d0 [
00 FF 51 03 07 A1 20 速度 W# D5 o9 G$ k9 g9 C h: A. c
00 C0 05
1 y% h' z$ A5 [9 ]7 K: \00 C1 2E" O) X, f$ ~5 P/ t6 y+ _, O7 R
00 C2 46( r" j1 g$ f$ }% f& Q' o9 F3 D
00 92 30 608 r6 Q, ^, B: H+ ? H+ d M
00 3C 608 A* C2 f& F4 _
60 91 43 40
; @8 }. L8 i6 T0 x3 K60 90 4C 20
2 n6 }; S$ U0 F6 f4 _3 X; ]( x% x# L81 40 82 30 40
; }) _( N7 M1 a4 c00 3C 40, y Z, [8 q9 O1 h2 f) {( {, S3 U
00 81 43 40
- O9 ?4 z1 z+ ]6 Q4 t00 80 4C 40' J9 p9 z g4 ?! J: Y8 i
00 FF 2F 00 终止
1 m: o1 ?3 J5 v$ z6 ^. }类似的,可以把这个文件写成1格式。4 n! r' u" R* Z8 }: F, B2 y
MIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。
! ~! L; ?7 l d/ OMIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。
- i& c& S# f( vMIDI格式由于其特殊的记录方式,受硬件影响较大。7 z2 \( I9 y( P3 v' k! [3 G
MID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。
! J9 p7 s; z3 g3 S1 ?具体实例
8 q& [/ ^0 a% f4d 54 68 64 // “MThd”
- D! Z& }: e) V% s00 00 00 06 // 长度always 6,后面有6个字节的数据" L9 z" p6 X) r- a" i
00 01 // 0-单轨; 1-多规,同步; 2-多规,异步
/ C7 E0 K! w5 R0 R00 02 // 轨道数,即为”MTrk”的个数1 i w" Q5 s" O% I4 E% R
00 c0 // 基本时间格式,即一个四分音符的tick数,tick是MIDI中的最小时间单位
2 d. B! @1 d! }5 w7 h6 O4d 54 72 6b // “MTrk”,全局轨为附加信息(如标题版权速度和系统码(Sysx)等)
: U ?6 B: @( k3 ~+ Q, y( a00 00 00 3d // 长度% {# o! c5 r: o/ K1 S& j% k- {
00 ff 03 // 音轨名称& }3 r# t2 f5 L2 z+ S
05 // 长度* z! ~. j0 l- P! m; b7 n+ v
54 69 74 6c 65 // “Title”
3 Q# \( r( ^; T- q3 K/ F00 ff 02 // 版权公告
4 A* |0 G; v) C0 O0a // 长度 z# @- ^5 e. Q$ l1 I. s0 c& X
43 6f 6d 70 6f 73 65 72 20 3a // “Composer :”
+ L% K5 Q, X; v# H, K2 H) p- u00 ff 01 // 文字事件
}/ b* }( i9 f5 Z7 I9 T09 // 长度# B) ~5 F3 R) g% ^& ]; x) n
52 65 6d 61 72 6b 73 20 3a // “Remarks :”
; P t4 e; `, L- n00 ff 51 // 设定速度xx xx xx,以微秒(us)为单位,是四分音符的时值
: e& `$ J5 s; p/ i2 ?! y03 // 长度0 }. K0 D! I6 @: Z
07 a1 20 // 四分音符为 500,000 us,即 0.5s
B" c, P1 k* U) K! i3 z5 z00 ff 58 // 拍号标记
4 {, U3 U2 c' V% d04 // 长度, h1 w2 s8 m/ y% }( x5 `6 X
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个三十二分音符。, y5 V( }+ t) o1 h
00 ff 59 // 谱号信息
4 f+ U8 p* L; o6 q02 // 长度
! o+ n* Q. R1 k, |4 H, V% A00 00 // sf mf 。sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x 。mf指出曲调是大调还是小调。大调mf=00,小调mf=01。9 X5 P* k6 h7 U9 a
00 ff 2f 00 // 音轨终止( ?' M& {$ n" |; U6 ?
4d 54 72 6b // “MTrk”,普通音轨
, E( q, B$ L% p6 S5 W" v00 00 01 17 // 长度
; L5 _: S& j- h- Y0 ]+ I! v* D; `00 ff 03 // 00: delta_time; ff 03:元事件,音轨名称2 P1 E4 o1 r# e) P2 }: k: t
06 // 长度
Z" W" Q9 Q9 A, X3 u9 F- Q43 20 48 61 72 70 // “C Harp”
5 y7 N. U* N2 {3 ^* Y" U00 b0 00 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道0号控制器值为0。
) K1 s8 g+ i% G1 W0 j00 b0 20 00 // 此处为设置0通道32号控制器值为0。/ ^& D8 T9 m" _
00 c0 16 // 00:delta_time; cn:设置n通道音色; xx:音色值。此处为设置0通道音色值为22 Accordion 手风琴。2 M# Y5 a. n! O2 l+ r
84 40 b0 65 00 // 此处为设置0通道101号控制器值为0。
/ M$ r) t, r/ g00 b0 64 00 // 此处为设置0通道100号控制器值为0。
1 O' V6 P! O+ M; ]4 l00 b0 06 18 // 此处为设置0通道6号控制器值为0。6 j8 L( U' p5 D8 S, B, ~
00 b0 07 7e // 此处为设置0通道7号控制器(主音音量)值为126。( C* I. Z3 ?/ A- e
00 e0 00 40 // 00:delta_time; en:设置n通道音高; xx yy:各取低7bit组成14bit值。此处为设置0通道音高值为64。
0 J! a; V4 ^8 X7 E* {00 b0 0a 40 // 此处为设置0通道7号控制器(主音音量)值为126。& y9 I b0 `, f
00 90 43 40 // 00:delta_time; 9n:打开n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度发出67音符。/ i8 c; i8 i' E" E) @
81 10 80 43 40 // 81 10:delta_time; 8n:关闭n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度关闭67音符。
9 S7 v$ Q' R. N) R# x `" a2 I00 90 43 40$ }+ [% m+ O5 q# n/ k' e& i
30 80 43 40
4 t C, `3 @& I; a3 ~00 90 45 405 T. O. }8 _9 p4 ?
81 40 80 45 406 H U& h3 Q' N3 s
00 90 43 405 k0 q2 p5 {) s3 a
81 40 80 43 40" U3 B' P: @' |1 Q# P
00 90 48 40
. B- L5 \9 n4 _* A" u81 40 80 48 40
( A9 w1 ? o$ j) U00 90 47 40' g1 W" x3 j- |/ }7 Y1 ^- a
83 00 80 47 40
V. J: D; I" b) M2 t0 A! J) k, G! c" i00 90 43 40
& F7 X( _/ }. i) L& B# w5 i% N81 10 80 43 40
/ }5 k8 I4 G$ T: Z00 90 43 407 l/ ]5 V/ O- o) ?
30 80 43 40
+ r, ]% |2 k9 l) {00 90 45 40. {# d/ H" `" Y( ~" j
81 40 80 45 40- L( u" _0 t! J- \( k& E
00 90 43 40
/ j) o" m& E' M6 g3 B/ N. c5 E4 b81 40 80 43 401 p1 P% z- R* S1 x7 b* @1 S- e
00 90 4a 40/ o' F& Z# ?( `
81 40 80 4a 40
* N5 ^ y5 a) X( o h; t( ?! [00 90 48 40
0 n* u9 H- ~# ^- ^' g( o0 j# T83 00 80 48 40
$ t) A! l: X+ u6 O" [( t5 o4 d00 90 43 40( Y% u, I- i* ]9 ~! }
81 10 80 43 401 Q2 _4 Z g# p7 B u2 S6 U$ O V
00 90 43 40) k" q6 y. h: G" V7 i d
30 80 43 40
5 X; Q ^7 d1 U2 K1 }00 90 4f 40
) _6 I8 J: K0 T4 F81 40 80 4f 40
, i# t+ ^7 I% Q00 90 4c 40
2 s: z7 N0 S/ B# P81 40 80 4c 404 E$ g! [- }) T# T: _) l
00 90 48 40
$ w! \. ?8 q: v. G81 40 80 48 40
9 Z, a% } X u2 O/ i4 O, y$ c00 90 47 409 p% D6 K* |) T5 l* G! N% |
81 40 80 47 400 I2 N& x+ @. G5 n, _
00 90 45 40! }7 A# X- v/ E: a' x, r& Y
83 00 80 45 40
& ^ j- f9 U2 f( z- ~8 z) M" S, R1 X! V00 90 4d 401 F& M: v! Q/ p8 J) Q, Z/ {
81 10 80 4d 403 \; Z7 l, {9 t" n+ n9 K
00 90 4d 409 o$ Y) M/ l0 G9 u0 F
30 80 4d 40; c/ F; q8 d, z, @% M
00 90 4c 40
6 ^$ D& h6 r. w3 p- K' C81 40 80 4c 40' }& V S! v* I7 V9 b5 ?4 ?
00 90 48 40
: e7 P/ U* @- R81 40 80 48 40
( V/ ~* R B5 I9 G% Z7 \3 x* j0 z, p00 90 4a 40: N: t4 P5 i/ z8 o9 r) R$ ~
81 40 80 4a 40
6 Y4 m; r& z2 G3 k2 L* ~; R00 90 48 40, ?: x1 S9 C" z! `+ \& h
83 00 80 48 40
& K# z9 ^( r7 E& x$ |) N# S) T' g01 b0 7b 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道123号控制器(关闭所有音符)值为0。7 c' w" Y) T- J/ \
00 b0 78 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道120号控制器(关闭所有声音)值为0。
7 V9 Q) w) c8 a+ E/ N% b00 ff 2f 00 // 音轨终止 |
|