您当前所在的位置:首页 » 中音技术 » MIDI系统专用信息漫谈

MIDI系统专用信息漫谈

来自:中音网

MIDI系统专用信息漫谈
文:金毓镇
以前没有写过系统专用信息的详细介绍,因为基本上没有用户提过这个要求,如果我很不知趣的夸夸其谈,似乎在卖弄学问,成了毛主席批评过的对牛弹琴者,不看对象乱弹一顿。而最近却碰见一些老朋友主动与我讨论系统专用信息的问题,使我既高兴又惭愧。高兴的是我们的用户进步很快,已经开始研究较高深的MIDI技术;惭愧的是我低估了用户们进步的速度,手中没有为他们准备好循序渐进学习的文章。
结合GM2的问世,我想可能是到了进一步介绍系统专用信息的时候,因为GM2规定了不少“通用系统专用信息”,总要懂一点基本知识才能把它用好。
概 况
系统专用信息所涉及的内容很多,任何MIDI设备中,几乎所有用户可以参与改变的参数都包括在里面了。系统专用信息又是MIDI当中最便于扩展的一类信息,MIDI机械控制(MMC)和MIDI表演控制(MSC)是独立的MIDI规定,但它们的表达方式与通常的系统专用信息完全相同。
MIDI协会对系统专用信息的规定颇有共产主义的味道。下面摘录一些:
厂家从MIDI协会取得ID编号后一年之内必须公布其专用信息格式。"公布"不仅意味着使用这一格式,而且要在产品手册和或由厂家出版的技术材料上印出这些信息。使用户和第三方开发者能够充分地使用该乐器。这一向都是MIDI的基本目的:共享信息和鼓励兼容。
任何硬件或软件厂家可以使用现有产品的系统专用信息,无须取得原生产厂家的许可,但直到原厂家重新定义这些信息,他们不得用任何方式作出与原设计者的规定相冲突的修改或扩充。
厂家一旦公布其格式,除了改正其中的错误,不得随意更改。如果有新的格式推出,必须以推出前一版本相同的方式予以公布。
十多年来,所有MIDI产品生产厂家都遵循这一规定,在产品手册的最后,或单独的一本小册子里详尽地开列出该产品的全部系统专用信息。
识 别 码
可能大家都知道,系统专用信息是F0开头,F7结尾的一串数据,一般用16进制的数字表示(数字前边加上0X,或在后边加上H),和其它MIDI数据一样,系统专用信息的数据最高位必须为0。如果掌握了系统专用信息的写法,就等于学会了与合成器等设备直接沟通的"机器语言",这个必然王国就向自由王国靠近了许多,"奴役"起它们就更得心应手了(请原谅我的"奴隶主心态",因为我从来就把电脑产品当成人类的新奴隶,没有对它们客气过)。
F0是个状态码,标明系统专用信息的开始。我们注意到以F打头的16个状态码在MIDI中的地位很不一般(其中有4个尚未定义):F1-F7是系统共用信息(F7标明系统专用信息结束,英文是End of Excusive简称EOX,我也不明白为什么要把它划入系统共用信息类),F8-FF是优先权最高的系统实时信息,负责传送同步或与时基有关的MIDI信息。
F0后边跟着一串识别码,那是给机器们"看"的。我们先讲紧跟在F0后面的第一个识别码。
F0不带通道信息,这就象一个单位的有线广播大喇叭忽然响起来,有人敲敲话筒说"注意",大家都竖起耳朵听他下面说什么。
一个MIDI系统中可能挂着好几种牌号的合成器,还有鼓机、采样器什么的,一听见F0都要注意。喇叭里可能接着说"请××部、××处科级以上党员干部……"。如果你不是××部、××处科级以上党员干部,下边就不用听了。F0后边这几个识别码的作用也差不多,如果给Roland合成器发信息,其它牌号的合成器就不用听。
紧跟F0的头一个识别码可能有4种情况:1-124(124相当于16进制的7C)是厂家的代码,凡是到MIDI协会注册的软、硬件厂商都能获得一个自己的识别号。考虑到可能有更多的厂家需要注册,又规定了如果识别码为0,就表示后边还有2个字节的厂家识别码,这样总够用了。本文后面附一个厂商识别码表供大家参考,那里面就包含带有3个字节识别码的厂家。识别码7D分配给非商业(non-commercial)的学校、研究机构内部使用,这些产品不应流入社会。7E标记"非实时"(Non-Real Time)。7F标记"实时"(Real Time)。
非实时"和"实时"的区别在哪里?合成器或音序器数据或采样样本的传送,差几秒钟也没什么关系。大概象马路上行驶的普通车辆一样该让就让,该停就停,一慢二看三通过。就等于"非实时"。而救火车、救护车、警车等拉响警报,闪动警灯分秒必争的时候,大家都要让路,这就相当于"实时"。MIDI规定中就象交规行路时的优先一样规定了信息"撞车"时的处理准则:状态或数据字节不得与系统专用信息交叉。非"状态"(Status)字节碰上系统专用信息"车队",要注意避让,等它的F7码走完再通过("系统实时"命令遇见谁也不避让)。如果在传送系统专用信息当中又接收到一个"状态"字节,就拦腰切断专用信息,毫不留情。MIDI规定了系统专用信息能被EOX或任何状态字节终止(系统实时例外,它们可以硬插过去)。半段系统专用信息没有用,只能作废。由此一点,大家可以看到MIDI把原则性和灵活性高度统一,堪称模范。
可能有人要问,为什么要给"状态"字节这样高的优先权?问得好。因为8个系统实时(System real time messages)"一字令"都是以"状态"字节出现的,是常年拉响警报的主儿。比如其中的MIDI时钟,如果也因避让其它信息而变得忽快忽慢,那就全乱了。所以大家都要让它们。而且每一个MIDI事件的开头必定是一个状态码,正在传送系统专用信息的时候如果出现MIDI事件,多半是来自主人的命令,MIDI系统的最高指示。
但是系统专用信息这边也有"硬道理",大家知道和SMPTE时间码对应的MTC时间码就以系统专用信息的方式出现,同样是一点也不能差的。所以也得给实时系统专用信息很高的优先权。而当它们双方偶而"对车"时,就依上述的原则来处理。这样处理的结果可能会造成非常微小的时间误差,但完全可以糊弄我们人类的耳朵。
MIDI规定还为通用系统专用信息定义了2个副识别号(Sub ID),它们涉及许多复杂细致的信息,本文先不细讲,只要知道有这回事就行了。
副识别号写在主识别号后面,具体格式是:
F0[主识别号][设备号/通道号][副识别号1][副识别号2]……F7
MIDI规定中定义的识别码就是这些。实际上系统专用信息开始处还有一些其它识别码,那是由各厂家自行规定的,并没有统一的章法。要泛泛的讲很困难,只能以个别厂家为例作些说明。
系统专用信息中经常会包含一个设备号(Device ID),它的作用是为了在同一厂家、同一牌号的设备中识别某一指定的设备。我们想像这样的情况:在同一个MIDI系统中使用了若干件同一厂家、同一牌号的设备,怎么样能把系统专用信息单独发往其中某一设备?用惯MIDI的朋友们马上会想到用通道来区分,但是系统专用信息不带通道信息,所以还要另想办法解决,设备号就是为此而设。一个设备号就可以区分开128件同一厂家、同一牌号的设备。有时它们真的能当作MIDI通道号使用,MIDI规定里有时就称它为通道。
记得数年前教新用户设置合成器时遇到这个设备号我就说不用管它,就是改了也没关系。因为他们总共只有一台合成器,又不会用系统专用信息。如果这些用户后来新添了许多设备,又学习了更多的MIDI技术,也许就要用上设备号了。它的应用原理与MIDI通道非常相似,简单说来就是合成器设备号如果与系统专用信息中的设备号相同,它们就有可能通讯(说"有可能"是因为还需要其它条件),否则一定不可能。为了匹配,随便改动一边的设备号就行了。最糟糕的情况是急等要用软盘中的系统专用信息,因为设备号不匹配送不过去,又不知道专用信息中的设备号是多少,想把它读出来看看,手边又没有编辑系统专用信息的工具,只好象猜哑谜一样,试它128次!一定有倒霉鬼遇上过这样的情况,所以Roland的手册才建议大家用笔把设备号写在存有系统专用信息的软盘标签上以防万一。
数值最大的一个设备号7F具有特殊的含义,MIDI规定中称之为"广播"(Broadcast),那意思就象在大喇叭里喊"全体注意"差不多。
让我们逐字节分析一条Roland XP-10合成器的系统专用信息,它的作用是将混响效果器设置为Room 3类型。后面的文章还会用它举例,在此主要是看它里面所包含的识别码。这条信息由11个字节组成:
F0 41 10 42 12 40 01 30 02 0D F7
F0:标记系统专用信息开始的状态码
41:Roland公司识别码
10:设备号
42:型号识别(XP-10自己特有的识别码为7B,42是GS识别码)
12:命令识别码(与之相对应的是"请求识别码"11)
40 01 30 :地址码(我发现GS音源的地址是统一的)
02:数据(00到07代表了8种混响类型)
0D:校验码
F7:系统专用信息结束码
附表:在MIDI协会注册的厂商和分配给他们的识别码
1998年9月前已注册的厂家
地 址
合成器或其它MIDI器材中的专用信息内容虽然很多,但它们都按一定的地址排列,用户可以方便地调出或写入数据。有的数据不能拆开,需要整块传送;有的数据(就象前面所举的效果器例子)可以单送。一些参数与控制变换命令重合,用户可以根据情况选择从任意一个渠道送出命令。系统专用信息无疑包含更多参数,有些参数甚至无法用面板的按钮加以改变。


有的软件厂家替用户代劳,将烦人的直接书写二进制或16进制码码变成鼠标的点击和拖曳,形成了被称为Editor/Library的一类软件。一些功能齐全的大型音序软件中包含了一部分这类功能,还有些被称为MIDI Utility的工具软件也能帮助用户发出系统专用信息命令,它们要求用户"粗通"系统专用信息就行了。


我们还以XP-10为例进行说明。这里解释一下为什么本文总以XP-10为例,理由非常简单:1. 笔者十多年前就觉得Roland的系统专用信息条理分明,层次清楚,比其他厂家的容易读;2. 碰巧笔者手头有一本XP-10手册。
XP-10英文手册的84页有一张系统专用信息的"地图"。我们可以从中看出地址10 00 00到10 00 2B是系统设置(System Setup)参数;地址20 00 00到20 0F 7F是用户表演(User Performance)参数;地28 00 00址28 04 1F到是表演临时参数(Performance Temporary);地址30 00 00到30 27 7F是用户音色(User Tone)参数;地址38 00 00到39 20 4F是用户打击乐(User Drum Set)参数。这5部分参数都属于XP-10的数据,而且只能整块传送,不能单独传送其中某一参数。
再往下,就是最有意思的音源参数部分,有关音源全局的系统参数(System Parameters地址40 00 00到40 01 3F);各声部参数(Part Parameters地址40 0x 00到40 2x 5A);打击乐参数(Drum Setup Parameters地址41 m0 00到40 m8 7F)。
接下来的表格对它们有非常详细的说明,用户据此发出修改某一参数或若干参数的命令都很方便。我们前面所举改变混响类型的命令地址为40 01 30,参数长度1字节,数值范围0到7。如果接下来设置地址为40 00 31的混响特性(Reverb Character),不用再写地址,直接写入参数即可。如果需要设置的参数地址不连续,就要用F0开头重新写一条系统专用信息。
和 校 验
为检查数据传送中是否发生错码或丢码等问题,许多厂家在系统专用信息中设置了一个和校验(Checksum)码,通常位于最后的F7之前。和校验是把各个地址和数据字节用某种算法变成一个字节。发送方算一遍,写上校验码;接收方收到数据后也马上算一遍,如果得数相同就认为传送正确,否则就是有错。因为要用16进制作这样的计算,已经够麻烦的。再加上每个厂家有自己的算法,各不相同,经常要记错。笔者遇到必须算的时候,经常是把手册放在手边,借助计算器或软件进行计算。这里仅简单介绍Roland使用的和校验计算方法。
XP-10的英文手册91页详细介绍了和校验的计算方法,还举了3个实例,但这里的算法是把16进制化成10进制计算,得出结果后又变回16进制,更多了一层麻烦。还不如始终都用16进制计算省事,所以下面的说明不是照书译的。
Roland的计算方法是:把一条命令中的地址和数据字节累加起来(开头的F0、识别码以及最后的F7不参与),如果总和小于16进制的80,就用80减这个和,将结果插在F7字节前边;如果总和大于16进制的80,就先除以80,不管商是多少,用80减余数,得到和校验值。
例如我们前面引用过的例子F0 41 10 42 12 40 01 30 02 ?? F7当中,??是填写校验码的地方。
除去状态和识别码,40H+01H+30H+02H=73H
73小于80,所以80H-73H=0DH,把0D写在F7前面就行了。
笔者认为自己的说法比书上更直接了当,但许多音乐家朋友们可能还是觉得太深奥了,在下只能表示遗憾和理解,请你们读下面一章。
使用系统专用信息的捷径
电脑音乐家借助高科技,能够独自完成从构思到出唱片整个音乐的生产过程。但是在每一个步骤上都会或多或少遇到距音乐家的学问相当遥远的技术细节。这些年来率先使用电脑音乐系统的音乐家们尽最大努力,学习了许多新知识和新技术,但是象直接写系统专用信息甚至计算校验码这类工作简直是在给他们出难题。我一向认为不应该让音乐家把许多精力花在解决纯技术问题上面,这将是一种巨大的损失。但当他们遇到这类问题时怎么办?我目前能想出4种解决方案:1.退让 绕过问题。2. 自己拼命学。3. 请一个合作者分担。4. 寻求高科技解决方案。最后这一条对于习惯"孤军作战"的朋友可能是最佳方案,就象古人发明的"以夷制夷"(可惜没玩好)那样,以高科技对付高科技。
这意思就是说系统专用信息虽然对音乐家很复杂难懂,但已经有了很多管理系统专用信息的软件程序,比系统专用信息本身要好学得多。学会一个这样的程序就能间接地用好系统专用信息。就象古时候刘邦跟韩信侃山,讨论各自能带多少兵。老韩口出大言:"多多益善",老刘甘拜下风,说自己最多不过能带5万兵,但随后又补充一句,说自己善于带将。我们要向老刘学习,既然带兵能力有限,带将不是更好吗?反正老韩是他的部下。
闲话少絮,书归正传。
要想学练下面的招数,先看看您的合成器或音源后头接了几根MIDI线。如果您使用MIDI接口,要用两条线把IN和OUT分别连到接口上。如果您只有一件设备,用To Host口连到电脑上,就不需要另外接线了。
为什么需要用2条MIDI线?平时我们向音源送MIDI信息,一条线就够了,但是现在也要从音源发回来一些信息,所以用2条线方便些。一条线并非绝对不行,只是又拔又插很麻烦,有时来不及,看下去就明白了。
从Cakewalk的View菜单选择Sysx,显示出处理系统专用信息的窗口。[图一]
不少人对它很陌生,其实从2.0版起它就是这个模样,别处的变化很大,唯独这里保持原样。窗口左边是功能按钮,如送(Send)、接收(Receive)、命名(Name)、编辑(Edit Bytes)等等。右边是256条系统专用信息的目录,如果还没有接收或载入,就全是空的
我们先练习接收。点按Receive,弹出接收窗口。[图二]
这里开列了许多能够跟Cakewalk"说得上话"的合成器或音源的名字。"说得上话"的意思就是Cakewalk能够通过MIDI向它们发出转储(Dump)数据的请求,如"××,请把你的用户音色库发过来",对方接受了请求以后马上将所要求的信息送出。发请求和送数据是分别在2条MIDI线上进行的,我们所说的"马上"比一眨眼的时间短得多,谁也来不及在这么短的时间改插MIDI线,这就是需要用2条MIDI线的理由。
找到你所用的合成器名字并选择它以后点按OK,立即出现一个小窗口,[图三]
如果其中表示接收字节的数字飞快增加,就表示正在接收。它停止在某个数字上表示接收完毕。如果始终为0,就有问题,要仔细检查每一个环节,找出原因。
如果寻遍了这里的名字也没发现自己的合成器怎么办?请看最顶上的一行:You start dump on instrument(你从乐器上开始转储),一切没有料到的情况全由它对付。
我们还以XP-10为例,名单上没有它的名字。我们就选You start dump on instrument,点按OK,小窗口也立即出现,它在等你发送数据。这时你要改插MIDI线还来得及,干什么都来得及,它会耐心地等下去。
我们让它等一会。XP-10英文手册57页右边上半是有关设置ID号的操作,下半部是转储数据的操作。XP-10能够选择发送4类数据:1. 256用户音色,2. 20用户打击乐,3. 64用户表演(Performance)设置,4. 将前面3类数据一起送出。挑选好数据,按下ENTER钮,转储就开始了。我们再看Cakewalk的小窗口,数字可能已经在走动了。
接收完毕,给它起个名字存盘,大功告成。
有的合成器或音源可以送出非常细小的信息,比如某一声部的音色,甚至仅包含正在编辑的某一参数。字节数从几个字节到数百字节都有可能。
我们不用关心这些系统专用信息里边写的是什么(Cakewalk手册里说它也不关心),如果真想看一看,或者想改、想自己写,可以选择Edit Bytes命令。
练会了这一手,真象"留得青山在,不怕没柴烧"一样。不怕合成器的电池用完了丢失数据,不小心的初始化也不会搞丢什么。需要时把库存的数据拿出来(用Load Bank命令),立即发出也行,插在乐曲中发也行(要在事件表中插入),拷在软盘上送人也行。我就该恭喜阁下使用MIDI的水平进入更高的层次了。
初学乍练这套功夫可能不象上面所写的那样顺利,有些问题我还能想得出,在此提前打个招呼。但是因为合成器的牌号众多,各不相同,实在无法细说。
除了前面讲到的设备码匹配问题以外,合成器的设置中经常设有限制系统专用信息传送的选项,或者保护内存数据,不允许外来的信息随意改动。如果它不准系统专用信息出入,上述操作就无法进行。Cakewalk中同样有限制系统专用信息传送的选项,事先要记得把它们都打开。如果用一些廉价过时杂牌声卡充当MIDI接口,因为它们的缓冲器太小甚至根本没有缓冲器,能致使发生数据溢出错误。
还有些小窍门,说穿了都很简单。例如拿作品参加某合成器的作曲比赛,怎样保证自己的设置确实有效?只要在乐曲开头处写进一条初始化命令,接下来是自己的设置,就不会受合成器原有设置的影响了。如果为GM、GS或XG音源或合成器写作,同样别忘记在开头写上一条初始化命令。这些命令都很短小,而且写过一次存作样板,以后照搬就行了。
自己编辑过的用户音色也可以和乐曲存在一起,因为这类信息通常比较长,最好在乐曲开始前加一小节,不写音符,专门处理系统专用信息和各种设置。
如果不愿意把自己创造的音色留在合成器中,可以在乐曲末尾再写一个初始化命令,将用户音色区清扫干净。
询问(Inquiry)和答复
一些高级MIDI接口的设置程序能够自动识别连接到接口上的设备。别以为这是软件的什么魔力,明白了MIDI规定中还有询问信息这一项,戏法人人会变。
询问信息(Identity Request)非常简单,等于向MIDI系统中的设备说:"请自报家门"。设备收到这一请求后立即把自己的厂家、家族、型号等代码报上(Identiry Reply)。如果设置软件中有一张代码表,拿来一对照就知道是什么设备了。
想试一下吗?送一条F0 7E 7F 06 01 F7询问信息出去,看看能得到什么答复。
如果记得前面讲过的内容,不难看出这是一条以广播方式发出的系统非实时信息,MIDI系统内所有设备都应该回答。
传送采样样本
采样机的样本文件不但能借助软盘、硬盘、光盘进行传送,也能够通过MIDI传送。在这方面MIDI同样想得很周到,各种分解度、各种采样率都能适应。


从跟在F0后面的识别码可以看出样本传送属于通用系统专用信息中的非实时信息,它并不"十万火急",可以避让优先权比它高的信息,遇"红灯"多等一会儿也可以。
传送分两种型式,一种叫"闭环(Closed loop)",另一种叫"开环(Open loop)"。以"闭环"传送时MIDI输入、输出形成一个环,收、发双方在传送的间隙进行"握手(Handshaking)"对话,以确保传送任务的正常进行。"开环"传送没有"握手"对话,送的一头不管对方的情况只顾送,送完为止。
下面我们用拟人手法模拟样本传送时的对话,圆括号中是命令,方括号中是机器的行动。
电脑:伙计,请把2通道3号音色送过来(Dump Request)。
采样器:[赶紧检查自己2通道是否有3号音色,如果有,就组织它送出;如果没有,就只当什么都没听见。最初的采样信息送出之后要耐心等待2分钟以上,因为电脑那边可能有许多事要处理。]
电脑:前一段信息正确接收,请接着送。(ACK)
采样器:[送下一段信息,同时注意看从MIDI IN返回的信息]
电脑不只是傻乎的说"正确接收",该说什么它就会说什么。可能出现的情况无非以下3种:
电脑:前面一段没收好,请重发一次。(NAK)
采样器:[再发一次]
电脑:从4号软件包开始取消传送。(Cancel)
采样器:[停]
电脑:我这里有其它紧急公务需要处理,请你稍等一会再发。(Wait)
采样器:[等ACK]
样本信息一般较长,考虑到接收方的缓冲器会被塞满而出错,就象一口饭要咽下去才能够再吃一口那样,MIDI依照最可怜的采样机(缓冲器最小)规定了每128字节打一个"包(Packet)",编上号,顺序送出的规矩。
把样本切开传送还有利于"疏导"交通。根据MIDI的"交规",数据字节要避让系统专用信息,但等久了就会造成"塞车"误事。现在每128个字节有一个"空档"可供其它信息穿插,情况就好一些。传送128个字节大概要用0.04秒,一般尚可容忍。插在一串节奏整齐的音符中(成串的音符经常用"运行状态"传送,一个状态码打头,后面全是数据)就有被发现的危险,要尽量避免这种情况。
采样包有自己的格式,为了及时发现传送中出现的意外错码,每一包最后都附一个校验码(计算方法完全不同于Roland),接收方一旦发现问题,会要求重发。
发送方面在送出样本的同时密切注意对方的回应,以便决定自己下一步是接着发,或是重发一遍,或是取消,或是停止,或是稍等。它也很累呢。
有时等来意外的回音,大概有这么几种情况:一种是等来了一个错码,横竖看不懂。这时它不会徒劳瞎猜乱动,一般就乖乖地停下来,听候主人发落。还有一种情况是死活等不来回音。以机器对主人的忠实程度,它会等上"一辈子",我们可不能让它这么傻等下去。MIDI规定如果等够20毫秒对方仍不来回音(开始传送时要等够2分钟),就可以认为对方"点头默许"了,立即接着发下一包,这样的通讯就是"开环"方式。再有一种比较复杂的情况:接收到一包小有问题的数据,比如校验码对不上号,收方要求重发。不知什么原因对方没有照办,而是接着往下走,发来下一包数据。按机器的死认真"脾气",这时会再要求重发,如果对方一样死脑筋不照办就会让双方顶起牛来,进入"死循环"。对于这种情况,MIDI要求接收方面"难得糊涂"一下,如果下一包本身没有问题,就高抬贵手忘记前面的小错,接着干活。因为采样文件数据特别巨大,回放起来一秒钟就需数万字节之多,别说错一个比特,就算整包都丢失(几十字节)也没什么了不起。而机器顶牛不能正常工作就是因小失大。总之机器必须老实听话,卖力干活。MIDI规定就是它们的"宪法",如果稍有差错,轻则被修理收拾,重则废掉,卖掉。
采样率和样本的分解度指标不断在提高,我们正在使用的样本可能具有不同的指标。也许大家有兴趣想了解为什么MIDI的样本传送能适应各种分解度、各种采样率。
秘密在样本信息的编码规定里。每个被传送的样本都带有一个连头带尾字21节的开头(Dump Header),通道号、样本号、样本长度、分解度、采样率、循环点、循环方式等全包括进去了。它用一个字节表述样本分解度,一个7比特字节可以表达的最大数目是128,十多年前定下的MIDI规定把这一字节的有效范围限制在8-28,当前流行的24-bit规格还没有达到规定的上限。大家知道MIDI数据要求最高位为0("状态"字节最高位为1),实际只有7比特可用,所以8-14bit的样本要占用2个字节,15-21bit的样本要占用3个字节,22-28bit的样本要占用4个字节。每个采样包所含的样本数量与分解度有关,并不固定。
它用3个字节表述采样周期,也就是以纳秒(又称毫微秒)为单位的采样率倒数。这一招想得绝,因为采样率越高,这里的数字越小。任科技发展采样率越来越高,它有0在那儿等着呢。
样本传送不但能够准确表达样本中的循环,甚至充分考虑到多重循环的问题,不过这时要用上副识别号。本文不准备细讲这些枯燥的编码规定,读者了解到以上的情况已经足够了。需要做的"家庭作业"是把两台采样机或一台采样机一台电脑MIDI起来,看它们怎么样突破采样文件格式互不兼容的壁垒,欢快地以MIDI语言"互诉衷肠"。
时间码
MIDI时间码(MTC)是和SMPTE时间码相对应的MIDI信息,MIDI规定中这一部分编码设计得非常巧妙,充分体现了开创者的智慧。
MIDI时间码有两种类型,一种叫1/4帧(Quarter Fram)时间码,另外一种叫完整(Full)时间码。
我们先说1/4帧时间码。这是设备在正常走动(如录、放音)时使用的,顾名思义它每1/4帧发一次,有点象MIDI时钟(MIDI Clock),实际大不相同。
我们知道MIDI时钟就是每个4分音符发24个F8,它是系统实时信息,大家要给它让路以保证音乐的速度和节奏不出偏差的那位。但它仅仅是"拍点",就象节拍机那样打点,甚至没有轻、重拍之分。
而MTC时间码是绝对时间码,包含了时、分、秒、帧信息,要复杂得多。以每秒30帧计算,一秒钟就需要发120个1/4帧时间码,平均约8.3毫秒发一次,数量很多。别以为它数量多就要占用许多时间,MIDI送2个字节只需1/1600秒,120个1/4帧时间码总共才用去0.0768秒,微不足道。但1/4帧时间码是系统共用信息,优先权低一些。
1/4帧时间码由2个字节组成。分和秒都是60进位;小时24进位,用2进制表示60,要用6个比特;表示24要用3个比特。2个字节怎么能携带这么多信息呢?原来MTC用8个1/4帧时间码拼凑出一个完整的时间码,也就是说MTC时间码每隔2帧刷新一次。1/4帧时间码的2个字节当中前一个是系统共用信息状态码F1,不含数据。随后的数据字节拿出3个比特写识别记号,只带4比特信息。为什么要有识别记号?一是便于顺序拼凑出完整的信息,二是可以看出运行方向。当记号从小到大进行,表示正向录、放;如果记号从大到小进行,则表示反向录、放。


信号要尽可能密、占用带宽要尽量少、更新要尽可能快,这些看似很难同时达到的要求由1/4帧时间码兼顾起来了。事实证明1/4帧时间码具有足够的精度,工作非常稳定。


但多轨录音机快进、快退卷带或搜寻时,再用1/4帧时间码就要出问题了,因为这时信息量猛然增长几十倍,会引起线路阻塞。MIDI解决这个问题的方法是马上让1/4帧时间码发生器停止工作,直等到卷带结束,立即发出一个完整时间码,然后稍息。稍息的用意一方面是让同步的机器有时间追上来,另一方面看多轨录音机下步干什么。如果还是快卷,它就照旧处理;如果正常走带它就改发1/4帧时间码。
完整时间码由10个字节组成,是通用系统实时信息。因为它耽误不起,需要有很高的优先权。
实例分析
这里为大家分析几个系统专用信息实例。
例1
命令
打开GM系统:F0 7E 09 01 F7
关闭GM系统:F0 7E 09 02 F7
解释
F0:系统专用信息开始的状态码
7E:系统非实时信息识别码
:设备识别码,GM规定建议用7F(广播)
09:GM信息识别码
01/02:数据
F7:系统专用信息结束码
说明
这是写在通用MIDI规定中的2条命令,非常简短,只有一个码不同。GM规定要求合成器或音源、声卡等设备接收到打开GM系统命令后立刻停止一切正在发音的声音,将内部数值按规定中开列的数值复位,全部工作必须在100毫秒内完成。
关闭GM系统命令使设备退出GM模式,回到其原始状态。
例2
命令
GS复位(GS reset):F0 41 42 12 40 00 7F 00 41 F7
退出GS模式:F0 41 42 12 40 00 7F 7F 42 F7
解释
F0:系统专用信息开始的状态码
41:Roland识别码
:设备识别码, 有效值00-1F,默认值10(17)
42:GS类型识别码
12:命令识别码
40:地址最高位
00:地址
7F:地址最低位
00/7F:数据
41/42:校验码
F7:系统专用信息结束码
说明
这是典型的Roland系统命令,两条命令有2个不同的字节。实际就是往40 00 7F地址写一个数据00或7F,象开关一样。前者让合成器或音源、声卡等设备按GS初始化要求复位。Roland建议把这一信息写在为GS音源创作的音乐开头处,以便正确回放GS数据。Roland要求在50毫秒之内执行完这条命令。


这两条命令的校验码也可以给我们一点启发,你老老实实地板手指头算就傻了。如果已知数值00时的校验码为41H,7FH比80H少1,因此只要往41H上加1就成。
例3
命令
主音量(Master volume):F0 7F 7F 04 01 ll mm F7
解释
F0:系统专用信息开始的状态码
7F:通用实时信息
7F:设备识别码(广播)
04:副识别码,设备控制信息
01:副识别码,主音量
ll :主音量低字节
mm:主音量高字节
F7:系统专用信息结束码
说明
这条命令原来在Roland内部使用,现在已经写进了GM2规定。它的控制涉及到所有声部,和仅控制一个通道的7号或11号控制器不同。Roland的GS音源另有一条命令和它的作用完全相同,用户可任选其一使用:
F0 41 7F 42 12 40 00 04 vv ss F7
有关的说明可参照前面的GS复位命令,vv是数值,ss是校验码。

Copyright ©2013 Centrmus. All Rights Reserved. Privacy Policy/Your China Privacy 中音公司版权所有,未经允许不得转载,
地址:北京朝阳区建国路88号SOHO现代城D座0712室 电话: 01085801115 传真: 01085801114 邮编:100022