Linux MIDI:简史,第一部分
1981 年,一位名叫 Dave Smith 的音频工程师设计了一种用于连接合成器的通用接口。他于当年在音频工程协会会议上展示了他的基本设计,1982 年,罗兰公司扩展了设计规范。同年晚些时候,Smith 的公司 Sequential Circuits 生产了 Prophet-600,第一台支持 MIDI 的合成器。
首次公开展示可工作的 MIDI 连接是在 1983 年冬季的 NAMM(全国音乐商品经销商协会)展会上。Sequential Circuits Prophet-600 通过各自合成器的 MIDI 接口连接到 Roland Jupiter 6。将合成器连接在一起当然不是一个新想法,但这种连接方式是新的,并且比早期的解决方案有效得多。同年夏天,雅马哈推出了 DX7 FM 合成器,将 MIDI 硬件作为标准组件。MIDI 迅速受到厂商的青睐,他们认识到标准化基本硬件/软件接口以在不同机器之间进行数据交换的优势。毫不夸张地说,MIDI 推动了 1980 年代后期和 1990 年代初期硬件合成器开发的异常活跃时期。
MIDI 也很快被用于新流行的个人计算机。制造商销售独立的 MIDI 接口卡,允许主机计算机和任何外部 MIDI 设备之间进行 MIDI 数据交换。软件公司创建并销售音乐创作程序和其他 MIDI 软件。配备合适的硬件和软件后,音乐家可以使用计算机来控制合成器、鼓机、混音器、效果器——任何配备 MIDI 连接器的设备。控制程度各不相同,但 MIDI 工作室的效率对音乐制作产生了革命性的影响。
1980 年代后期的 MIDI 工作室通常包括一台计算机、一台键盘合成器、一台鼓机、一些外部机架式合成器、可能是一个 MIDI 可控效果器和一个 MIDI 路由器盒来连接这些设备。当时,主要的音频录制介质是磁带。然而,到 1990 年代中期,MIDI 工作室变得更加以计算机为中心,声卡提供更好的板载合成器,软件 MIDI 音序器不断发展以包含音轨。到那时,音频录制已转移到硬盘。现代 MIDI 工作室可能仍然包括一两个键盘合成器,但计算机本身现在能够托管软件合成器和效果处理器。与此同时,计算机在内部控制所有 MIDI 连接和路由,同时运行能够录制同步 MIDI 和音频数据的音序器。
MIDI 规范很好地响应了其用户社区的需求。该规范现在包括用于编码 SMPTE 时间码的规定、用于远程操作机器传输控制的消息类型、用于合成器的通用乐器音色库映射、标准化的序列数据文件格式以及对多端口硬件的支持,每个端口最多 16 个通道。
对于许多人来说,MIDI 指的是以 MIDI 序列数据文件格式保存的文件,通常带有 .MID 扩展名。如果序列是按照通用 MIDI (GM) 合成器音色库映射编排的,您可以在任何兼容 GM 的合成器上播放它,并听到相同的乐器编排。当然,乐器声音的质量因合成器而异。标准文件格式和通用音色库映射的结合本身引发了一场相当不同的革命,其结果可以通过在 Google 上快速搜索“MIDI 文件”来评估。当我写这篇文章时——2004 年 9 月 7 日——点击次数超过两百万。这是一个简单的证明,但显然很多人喜欢制作和使用 MIDI 文件。
MIDI 是乐器数字接口的缩写。它是用于传输和接收 MIDI 数据消息的硬件和软件接口的设计规范。这些消息的种类和相对重要性各不相同。例如,当您弹奏 MIDI 键盘时,按键和释放动作会发送开/关消息,从而触发接收合成器的声音功能——接收合成器可能是也可能不是您正在弹奏的合成器。音色选择按钮发送 MIDI 程序更改消息,弯音轮和调制轮发送连续的数据流,踏板发送它们自己的消息等等。
MIDI 数据流将各种消息传输到目标设备并激活设备的各种功能。最初的目的是连接合成器,但 MIDI 规范现在涵盖了对各种设备的控制,包括非音乐设备,例如照明系统、烟火表演和舞台液压系统。
MIDI 数据本质上是控制数据,重要的是要注意它不是数字音频数据。与同一文件的 WAV 或 MP3 版本相比,MIDI 文件非常小,这使得它们在存储和访问速度至关重要时非常具有吸引力。
对于技术人员,以下是一些技术统计数据:MIDI 以每秒 31.25 千比特的异步传输速率工作,单个 MIDI 数据字节等于十位。音符开消息长三个字节,因此在合成器键盘上按下一个键大约需要 1 毫秒才能到达合成器本身。虽然 MIDI 是一种相对较慢的串行通信协议,但它仍然足以准确捕捉和播放人类演奏。
尽管 MIDI 很受欢迎,但它并不是基于计算机的音乐制作的完整解决方案。它不直接处理音频数据,其原始键盘方向不利于 MIDI 轻松实现弹拨弦乐器或管乐器,并且其整数值可能无法提供音乐家或作曲家寻求的精细控制。然而,如果您的需求不涉及此类考虑因素,那么 MIDI 可能非常适合您的音乐创作活动。
OSS/Free 内核声音 API 支持原始 SoundBlaster 声卡的基本 MIDI 功能。这提供了最多 16 个通道——不支持多端口接口——并且仅在 UART 模式下支持硬件接口,也称为哑模式,因为它具有相对简单的功能。OSS/Free API 支持原始 MIDI 设备 /dev/midi 和高级设备 /dev/sequencer,用于控制 MIDI 数据队列定时的接口。
从内核 2.6 开始,ALSA(高级 Linux 声音架构)是内核声音系统。在其众多功能中,ALSA 包括与 OSS/Free MIDI 支持的向后兼容性,同时为更现代的 MIDI 系统提供新的支持,包括音序器架构,该架构允许 ALSA 音序器客户端之间的轻松连接,以及用于在没有 MIDI 硬件的机器上创建虚拟 MIDI 端口的模块——在我的笔记本电脑上非常方便。ALSA 的 MIDI 硬件支持包括独立的 MIDI 卡、声卡 MIDI 硬件连接器、串行和并行端口接口以及 USB MIDI 接口。该系统还安装了一些有用的 MIDI 实用程序,例如 aconnect 音序器客户端路由器、用于发送和接收原始 MIDI 数据的 amidi 工具以及用于在命令提示符下录制标准 MIDI 文件的 amidirecord 实用程序。除了 OSS/Free /dev/midi 和 /dev/sequencer 设备外,ALSA 还添加了自己的 /dev/snd/midiCxDx 逻辑设备,其中 C 是卡号,D 是设备号。
ALSA 音序器 API 是 Linux MIDI 支持中最受欢迎的演变。兼容程序可以自由连接,单个端口上允许多个输入。图形跳线面板可用于显示和编辑可用客户端的发送/接收状态。顺便说一句,ALSA 的 virmidi(虚拟 MIDI)端口在系统中显示为真实端口,它们的数据可以路由到任何其他端口(真实的或虚拟的)和从任何其他端口(真实的或虚拟的)路由。
我还必须提到,Linux MIDI 支持扩展到许多操作系统和 CPU 仿真环境,使用 DOSemu(MS-DOS 模拟器)和 XSteem(AtariST 模拟器)可以获得特别好的结果。
至少,一个完整的基于软件的 MIDI 音乐制作环境应包括一个 MIDI 音序器、一个节奏编程器和一个或多个软件合成器。认真的 MIDI 音乐家还应包括辅助应用程序,例如跳线面板和 MIDI 事件过滤器。许多有趣的 MIDI 作曲环境可用,包括 MIDI 编程语言和基于 GUI 的程序。音乐记谱程序尤其受益于 MIDI 连接。标准 MIDI 文件很容易转换为乐谱,您的乐谱作品可以通过 MIDI 轻松渲染和演奏。
在第二部分中,我将描述所有这些类别中的 Linux 程序和实用程序。现在,我为您留下一些来自当前 Linux MIDI 软件场景的视觉盛宴。尽情享受!

图 1. Rosegarden 音序器

图 2. MusE/音序器

图 3. JsynthLib 合成器音色库编辑器/管理器

图 4. XSteem 运行 Atari 的 M

图 5. Kaconnect MIDI 跳线面板

图 6. midirgui MIDI 通道路由器
MIDI 制造商协会网站是您想了解的有关 MIDI 技术细节的所有内容的绝佳资源。
MIDI Farm 是一个获取有关新软件版本和更新新闻的好网站。
MIDI 数据库是免费和商业 MIDI 文件的庞大目录。
Dave Phillips (dlphilp@bright.net) 是一位音乐家、教师和作家,居住在俄亥俄州芬德利。自 1995 年首次接触 Linux 以来,他一直是 Linux 音频社区的活跃成员。他是 Linux 音乐与声音之书 的作者,以及 Linux Journal 中的许多文章的作者。