henge1
发表于 2015-12-25 14:23:57
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?快速注册
x
9 O" |& w9 A7 D; t9 XKeyboard杂志老资格编辑Jim Aikin在纪念MIDI诞生20的时候发表一篇文章,讲述MIDI使用中经常遇到的20个概念,虽然都是“老生常谈”,不少MIDI老手对其中一些问题也不见得十分明确,更不要说才入门的新手了。因此中音网把这篇文章译出来帮大家复习一下。
& }& ]5 p# `- L5 M3 e# V
/ N5 T+ c) u# D, L7 P m 1)MIDI发送演奏指令而不是声音
0 {& }. p$ f/ K# M 当你在MIDI键盘上按下一个琴键,你不是在制造一个声音而是发出一条MIDI指令,叫做Note on(音符开)信息。至于这个信息能发什么声音,完全取决于电缆另一端的MIDI乐器(如果有的话)。MIDI电缆里完全没有音频数据。
# m; ]; A8 f( B3 x+ {- p& l- z* { 2)In对Out;Out对In# d# i4 F8 L0 L( C* O) T5 E
许多MIDI设备的后面板带有3个MIDI插座:In、Out、Thru。连接设备的时候,主键盘的Out将连接到希望接收信息设备的In。MIDI设备可以做链形连接,使主键盘(或电脑等)发送的信息传送到连接的各个设备。链形连接的时候主键盘的Out连接到下一个设备的In,然后从它的Thru连接第三个设备的In,再从Thru连接第四个设备的In……如此连接。) E* W7 | K6 [
3)过多的Thru使数据劣化& b8 B# k- F& q" F
通过Thru口连接4或5台以上设备不是好主意。数字信号多次Thru之后累加的延迟容易使挂在链路后端的设备发生错码或其他意外情况。1 a7 D7 d" B* Q f* E$ O+ B
4)MIDI通讯是单方向的7 D Y5 z- c7 \
不像许多现代的数字通讯例如USB等,MIDI电缆中的信息只向一个方向流动。如果你希望两台设备之间能够对话(传送系统专用信息时经常用到),就需要把各自的Out接到对方的In。0 `3 q: Z1 D! [& g
5)MIDI用串行格式传送数据,速度相当快
9 |: p3 ?2 E) h! i 在MIDI电缆中同一时间只能传送一个比特,技术上称为串行通讯。MIDI字节包含10个比特而不是常用的8比特。MIDI每秒传送31250比特,或者说3125字节。5 R2 |' F* j& e- W& _9 L
下面将要讲到,一个MIDI音符开信息包含3个字节,不到1毫秒就发送完毕。即使一个20音的和弦也将在20毫秒之内先后发声,人类的听觉几乎不能感觉到这样微小的时间差异。! e, b9 m% c: K/ `# V) Z: v4 e+ P, \& u
6)16通道共享同一条电缆' o# \8 q3 ~0 f6 ]; w
MIDI规定定义了两类信息——系统信息和通道信息。实际的音乐演奏信息(音符、控制器、弯音等)是通道信息格式。MIDI定义一条电缆同时可以传送16条通道,如果需要更多通道,就要使用更复杂的电缆设置。例如你的电脑配备了8个端口的接口,同时传送的通道数就可以达到16×8=128。
$ o! n( B( D2 x' ^) G 一些合成器可以同时接收32通道,这时就需要2个MIDI输入口(或者其他形式的接口,如USB等)。
' X8 l% s# Z- h5 b: ? 7)两种MIDI同步
5 H/ r# d; i8 K 最早的MIDI规定定义了时钟信息以及停止、开始、继续,乐曲位置指针等信息,使2台音序器能够同步运行。每个四分音符发送24个时钟信息,因此它是随速度而变化的。时钟信息是很简单的单字节标记,并不包含时间、位置等信息。
4 {9 d7 T9 y1 R0 I5 q 更复杂的同步信息要使用MIDI Time Code(MIDI时间码,简称MTC),这是SMPTE同步码在MIDI的表现方法,它能够提供乐曲演奏的时间信息,但是不包含速度信息。如果两个用MTC同步的音序器工作在不同的速度,尽管有很好的同步,它们的音乐还是会逐渐岔开。( k, P; T, C7 _- H' L( _
8)中央C编号60) Q$ m7 |# H# ]1 T
MIDI为各通道定义了128个音符,中央C编号为60,5个八度的键盘编号可能就是36到96。但是音序器没有统一的规定,有的音序器显示60号音符为C3,另一些则为C4,并不统一。
& c+ b Y- j' n3 V# o( C& Z 9)MIDI音符开的3个字节包含4类信息
$ O* t: K7 r2 H4 N( {9 B9 S 第一个字节包含状态(说明这一信息是什么性质的)和通道号1-16;第二字节是音符编号0-127;第三字节表示力度0-127。
: a, A6 P |) R" b! \ 10)力度0就是音符关(Note off)! q$ m- j' y2 v' `' l V+ C
有两种方法可以关闭已经打开的音符:一种是发送音符关信息;另一种是发送力度为0的音符开信息。当然这两种方法都必须包含相应的音符编号和通道号,否则就不能达到目的。除了力度0被借用来代表音符关,音符开的力度范畴变成1-127以外,这两种方法在音乐上并无区别,不过算起细账来后者能节省信息量。原来MIDI有一个“运行状态”,规定前后信息的状态完全一致的时候,后面的信息可以省略状态字节。如此算来一开一关是不同的状态,需要6个字节;两个开(第二个开力度为0,实际是关)状态相同,5个字节就够了。在发送一大片连续的快速音符时,运行状态可以有效降低MIDI信息的传送密度。; X! [" @5 ~$ g+ R
11)连续控制器并不连续9 a, P0 l( t; d5 q" y ]
MIDI通道信息设置了128个连续控制器信息(Continuous Controller经常简写为CC),主要用来表示旋钮、推子、踏板的运动状况,每一个CC的范畴是0-127。例如合成器的调制轮或调制杆总是1号控制器,转到一端为0,另一端为127。但是数值并不是平滑地变化,而是台阶式的变化。比如数值可以是56或57,但不可能是56.329或57.1。如果用CC控制一些比较敏感的声音参数,有可能听得到台阶式的效果变化。- S9 q7 F2 Y3 d5 O7 r- s
12)一些CC是预先定义的, K* T. T E; ]5 I9 o% _! U
一些CC保留给特别的用途,例如CC64分配给延音踏板。实际上有一些(例如64、65、66等)控制器定义成开关式,如CC64踩下去发送127;抬起来发送0,并不使用中间的数值。CC00-CC31可以与CC32-CC63结对使用表示MSB和LSB,构成16384的控制值。是否使用14比特数值由设备制造厂商决定,没有一定之规。
+ O, L2 u" l7 C* ^ 13)弯音音域由接收合成器决定
8 l& J2 O. W; @ f8 `; q6 U 弯音是一个很特别的MIDI信息。虽然它被定义为14比特,但是许多合成器省略了LSB数据而只用MSB的7比特(0-127)数值。也许这样是对的,因为许多弯音硬件只提供7比特数值,音序器也经常把弯音定在-63到+64的范围。弯音是一个双极信息,中心为0,控制器常常带有回0的弹簧。
6 w, c+ B2 K- ~* q8 G4 D 有一条MIDI信息(是一个注册参数号RPN)可以给接收弯音设备定义弯音音域,但并不是所有合成器都响应。
3 |( _) w7 U5 Y! C 14)音色库的选择
m" A v! B: o/ \0 W+ I1 C* i MIDI刚创建的时候合成器通常只有32、40、最多不过64个音色可以记忆,没有谁能够预见不久以后合成器竟能拥有数百以至数千音色。结果只定义了128个选择音色的程序变换(Program Change),为了解决这个问题,发明出音色库选择信息。
( L% ?2 s. Y1 m; Z 音色库选择(Bank Select)借用了连续控制器CC0和CC32构成14比特的数值,使音色选择的范围达到16384个音色库,每库包含128个音色。数值非常巨大。& h' _- R2 U; @2 h' O/ [8 O: E
问题是厂商对于音色库选择信息的执行有很大差异,一些合成器仅用CC0选择音色库,舍弃了CC32(虽然MIDI规定要求二者连续发送),另有一些合成器则按规定使用命令,没有包含数值的控制器也发送数值0。
# ?4 L- A- D: a. n& a 一些合成器立即转换到新选择的音色库,而另外一些则要等待到接收一条程序变换命令后才转换。一些合成器没有把音色库装满,因此一条音色库选择命令可以同时选中2个库,具体选择音色时还需要加上偏移值。Kurzweil在音色库选择规定出现之前就开始支持多重音色库,在K2000/2500合成器上使用不同的音色库选择方法。还有的合成器忽略音色库选择命令。一些音序器试图帮助用户完成音色库选择,但是并不能对所有的合成器生效。+ C+ B1 W9 v5 C6 g3 W
15)有4种方法关掉“粘住”的音符
: C9 S2 B2 N, ? u 相信大家都遇到过“粘住”的音符。可怜的合成器只接收到音符开而没有收到关掉这些音符的命令,于是就讨厌的响个不停。如果发音的音色包络已经把音量衰减下去,你就不容易发现“粘住”的音符,一般都是带有保持包络的音色造成明显的问题。引起问题的原因可能在音序器,也可能在合成器的系统软件,更有可能是MIDI连接出现问题(MIDI能够检测到连接出问题而自动发出关掉音符的命令,但不是全部合成器有这样的功能)。0 k+ W1 Z" y; I' ^
MIDI定义了关掉全部音符的命令,音序器软件经常备用一个“救急”按钮,点击它就可以把关闭全部音符命令发送到16个通道,但是有的合成器不能识别这条命令,因此“救急”按钮同时经常还需要给16个通道的每一个音符发送关闭命令,16×128=2048,幸亏机器不知道累。% M7 E3 B/ A. S" K7 A1 a: _: e, n
如果“救急”按钮不管用,可以试着发一个程序变换(Program Change),许多合成器在转换到新音色时关闭正在发音的音符。如果这一招不管用,下面还有一手可以对付32复音数以下或音色多层次布局的合成器:用手和胳膊尽可能多的同时按下琴键,放手的时候也许有效。; h# v$ t, M. N6 [ `9 I
最有效的办法是关掉电源然后再打开,一定管用。不过如果出问题的不是合成器而是采样器,重新载入64MB的样本也要花一些时间呢。
$ q* _" L: R4 L, D$ K |
|
|
|
|