原文链接:http://www.midifan.com/modulearticle-detailview-488.htm

Keyboard杂志老资格编辑Jim Aikin在纪念MIDI诞生20的时候发表一篇文章,讲述MIDI使用中经常遇到的20个概念,虽然都是“老生常谈”,不少MIDI老手对其中一些问题也不见得十分明确,更不要说才入门的新手了。因此中音网把这篇文章译出来帮大家复习一下。
     
     1)MIDI发送演奏指令而不是声音
     当你在MIDI键盘上按下一个琴键,你不是在制造一个声音而是发出一条MIDI指令,叫做Note on(音符开)信息。至于这个信息能发什么声音,完全取决于电缆另一端的MIDI乐器(如果有的话)。MIDI电缆里完全没有音频数据。

2)In对Out;Out对In
     许多MIDI设备的后面板带有3个MIDI插座:In、Out、Thru。连接设备的时候,主键盘的Out将连接到希望接收信息设备的In。MIDI设备可以做链形连接,使主键盘(或电脑等)发送的信息传送到连接的各个设备。链形连接的时候主键盘的Out连接到下一个设备的In,然后从它的Thru连接第三个设备的In,再从Thru连接第四个设备的In……如此连接。

3)过多的Thru使数据劣化
     通过Thru口连接4或5台以上设备不是好主意。数字信号多次Thru之后累加的延迟容易使挂在链路后端的设备发生错码或其他意外情况。

4)MIDI通讯是单方向的
     不像许多现代的数字通讯例如USB等,MIDI电缆中的信息只向一个方向流动。如果你希望两台设备之间能够对话(传送系统专用信息时经常用到),就需要把各自的Out接到对方的In。

5)MIDI用串行格式传送数据,速度相当快
     在MIDI电缆中同一时间只能传送一个比特,技术上称为串行通讯。MIDI字节包含10个比特而不是常用的8比特。MIDI每秒传送31250比特,或者说3125字节。
     下面将要讲到,一个MIDI音符开信息包含3个字节,不到1毫秒就发送完毕。即使一个20音的和弦也将在20毫秒之内先后发声,人类的听觉几乎不能感觉到这样微小的时间差异。

6)16通道共享同一条电缆
     MIDI规定定义了两类信息??系统信息和通道信息。实际的音乐演奏信息(音符、控制器、弯音等)是通道信息格式。MIDI定义一条电缆同时可以传送16条通道,如果需要更多通道,就要使用更复杂的电缆设置。例如你的电脑配备了8个端口的接口,同时传送的通道数就可以达到16×8=128。
     一些合成器可以同时接收32通道,这时就需要2个MIDI输入口(或者其他形式的接口,如USB等)。

7)两种MIDI同步
     最早的MIDI规定定义了时钟信息以及停止、开始、继续,乐曲位置指针等信息,使2台音序器能够同步运行。每个四分音符发送24个时钟信息,因此它是随速度而变化的。时钟信息是很简单的单字节标记,并不包含时间、位置等信息。
     更复杂的同步信息要使用MIDI Time Code(MIDI时间码,简称MTC),这是SMPTE同步码在MIDI的表现方法,它能够提供乐曲演奏的时间信息,但是不包含速度信息。如果两个用MTC同步的音序器工作在不同的速度,尽管有很好的同步,它们的音乐还是会逐渐岔开。

8)中央C编号60
     MIDI为各通道定义了128个音符,中央C编号为60,5个八度的键盘编号可能就是36到96。但是音序器没有统一的规定,有的音序器显示60号音符为C3,另一些则为C4,并不统一。

9)MIDI音符开的3个字节包含4类信息
     第一个字节包含状态(说明这一信息是什么性质的)和通道号1-16;第二字节是音符编号0-127;第三字节表示力度0-127。

10)力度0就是音符关(Note off)
     有两种方法可以关闭已经打开的音符:一种是发送音符关信息;另一种是发送力度为0的音符开信息。当然这两种方法都必须包含相应的音符编号和通道号,否则就不能达到目的。除了力度0被借用来代表音符关,音符开的力度范畴变成1-127以外,这两种方法在音乐上并无区别,不过算起细账来后者能节省信息量。原来MIDI有一个“运行状态”,规定前后信息的状态完全一致的时候,后面的信息可以省略状态字节。如此算来一开一关是不同的状态,需要6个字节;两个开(第二个开力度为0,实际是关)状态相同,5个字节就够了。在发送一大片连续的快速音符时,运行状态可以有效降低MIDI信息的传送密度。

11)连续控制器并不连续
     MIDI通道信息设置了128个连续控制器信息(Continuous Controller经常简写为CC),主要用来表示旋钮、推子、踏板的运动状况,每一个CC的范畴是0-127。例如合成器的调制轮或调制杆总是1号控制器,转到一端为0,另一端为127。但是数值并不是平滑地变化,而是台阶式的变化。比如数值可以是56或57,但不可能是56.329或57.1。如果用CC控制一些比较敏感的声音参数,有可能听得到台阶式的效果变化。

12)一些CC是预先定义的
     一些CC保留给特别的用途,例如CC64分配给延音踏板。实际上有一些(例如64、65、66等)控制器定义成开关式,如CC64踩下去发送127;抬起来发送0,并不使用中间的数值。CC00-CC31可以与CC32-CC63结对使用表示MSB和LSB,构成16384的控制值。是否使用14比特数值由设备制造厂商决定,没有一定之规。

13)弯音音域由接收合成器决定
     弯音是一个很特别的MIDI信息。虽然它被定义为14比特,但是许多合成器省略了LSB数据而只用MSB的7比特(0-127)数值。也许这样是对的,因为许多弯音硬件只提供7比特数值,音序器也经常把弯音定在-63到+64的范围。弯音是一个双极信息,中心为0,控制器常常带有回0的弹簧。
     有一条MIDI信息(是一个注册参数号RPN)可以给接收弯音设备定义弯音音域,但并不是所有合成器都响应。

14)音色库的选择
     MIDI刚创建的时候合成器通常只有32、40、最多不过64个音色可以记忆,没有谁能够预见不久以后合成器竟能拥有数百以至数千音色。结果只定义了128个选择音色的程序变换(Program Change),为了解决这个问题,发明出音色库选择信息。
     音色库选择(Bank Select)借用了连续控制器CC0和CC32构成14比特的数值,使音色选择的范围达到16384个音色库,每库包含128个音色。数值非常巨大。
     问题是厂商对于音色库选择信息的执行有很大差异,一些合成器仅用CC0选择音色库,舍弃了CC32(虽然MIDI规定要求二者连续发送),另有一些合成器则按规定使用命令,没有包含数值的控制器也发送数值0。
     一些合成器立即转换到新选择的音色库,而另外一些则要等待到接收一条程序变换命令后才转换。一些合成器没有把音色库装满,因此一条音色库选择命令可以同时选中2个库,具体选择音色时还需要加上偏移值。Kurzweil在音色库选择规定出现之前就开始支持多重音色库,在K2000/2500合成器上使用不同的音色库选择方法。还有的合成器忽略音色库选择命令。一些音序器试图帮助用户完成音色库选择,但是并不能对所有的合成器生效。

15)有4种方法关掉“粘住”的音符
     相信大家都遇到过“粘住”的音符。可怜的合成器只接收到音符开而没有收到关掉这些音符的命令,于是就讨厌的响个不停。如果发音的音色包络已经把音量衰减下去,你就不容易发现“粘住”的音符,一般都是带有保持包络的音色造成明显的问题。引起问题的原因可能在音序器,也可能在合成器的系统软件,更有可能是MIDI连接出现问题(MIDI能够检测到连接出问题而自动发出关掉音符的命令,但不是全部合成器有这样的功能)。
     MIDI定义了关掉全部音符的命令,音序器软件经常备用一个“救急”按钮,点击它就可以把关闭全部音符命令发送到16个通道,但是有的合成器不能识别这条命令,因此“救急”按钮同时经常还需要给16个通道的每一个音符发送关闭命令,16×128=2048,幸亏机器不知道累。
     如果“救急”按钮不管用,可以试着发一个程序变换(Program Change),许多合成器在转换到新音色时关闭正在发音的音符。如果这一招不管用,下面还有一手可以对付32复音数以下或音色多层次布局的合成器:用手和胳膊尽可能多的同时按下琴键,放手的时候也许有效。
     最有效的办法是关掉电源然后再打开,一定管用。不过如果出问题的不是合成器而是采样器,重新载入64MB的样本也要花一些时间呢。

16)时间延迟能减少
     MIDI相当快,虽然串行传送,基本上听不出时间的参差。如果回放的开头发音迟缓,有以下几种可能:试图发送过多的控制器数据,通常是多通道回放的信息包含有弯音和CC数据,它们挤占了音符到达的时间。音序器通常备有“减薄”连续控制数据的编辑功能,能够有效地减少这类延迟。触后是另一类连续数据,历来是引起延迟的声名狼藉的嫌疑犯。如果触后信息用处不大,建议根本不用或全部删除。
     试图同时让过多的音符同时发音也会造成延迟。例如一种音色由4Voice构成,各Voice使用2个振荡器,如果同时让10个音符发音,对于合成器来说就要同时启动80个振荡器,时间上很容易出现延迟。解决的方法或者减少音色的层次,或者把音符前后错开一些。
     (译者注:乐曲开头处经常有许多MIDI设置数据需要发送,常常影响到第一个音符的准时出现。我们过去建议音乐家把第一小节空出来专门写命令,音乐从第二小节开始,效果非常好。)

17)标准MIDI文件使MIDI音乐广为传播
     在MIDI的“幼年”时期,开发者就明确地预见将会有一种文件格式,像Microsoft的RTF(Rich Text Format)一样供所有的音序器读写,不久以后果然以.MID做后缀的SMF格式出现了。用音序器创作的音乐除了以自己的格式存储,也可以存成标准MIDI文件格式,在任何音序器上回放。
     MIDI文件最初定义了3种类型??0、1和2??但是通常只用0和1。0类文件将全部数据放在一条音轨中(因为MIDI事件带有通道标记,0类文件可以通过编辑命令分成16轨);1类文件包含多轨,各自可以命名。文件甚至支持多口MIDI输出(例如64通道)。MIDI文件后来添加了歌词等其他成分,最近升级的XMF文件格式支持DLS(可以下载的声音)数据,但是还不能描述音频和音频效果。

18)系统专用信息有助于硬件升级
     十年前的合成器或效果器升级(添加新功能或修正缺点)需要到服务中心,交款之后让技师为你换一块芯片。感谢MIDI和互联网,今天操作系统升级已经简单和便宜得多了。许多厂家定期在网站提供系统升级,升级文件经常是标准MIDI文件形式,可以载入音序器回放。通常的做法是:
     ①下载升级文件到电脑硬盘
     ②把文件载入音序器
     ③把音序器的MIDI输出连接到合成器的MIDI输入
     ④将合成器设置成准备读入系统专用信息的模式
     ⑤开始回放音序
     ⑥文件回放结束之前不要停止,也小心不要断开MIDI连接。
     事情就这样简单,你不需要知道MIDI文件的内容,也不用打开机箱,升级就完成了。
     系统专用信息经常还用在音色编辑方面,可以用它在电脑中建立庞大的音色库。

19)通用MIDI不能包医百病
     1991年制定的通用MIDI规定(GM)未能有效克服MIDI的一些局限。例如最初的程序变换信息(Program Change)只是一个数字编号,与它代表什么声音毫无关系。GM定义了128个音色名字,包括乐器音色和效果声,也定义了打击乐器音色在键盘上的排列,规定了一些控制器的使用。GM使得音乐家创作的MIDI文件有可能在不同的合成器上回放,互联网上的MIDI文件可以在配有GM声卡的电脑上回放。
     问题是名字相同的某一件乐器的音色在不同的合成器或声卡上可能差异很大,结果得到出乎意料的合奏声音。
     Roland和Yamaha分别开发了自己的GM规定称为GS和XG,都比GM复杂,但是互相不兼容。
     GM规定目前并没有什么压力,GM2规定虽然已经存在,但使用并不普遍。
     当前有2种让MIDI携带采样波形的格式,一种是MIDI协会开发的DLS,另一种是创新科技开发的SoundFonts,它们之间有许多不同点,但都已经占有一部分市场。

20)MIDI协会出售全套MIDI规定
     MIDI协会的官方网站上开列了所有MIDI规定的名字和版本,美元售价。网址www.midi.org

[转]MIDI常识20条的更多相关文章

  1. MYSQL性能优化的最佳20+条经验

    MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论  131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...

  2. sql 第 10条 到20条

    sql 第 10条 到20条 select * from( select *,ROW_NUMBER () over (order by @@servername) as rownum from tb_ ...

  3. 八爪鱼采集器︱加载更多、再显示20条图文教程(Xpatth、Ajax)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 由于代码布置采集器比较麻烦,又很早知道八爪鱼采 ...

  4. 外媒速递:系统管理员必须掌握的20条Linux命令

    [51CTO.com原创稿件]外媒速递是核子可乐精选的近日国外媒体的精彩文章推荐,希望大家喜欢! 今天推荐的内容包括:系统管理员必须掌握的20条Linux命令.五款最佳Linux屏幕记录应用.MySQ ...

  5. 用一条sql取得第10到第20条的记录

    因为id可能不是连续的,所以不能用取得10<id<20的记录的方法. 有三种方法可以实现:一.搜索前20条记录,指定不包括前10条语句:select top 20 * from tbl w ...

  6. 用一条sql取得第10到第20条的记录-Mssql数据库

    因为id可能不是连续的,所以不能用取得10<id<20的记录的方法. 有三种方法可以实现: 一.搜索前20条记录,指定不包括前10条 语句: select top 20 * from tb ...

  7. history统计命令最多的20条

    1.1.1 统计使用命令最多的20条 [root@ob1 ~]# history|awk '{ml[$2]++}END{for (i in ml) print i,ml[i]}'|sort -nrk ...

  8. 系统管理员应该知道的20条Linux命令

    如果您的应用程序不工作,或者您希望在寻找更多信息,这 20 个命令将派上用场. 在这个全新的工具和多样化的开发环境井喷的大环境下,任何开发者和工程师都有必要学习一些基本的系统管理命令.特定的命令和工具 ...

  9. mysql 性能优化 20 条建议

    MySQL性能优化的最佳20+条经验 2009年11月27日陈皓发表评论阅读评论100,946 人阅读   今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性 ...

随机推荐

  1. JavaScript 变量声明提前

    <JavaScript权威指南>中指出:JavaScript变量在声明之前已经可用,JavaScript的这个特性被非正式的称为声明提前(hoisting),即JavaScript函数中声 ...

  2. iOS、Xcode监测键盘的显示和隐藏变化,并获得键盘高度,改变tableView的frame和偏移

    <pre name="code" class="objc"><pre name="code" class="ob ...

  3. iOS---设置输入框的光标位置

    //这里设置光标位置,让光标位置后移10 textField.leftView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 10, 0)]; tex ...

  4. UIweib的简单实用

  5. Tableview中Dynamic Prototypes动态表的使用

    Tableview时IOS中应用非常广泛的控件,当需要动态的添加多条不同的数据时,需要用动态表来实现,下面给出一个小例子,适用于不确定Section的数目,并且每个Section中的行数也不同的情况, ...

  6. yii2分页的基本使用及其配置详解

    作者:白狼 出处:http://www.manks.top/yii2_linkpager_pagination.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...

  7. iPhone被盗后怎么?这篇文章只办针对iOS7后的系统

    中午准备去吃饭的时候,今天看到Tungbaby的手机被盗后怎么做?http://www.jianshu.com/p/f13f49cd9b90 碰巧我的手机也被盗了.就来分享下我的经验吧.由于我当时是在 ...

  8. Oracle监听服务启动失败案例

    在ORACLE测试服务器上还原恢复了一个数据库后,启动监听服务时出现了TNS-12541, TNS-12560,TNS-00511之类的错误,具体情况如下所示: [oracle@getlnx01 ad ...

  9. Vmware扩展磁盘如何不需重启系统

    在虚拟机Vmware中我们有时候需要添加新的虚拟磁盘或给已有虚拟磁盘扩容(expand),在新增磁盘或磁盘扩容后,Linux系统并不能马上识别到.也就是说你看不到磁盘空间变化(使用fdisk -l查看 ...

  10. W3School-CSS 内边距 (padding) 实例

    CSS 内边距 (padding) 实例 CSS 实例 CSS 背景实例 CSS 文本实例 CSS 字体(font)实例 CSS 边框(border)实例 CSS 外边距 (margin) 实例 CS ...