声音与音乐声音与音乐MIDIMIDI 和音乐和音乐使用 MIDIMIDI 为透过电缆来传递数字命令定义了传输协议MIDI 电缆使用 5 针 DIN 接头, 但是只使用了三个接头一个是屏蔽,一个是回路,而第三个传输数据MIDI 协 议在每秒 31,250 位的速度下是单向的数据的每个字节都由一个开始位开始,以 一个停止位结束,用于每秒 3,125 字节的有效传输速率重要的是要了解真实的声音-不论是模拟格式还是数字格式-不是经由 MIDI 电缆 传输的通过电缆传输的通常都是简单的命令消息,长度一般是 1、2 或 3 字节简单的 MIDI 设定可以包括两片 MIDI 兼容硬件一个是本身不发声,但是单独产生 MIDI 消息的 MIDI 键盘此键盘有一个有标记有「MIDI Out」的 MIDI 端口用 MIDI 电缆将这个埠与 MIDI 声音合成器的「MIDI In」埠连结起来合成器看起来 很像前面有几个按钮的小盒子按下键盘上的一个键时(假定是中音 C),键盘就将 3 个字节发送给 MIDI Out 端 口在十六进制中,这些字节是:90 3C 40第一个字节(90)显示 Note On 消息第二个字节是键号,其中 3C 是中音 C。
第 三个字节是敲按键的速度,此速度范围是从 1 到 127我们恰巧使用了一个对速度 不敏感的键盘,因此它发送平均速度值这个 3 字节的消息顺着 MIDI 电缆进入合 成器的 Midi In 埠通过播放中音 C 的音调来响应合成器释放键时,键盘会将另一个 3 字节消息发送给 MIDI Out 端口:90 3C 00这与 Note On 命令相同,但带有 0 速字节这个字节值 0 表示 Note Off 命令,意 味着应该关闭音符合成器通过停止声音来响应如果合成器有复调音乐的能力(即,同时播放多个音符的能力),那么您就可以在 键盘上演奏和弦键盘产生多条 Note On 消息,并且合成器将播放所有的音符当 您释放和弦时,键盘就将多条 Note Off 消息发送给合成器一般来说,这种设定中的键盘称为「MIDI 控制器」,它负责产生 MIDI 消息来控制 合成器MIDI 控制器看起来不像键盘MIDI 控制器包括下面几种:看起来像单簧 管或萨克斯管的 MID 管乐控制器、MIDI 吉他控制器、MIDI 弦乐控制器和 MIDI 鼓控 制器至少所有这些控制器都产生 3 字节的 Note On 和 Note Off 消息。
胜过类似的键盘或传统乐器,控制器也可以是「编曲器」,它是在内存中储存 Note On 和 Note Off 消息顺序,然后再播放的硬件现在单机编曲器已经比几年 前少见多了,因为它们已经被计算机所替代安装 MIDI 卡的计算机也可以生成 Note On 和 Note Off 消息来控制合成器MIDI 编辑软件,允许您在屏幕上作曲, 还可以储存来自 MIDI 控制器的 MIDI 消息,并处理这些消息,然后将 MIDI 消息发 送给合成器合成器有时也称为「声音模块(sound module)」或「音源器(tone generator)」 MIDI 不指定如何真正产生这些声音的方法合成器可以使用任何一种声音生成 技术实际上,只有非常简单的 MIDI 控制器(例如管乐控制器)才只有 MIDI Out 电缆埠 通常键盘都有内建合成器,并且有三个 MIDI 电缆端口,分别标记为「MIDI In」、 「MIDI Out」和「MIDI Thru」MIDI In 端口接受 MIDI 消息,从而播放键盘的内 部合成器MIDI Out 端口将 MIDI 消息从键盘发送到外部合成器MIDI Thru 埠是 一个输出埠,它复制 MIDI In 端口的输入信号-无论从 MIDI In 埠获得什么都发送 给 MIDI Thru 埠(MIDI Thru 埠不包括从 MIDI Out 埠发送的任何信息)。
透过电缆连结 MIDI 硬件只有两种方法:将一个硬件上的 MIDI Out 连结到另一个的 MIDI In,或者将 MIDI Thru 与 MIDI In 连结MIDI Thru 端口允许连结一系列的 MIDI 合成器程序更改合成器能制作哪种声音?是钢琴声、小提琴声、喇叭声还是飞碟声?通常合成器能 够生成的各种声音都储存在 ROM 或者其它地方它们通常称为「声音」、「乐器」 或者「音色」 「音色」一词来自模拟合成器的时代,当时通过将音色和弦插 入合成器前面的插孔中来设定不同的声音)在 MIDI 中,合成器能够生成的各种声音称为「程序」改变这个程序需要向合成 器发送 MIDI Program Change 消息C0 pp其中,pp 的范围是 0 到 127通常 MIDI 键盘的顶部是一系列有限的按钮,这些按 钮将产生 Program Change 消息透过按下这些按钮,您可以从键盘控制合成器的 声音这些按钮号通常由 1 开始,而不是由 0 开始,因此程序句柄 1 与 Program Change 字节的 0 对应MIDI 规格没有说明程序句柄与乐器的对应关系例如,著名的 Yamaha DX7 合成器 上的前三个程序分别称为「Warm Strings」、「 Mellow Horn」和「Pick Guitar」。
而在 Yamaha TX81Z 音调发生器上,它们是 Grand Piano、Upright Piano 和 Deep Grand在 Roland MT-32 声音模块上,它们是 Acoustic Piano 1、Acoustic Piano 2 和 Acoustic Piano 3因此,如果不希望在从键盘制作程序 改变时感到吃惊,那么最好了解一下乐器声与您将使用的合成器的程序句柄的对应 关系这对于包含 Program Change 消息的 MIDI 文件来说是一个实际问题-这些文件并不 是设备无关的,因为它们的内容在不同的合成器上听起来是不一样的然而,在最 近几年,「General MIDI」(GM)标准已经把这些程序句柄标准化Windows 支援 General MIDI如果合成器与 General MIDI 规格不一致,那么程序转换可使它仿 真 General MIDI 合成器MIDI 通道迄今为止,我已经讨论了两条 MIDI 消息,第一条是 Note On:90 kk vv其中,kk 是键号(0 到 127),v v 是速度(0 到 127)0 速度表示 Note Off 命 令。
第二条是 Program Change:C0 pp其中,pp 的范围是从 0 到 127这些是典型的 MIDI 消息第一个字节称作「状态」 字节根据字节的状态,它通常后跟 0、1 或 2 字节的「数据」(我即将说明的 「系统专有」消息除外)从数据字节中分辨出状态字节很容易:高位总是 1 用于 状态字节,0 用于数据字节然而,我还没有讨论过这两个消息的普通格式Note On 消息的普通格式如下:9n kk vv而 Program Change 是:Cn pp在这两种情况下,n 表示状态字节的低四位,其变化范围是 0 到 15这就是 MIDI「通道」通道一般从 1 开始编号,因此,如果 n 为 0,则代表通道 1使用 16 个不同通道允许一条 MIDI 电缆传输 16 种不同声音的消息通常,您将发 现 MIDI 消息的特殊字符串以 Program Change 消息开始,为所用的不同信道设定声 音,而字符串的后面是多条 Note On 和 Note Off 命令再后面可能是其它的 Program Change 命令但任何时候,每个通道都只与一种声音联系让我们作一个简单范例:假定我已经讨论过的键盘控制能够同时产生用于两条不同 信道-信道 1 和信道 2-的 MIDI 消息。
透过按下键盘上的按钮将两条 Program Change 消息发送给合成器:C0 01C1 05现在设定信道 1 用于程序 2,并设定信道 2 用于程序 6(回忆信道句柄和程序句柄 都是基于 1 的,但消息中的编码是基于 0 的)现在按下键盘上的键时,就发送两 条 Note On 消息,一条用于一个通道:90 kk vv91 kk vv这就允许您和谐地同时播放两种乐器的声音另一种方法是「分开」键盘低键可以在信道 1 上产生 Note On 消息,高键可以在 信道 2 上产生 Note On 消息这就允许您在一个键盘上独立播放两种乐器的声音当您考虑 PC 上的 MIDI 编曲软件时,使用 16 个通道将更为有利每个通道都代表 不同的乐器如果有能够独立播放 16 种不同乐器的合成器,那么您就可以编写用 于 16 个波段的管弦乐曲,而且只使用一条 MIDI 电缆将 MIDI 卡与合成器连结起来 声音与音乐声音与音乐MIDIMIDI 消息消息尽管 Note On 和 Program Change 消息在任何 MIDI 执行中都是最重要的消息,但并 不是所有的 MIDI 都可以执行表 22-2 是 MIDI 规格中定义的 MIDI 信道消息表。
我 在前面提到过,状态字节的高位总是设定着,而状态字节后面的数据字节的高位都 等于 0这意味着状态字节的范围是 0x80 到 0xFF,而数据字节的范围是 0 到 0x7F 表 22-2 MIDI 信道消息(n =信道句柄,从 0 到 15)虽然没有严格的要求,键号通常还是与西方音乐的传统音符相对应(例如,对于打 击声音,每个键号码可以是不同的打击乐器)当键号与钢琴类的键盘对应时,键 60(十进制)是中音 CMIDI 键号在普通的 88 键钢琴范围的基础上向下扩展了 21 个音符,向上扩展了 19 个音符速度句柄是按下某键的速度,在钢琴上它控制声 音的响度与和谐特征特殊的声音可以依这种方式或其它方式来响应键的速度前面展示的例子使用带有 0 速度字节的 Note On 消息来表示 Note Off 命令对于 键盘(或者其它控制器)还有一个单独的 Note Off 命令,该命令实作释放键的速 度,不过,非常少见还有两个「接触后」消息接触后是一些键盘的特征,按下某个键以后,再用力按 下键可以在某些方式上改变声音一个消息(状态字节 0xDn)是将接触后应用于 通道中目前演奏的所有音符,这是最常见的。
状态字节 0xAn 表示独立应用每个单 独键的接触后通常,键盘上都有一些用于进一步控制声音的刻度盘或开关这些设备称为「控制 器」,所有变化都由状态字节 0xBn 表示通过从 0 到 121 的号码确认控制器 0xBn 状态字节也用于 Channel Mode 消息,这些消息显示了合成器如何在通道中响 应同时发生的音符一个非常重要的控制器是上下转换音调的轮,它有一个单独的 MIDI 消息,其状态 字节是 0xEn表 22-2 中所缺少的是状态字节以从 F0 到 FF 开始的消息这些消息称为系统消息, 因为它们适用于整个 MIDI 系统,而不是部分通道系统消息通常用于同步的目的、 触发编曲器、重新设定硬件以及获得信息许多 MIDI 控制器连续发送状态字节 0xFE,该字节称为 Active Sensing 消息这 简单地表示了 MIDI 控制器仍依附于系统一条重要的系统消息是以状态字节 0xF0 开始的「系统专用」消息此消息用于将 数据块按厂商与合成器所依靠的格式传递给合成器(例如,用这种方法可以将新的 声音定义从计算机传递给合成器)系统专用消息只是可以包含多于 2 个数据字节 的唯一消息。
实际上,数据字节数是变化的,而每个数据字节的高位都设定为 0 状态字节 0xF7 表示系统专用消息的结尾系统专用消息也用于从合成器转储数据(例如,声音定义)这些数据都是通过 MIDI Out 端口来自合成器如果要用设备无关的方式对 MIDI 编写程序,则应该尽。