|
序列/音轨的名称0 G3 N( L+ G9 ~& P- s4 m
FF 03长度 文本: l# y' u0 ~( y) q: P
乐器名称
+ Z8 ^- Y1 W) A2 d6 NFF 04长度 文本2 r" S0 n3 C. v# L( M6 p" B# ^
说明该类型的乐器将用于在这一条音轨中使用。- t' G9 H0 [7 ?* J1 k4 M4 {
歌词0 e# z1 e& R7 T7 i* M8 a: [0 ^
FF 05长度 文本
' `! o; ?/ q6 b( H5 c, m写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间$ d- m( G7 h9 t! _; J+ }- U+ t. V
标记
6 c+ p: O4 ? S' r9 aFF 06长度 文本
* @! X3 I+ y5 Z$ e8 H g# R& d通常在一个格式0的音轨,或在格式1的第一个音轨。0 Q @" z: I& m: ^+ A5 ^1 J$ g
注释点/ E) o3 r" S8 h8 w- i% F0 j
FF 07长度 文本
& y$ T& r0 d! @# A5 y1 @$ |描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件: J, B% j& Z1 @7 h4 M7 x4 t
音轨终止
( w* ?. d) H& a) @, ~8 EFF 2F 00- m( |, ?4 l) z$ `
此事件必须的,以便确定的结束点。5 n& |4 @# X2 t' H+ [
设定速度,以毫秒(ms)为单位,是四分音符的时值
" d5 C% Y9 @* X. P+ MFF 51 03 tttttt
2 p7 H H& v7 n$ ?8 m这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。
; J! |5 O& L2 M! q5 o0 J' L9 I6 qSMPTE 时间同步% ~# `* R* t7 k6 T
FF 54 05 hr mn se fr ff1 m& \5 A! G; P1 D
这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。
" \0 n. y. ?0 U拍号标记2 m9 @7 M, T2 _4 I. b
FF 58 04 nn dd cc bb
' l" Z2 B" S. Q& s' k因此,完整的 6 / 8拍号应该表示为. x. E. Y+ G; I6 j/ l c
FF 58 04 06 03 24 082 y( `8 e- t" C5 e/ ^
三十二分音符。# k$ k; F( ?3 G$ S. C) s/ X+ y
谱号信息$ `/ W4 i; e1 D9 N" H1 [$ M7 h; D
FF 59 02 sf mf9 U8 |* p: D# V- R) S9 ]
sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。 也就是说,升号数目写成0x,降号数目写成8x
5 V% R& M, y- f$ ?8 Qmf指出曲调是大调还是小调。大调mf=00,小调mf=01
( ]$ q5 }( z% g6 a d* C对于序列器的元数据- E. N( m" b6 Y2 }+ b4 H8 {
FF 7F长度 数据! _/ t# m9 `9 Q8 P4 U6 Z9 e
特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。* |( e7 K9 q. P: @" ]5 s) k
作为一个例子, 把一个MIDI文件摘录如下所示。
# Z; S2 ?' ?% m4 a$ S% S' R* z内容的MIDI流所代表的这个例子,细分在这里:
/ ^; N; z( g( @ {. S0 E8 sΔt(十进制) 事件号(十六进制) 其他数据(十进制) 说明
E& L( M* q6 ^ l" ]0 E0 FF 58 04 04 02 24 08, g) i1 b, l. Y) i" A6 `
0 FF 51 03 500000
, y3 \8 V$ _8 ]* a" d8 }0 R4 A9 P0 C0 5 通道1, 音色5; `0 u( t; t6 B! Q
0 C1 46 通道2, 音色46
6 q, E9 ?6 I" t @4 z0 C2 70 通道3, 音色70
4 f2 ?9 K8 }# H, K. `0 92 48 96 通道3 开始弹奏C2, 用力/ C8 F+ y) L. H* x+ `
0 92 60 96 通道3 开始弹奏C3, 用力
$ X/ @* H+ l7 \96 91 67 64 通道2 开始弹奏G3, 用力
# c* F- Q0 g: ]( E. K. c" O8 _96 90 76 32 通道1 开始弹奏E4, 钢琴/ ~& z( b1 I& u! n
192 82 48 64 通道3 停止弹奏C2, 标准# j0 v) c# g' W0 D$ p1 E
0 82 60 64 通道3 停止弹奏C3, 标准1 K8 p) n8 z2 w8 p. K5 b' g9 N
0 81 67 64 通道2 停止弹奏G3, 标准
: N$ y. c! Z& j0 80 76 64 通道1 停止弹奏E4, 标准( `. {+ b2 Y8 a( I, |+ U" H
0 FF 2F 00 结束
. k7 v7 ~# ?9 \+ t. ]+ k整个格式0 的MIDI文件的内容,首先,文件头块:* ~) r: I9 M3 k5 n
4D 54 68 64 MThd
" a. e& A5 d, k; m' c. ~00 00 00 06 块长度2 q! N0 ~6 l- Z! \7 L M$ s
00 00 格式 0
+ c# B3 L( b0 E T( g0 d; r00 01 一个音轨
! [$ b# V: e0 B7 Q00 60 一个MIDI时间间隔等于96分之一秒2 a3 B$ b1 i7 h& x5 B
接着,音轨块,. d& Z- q- Y. E( z
4D 54 72 6B MTrk
4 I% l U2 w- T2 Q, l3 i& _00 00 00 3B 音轨长度(59字节)$ f! p8 q- t% X! o+ s$ f
时间 事件! @: t8 ~5 s6 ~) z+ P: O: S( p" ?
00 FF 58 04 04 02 18 08 拍号4/48 {1 ~# ]' e9 N( z1 V5 y9 B& { \, U
00 FF 51 03 07 A1 20 速度
7 ?- \" @# \" _- g00 C0 05% I% n9 J/ |" U* P+ h# C- W& {
00 C1 2E
# b5 [4 e. `) D) N: l00 C2 46
, g# m. k2 `9 q00 92 30 603 G- c4 \ n& M
00 3C 60
. T: }. L* P7 U60 91 43 40( j6 `' l" R' D( T
60 90 4C 20. F! `% d3 l$ p9 H
81 40 82 30 40/ N2 F; J( v2 H, R z7 r
00 3C 40
8 @; c" h+ @: J2 X) v; q& F00 81 43 400 u7 R1 j, E+ E* q" J
00 80 4C 40
, q: ` U6 b9 u00 FF 2F 00 终止
9 J6 U# K2 B! T类似的,可以把这个文件写成1格式。' E6 g9 }' O( z
MIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。
; l# w8 ]5 C3 A- @/ x6 G. i( m0 J SMIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。
3 m6 m# p( i, n4 tMIDI格式由于其特殊的记录方式,受硬件影响较大。+ U8 z3 ~9 u6 H3 T9 X0 u
MID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。
% J# u. {- l0 j- g具体实例
0 F- N! V. s; l1 S3 ?+ J/ E7 x4d 54 68 64 // “MThd”
+ o) }+ r. H' R! e- V4 y00 00 00 06 // 长度always 6,后面有6个字节的数据5 T! [5 b) I) I! `6 }. M: S
00 01 // 0-单轨; 1-多规,同步; 2-多规,异步* i4 N5 t, v' n# t2 h
00 02 // 轨道数,即为”MTrk”的个数
* T! R& @6 A2 ]) H& b6 O4 p00 c0 // 基本时间格式,即一个四分音符的tick数,tick是MIDI中的最小时间单位% O1 S4 @0 f; B5 D
4d 54 72 6b // “MTrk”,全局轨为附加信息(如标题版权速度和系统码(Sysx)等)
2 q' P, l, E' E. ~- v00 00 00 3d // 长度0 B. Z& l: t! x
00 ff 03 // 音轨名称) ?8 R# h; q' i0 U: H8 x! q
05 // 长度
9 g( F) Q, A: |& |6 }8 G' R54 69 74 6c 65 // “Title”
* Y8 E$ o4 N. U2 H7 C00 ff 02 // 版权公告: D/ L% q. \1 _7 |2 O' ?
0a // 长度; [" }/ t. _/ `- ~
43 6f 6d 70 6f 73 65 72 20 3a // “Composer :”# f0 c% ~' T& y c$ W1 U. l# z5 Q
00 ff 01 // 文字事件
9 k# w5 C6 z( ]09 // 长度
1 U' d' X: [/ A; ? c) _$ y52 65 6d 61 72 6b 73 20 3a // “Remarks :”
. A( V# w9 B9 _00 ff 51 // 设定速度xx xx xx,以微秒(us)为单位,是四分音符的时值 S" Z4 s- ]5 j$ E7 T7 c! a7 |
03 // 长度7 x( T4 W) V. d
07 a1 20 // 四分音符为 500,000 us,即 0.5s
8 J2 A8 q, N7 Y00 ff 58 // 拍号标记* e& @+ H; K8 A& t5 m
04 // 长度
) ~' h/ i" V- H/ ]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个三十二分音符。
0 }( q9 v* |4 K! I" ~00 ff 59 // 谱号信息
L7 L6 P6 x0 y1 n02 // 长度3 T3 I9 |! E$ |% y0 y
00 00 // sf mf 。sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x 。mf指出曲调是大调还是小调。大调mf=00,小调mf=01。
: ?! x+ M0 w, j4 S4 V. J00 ff 2f 00 // 音轨终止
3 H# I. H2 B8 A4 g2 Z4d 54 72 6b // “MTrk”,普通音轨
. j) Z3 z, `5 a( }" y3 ~00 00 01 17 // 长度
( c3 } y6 w F" _00 ff 03 // 00: delta_time; ff 03:元事件,音轨名称
k" l& d( @: A4 ^6 W0 a06 // 长度9 V" z) t3 R9 r" v/ U/ Q
43 20 48 61 72 70 // “C Harp”
* q, S. }( t2 I* t+ ?7 G% H: D00 b0 00 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道0号控制器值为0。
6 W+ q, E' X% h6 d- ]3 |00 b0 20 00 // 此处为设置0通道32号控制器值为0。 A1 t' @' |1 v7 L7 z
00 c0 16 // 00:delta_time; cn:设置n通道音色; xx:音色值。此处为设置0通道音色值为22 Accordion 手风琴。5 x+ j6 e) \+ i+ |1 V& D
84 40 b0 65 00 // 此处为设置0通道101号控制器值为0。
) T1 q$ s4 r- m3 y00 b0 64 00 // 此处为设置0通道100号控制器值为0。1 h7 M9 K' S& P& r& n6 a; f% b6 u
00 b0 06 18 // 此处为设置0通道6号控制器值为0。
# g/ |$ }# w5 S) M1 M) T00 b0 07 7e // 此处为设置0通道7号控制器(主音音量)值为126。
4 R# W8 S7 ~, w2 N S00 e0 00 40 // 00:delta_time; en:设置n通道音高; xx yy:各取低7bit组成14bit值。此处为设置0通道音高值为64。
$ y; z2 ?" l3 d: |* T5 w: R00 b0 0a 40 // 此处为设置0通道7号控制器(主音音量)值为126。
% k' d" T; S8 |. E) p; e/ K00 90 43 40 // 00:delta_time; 9n:打开n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度发出67音符。
+ W5 _. z) w$ R+ m81 10 80 43 40 // 81 10:delta_time; 8n:关闭n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度关闭67音符。7 Z+ c* R; F& e- ^( s) U5 O
00 90 43 40
# R9 {9 r/ o7 I* }30 80 43 40" ]) i5 I' {5 u! N/ ]
00 90 45 40
* a& N/ ^9 y6 l6 Z$ r81 40 80 45 40
' K8 q( p; W- z$ ^! {9 ?00 90 43 40
/ d/ W8 B# n4 F, m0 g5 s9 J. G% D. |81 40 80 43 40
. R+ r) _, Q& B( r$ D00 90 48 405 ~+ T+ c, \8 [' n5 w' |# Y
81 40 80 48 40! k0 W% J% Y- Q" L# g3 Q
00 90 47 40
+ Z( c' v6 }5 H( W: n6 d83 00 80 47 401 h. Z7 X7 P/ R! R! ^, G
00 90 43 40
w, w$ q. N+ y& r5 |3 Z: v) o81 10 80 43 40
$ b D+ H/ z+ N1 ]; G( q e00 90 43 40, N& `0 g% _0 t5 h1 W0 b+ F3 i
30 80 43 40
* P# N$ S) w9 [0 J) V00 90 45 40 u2 {% n; s, ^+ a
81 40 80 45 409 k1 Q( k, a0 I# {* t7 T3 C1 t
00 90 43 40. K) U7 `2 r2 D0 p! q
81 40 80 43 40" ]' F1 @: j; h' u# l
00 90 4a 40# o3 ^# v" h: O8 J4 U" r
81 40 80 4a 40( i% P, E+ O2 }) D
00 90 48 400 ?9 @3 [5 S" A6 F+ h
83 00 80 48 402 a' t4 X2 o$ G0 J+ T
00 90 43 40
8 D! V- a: d8 w81 10 80 43 40" ^. z$ z P5 I Q+ b5 W) U4 m7 \
00 90 43 40
# _ K! u$ ^' j) U30 80 43 40
0 X. |+ r9 J1 r' Q00 90 4f 40
7 q) W" |) t' O @81 40 80 4f 40
( `4 P1 {+ I$ ?; \( c* \00 90 4c 40/ ^& q! z9 ]# J, `( U4 F7 A
81 40 80 4c 40+ @. @4 |- a( m9 }& I
00 90 48 40
t6 D# i4 U( Y ?& ^; D81 40 80 48 40
4 H" I; V, j7 f) l00 90 47 40
" W7 p! C( L/ ]) b0 ]( D u0 E& W81 40 80 47 40
y" r- I ^" y; ~00 90 45 40
$ X1 F9 g3 Z* x) D$ Z0 _6 w9 U83 00 80 45 405 z" `3 c6 {0 f* @# x0 e
00 90 4d 40
* I. m# k2 Y4 J5 `81 10 80 4d 40( }5 ^$ u9 j& y" e9 S1 J
00 90 4d 40
* U! K0 U9 c; [) L8 Y$ B- H5 F! p b, y30 80 4d 40
' ~8 g7 } z+ o1 B" Y00 90 4c 40
: z- ^9 F. ?; B8 N# P2 X" W81 40 80 4c 408 m! f* b% _2 U, N3 j
00 90 48 40
% E# z3 w+ `8 I* ~: u81 40 80 48 40
; u( ]; P4 K) V6 m# D, Y* @00 90 4a 40
5 o* Q" X; M' @0 }4 f. W81 40 80 4a 40
9 Q) a0 _3 e/ @2 y: a6 ^00 90 48 408 W( {7 j- g6 D5 V
83 00 80 48 40
! n* Z* I9 w m0 @& z6 a01 b0 7b 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道123号控制器(关闭所有音符)值为0。( x! q) T, D: [1 L7 g; ^
00 b0 78 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道120号控制器(关闭所有声音)值为0。
. i4 F/ H% |- Z- H; e/ B8 A; {00 ff 2f 00 // 音轨终止 |
|