Linux MIDI:简要调查,第 3 部分

作者:Dave Phillips

在我对 Linux MIDI 软件的调查的这一部分中,我介绍了各种 MIDI 实用程序,其中一些实用程序已成为我自己的 Linux MIDI 工作室中不可或缺的组件。

系统独占消息和 MIDI 音色编辑器/音色库

正如我已经提到的,旧式 MIDI 工作室比今天的基于软件的工作室更以硬件为中心。音序器、合成器、采样器、MIDI 可控混音器、MIDI 通道路由器和 MIDI 事件处理器都作为有用的盒子提供,为您的工作室设置提供了更大的灵活性。大多数这些设备的共同特点是能够将机器的内部设置和状态转储到一种称为系统独占的 MIDI 消息格式中。Sysex(通常称为)是 MIDI 设备制造商容纳其设计特定功能的一种方式;也就是说,sysex 代码是制造商特定的,因此适用于 Yamaha 合成器的 sysex 消息对于 Roland 合成器来说毫无意义。更进一步,我们发现 sysex 消息也是设备特定的,因此对 Yamaha TX81Z 的 sysex 调用对我 Yamaha TX802 来说毫无意义。

Sysex 对于合成器和其他“音色”导向的设备尤其重要。例如,我的 Yamaha DMP11 是一款 8 通道 MIDI 可控混音器,具有许多功能,其中一些功能只能通过 sysex 命令访问。更重要的是,备份此混音器的自定义音色和设置的唯一方法是使用 sysex。

通过使用设备的 sysex 代码,MIDI 程序员能够编写一种称为合成器编辑器/音色库的 MIDI 软件。这种类型的软件试图寻址各种机器,被称为通用编辑器/音色库,并且寻址的设备可能包括合成器以外的机器。编写一个像样的通用编辑器/音色库是一项不简单的任务:程序员必须知道许多机器的 sysex 代码,然后他必须为每台机器设计可行的界面。由于每台合成器都是独特的设备,因此必须包含许多程序的接口,以适应广泛的功能。这些功能包括典型的阶段,例如包络发生器和振荡器定义,以及不太常见的功能,例如微调表和键盘缩放图。

与常见的 MIDI 消息不同,sysex 命令具有相对宽松的结构,基于以下固定方面

  f0	begin sysex
  ..	manufacturer and device IDs
  ..	any number of bytes
  f7	terminate sysex

系统独占消息通常以十六进制表示法表示。

制造商 ID 在 MIDI 制造商协会注册。以下示例显示了一条消息,提示我的 Yamaha TX802 执行所谓的批量转储——所有内部状态和设置都转储到机器的 MIDI 输出端口

  f0 43 20 00 f7

其中

  f0  Start sysex command
  43  Yamaha manufacturer ID
  20  Voice memory bulk dump request
  00  Device number
  f7  End sysex command

此消息以另一个 sysex 消息回复,其中填充了一些字节,这些字节表示机器的音色内存(所有音色)。与大多数其他 MIDI 消息不同,sysex 消息可以是任何大小。此功能对于音色编辑非常方便,但是当您想将冗长的 sysex 消息插入实时 MIDI 数据流时,也可能导致定时问题。

以下 sysex 示例将参数更改发送到活动音色,Yamaha 称之为音色

  f0 43 10 01 06 00 f7

其中

  f0 Start sysex
  43 Yamaha ID
  10 Device & channel number
  01 Parameter group/subgroup
  06 Parameter number (here, Algorithm Select)
  00 Data (here, algorithm #1)
  f7 End sysex

因此,此消息将活动音色的 FM 算法切换为算法 1。由于其大小,当将此类简短的参数更改消息插入 MIDI 数据流时,您可能遇到的定时问题会更少。

如果您有任何外部 MIDI 设备,则通用编辑器/音色库是非常有价值的软件,但正如我所提到的,编写此类软件并非易事。值得庆幸的是,Linux MIDI 音乐家使用硬件合成器和其他设备有一个出色的项目可用:JSynthLib。

JSynthLib

JSynthLib 是一个基于 Java 的通用编辑器/音色库,适用于 Windows、Mac OS X 和 Linux。最新的公共版本是 0.18 版,日期为 2004 年 3 月,但请注意 JSynthLib 是一个活跃的项目;它只是移动缓慢。开发人员声明 JSynthLib 应被视为 beta 软件,但我发现它在 Sun 的 JDK 1.4 下已经很有用且稳定。

JSynthLib 当前支持 30 个设备,主要是合成器,CVS 中有更多。代表的制造商包括 Alesis、Korg、Kawai、Roland 和 Yamaha;请查看 JSynthLib 网站以获取最新的列表。

对我来说幸运的是,我拥有当前列表中的两个合成器,Yamaha TX802 和 Kawai K4r。下面的屏幕截图显示了 JSynthLib 与我的合成器一起工作,展示了通用编辑器/音色库的主要优点——组织合成器的编辑功能并在全屏显示中表示它们。通用编辑器/音色库不会为您的设备提供新功能,但它确实使您更容易理解合成器的工作原理,从而使您更好地控制其功能。

Linux MIDI: A Brief Survey, Part 3

图 1. JSynthLib 和 Yamaha TX802

Linux MIDI: A Brief Survey, Part 3

图 2. JSynthLib 和 Kawai K4r

本简介并非旨在作为教程,因此如果您想了解有关 JSynthLib 以及如何使用它的更多信息,请自行下载并安装它。您需要最新版本的 Java 才能与 JSynthLib 一起使用,但幸运的是,所有这些都很容易做到。同样,请参阅 JSynthLib 网站了解详细信息。

其他编辑器/音色库

JSynthLib 并非孤军奋战。SynthEd 项目 旨在为 MIDI 音乐家提供另一个跨平台通用编辑器/音色库,但它使用 XML 和 Python 而不是 Java。该项目仍处于规划阶段,尽管可以在 SynthEd 网站上查看工作原型的屏幕截图。

原始 sysex 实用程序仅传输和接收批量转储请求,但它们不提供编辑功能。当您没有其他方法备份音色和音色库数据时,这些实用程序很有用。Tim Thompson 古老的 glib(不,不是那个)是一个原始 sysex 实用程序,可能在命令行上很有用。但是,更现代的 Linux MIDI 音乐家可能更喜欢使用 Christopher Nitschkowski 的 SysExxer,这是一个用于 sysex 批量转储管理的漂亮 GUI(图 3),或 Patrick Holzhuizen 基于 Java 的 MIDI 备份实用程序(图 4)。

Linux MIDI: A Brief Survey, Part 3

图 3. SysExxer

Linux MIDI: A Brief Survey, Part 3

图 4. MIDI 备份

一些特定于机器的编辑器/音色库可用,包括 Chris Wareham 的 AlphaJuno 软件,用于 Roland Juno 1、Juno 2 和 MKS550 合成器;Olivier Delhaye 的 MC303 批量转储实用程序,用于 Roland MC303 鼓机;André Majorel 的 dx7bag 命令行工具,用于接收来自 Yamaha DX7/DX7II 合成器系列的音色库转储;以及 Marc Halbrügge 的 KurzFiler 音色库,用于 Kurzweill K2000。

在不提及 ALSA 有用的 amidi 的情况下,我不能离开这个主题,amidi 是一个命令行工具,可用于启动和接收 sysex 消息。Amidi 的基本用法与以下示例一样简单

amidi -S f0 43 10 01 06 00 f7

此命令发送上面描述的算法更改。有关 amidi 的更多详细信息,请运行man amidi在命令提示符下。

Midirgui

Josep Andreu(又名 holborn)为 Linux 编写了 一些出色的 MIDI 软件,所有这些软件都利用了 FLTK GUI 工具包。在他的作品中,您可以找到 MIDI 通道器 midirgui 和软件 MIDI 控制界面 mcontrol。

Midirgui 接收传入的 MIDI 数据流并将其分配到六个输出单元中的任何一个,每个单元都是一个 ALSA 音序器客户端。您可以过滤允许通过每个单元的通道,当您只想访问始终处于 Omni 接收模式的设备上的单个音色或声音时,这非常有用,这意味着它在所有通道上接收 MIDI。因此,通过将其中一个单元设置为仅传递通道 10 上的 MIDI 消息,我能够在播放其他合成器时使用我的 SBLive Emu10k1 合成器上的鼓。图 5 演示了必要的连接:外部音序器发出多通道 MIDI 流并连接到 midirgui,客户端 128(在 JACK MIDI 音色库输入端口中)。Midirgui 的第一个单元客户端 129 过滤数据流,并且仅将通道 10 上的消息发送到 Emu10k1。

Linux MIDI: A Brief Survey, Part 3

图 5. Midirgui

Mcontrol 是另一个强大的 Linux MIDI 实用程序。您可以为 MIDI 键盘上的每个控制器分配最多 12 个同步 MIDI 控制消息,让您可以使用单个控制器更改各种参数。您也可以单独使用 mcontrol 作为 MIDI 控制界面,使用其滚轮向其连接的目标发送六种消息类型中的任何一种。图 6 显示了 mcontrol 配置为动态控制上面看到的算法选择消息,因此当我移动 mcontrol 的调制轮时,我可以观察其对 TX802 显示的影响。

Linux MIDI: A Brief Survey, Part 3

图 6. Mcontrol

您可以将控制器移动记录到音序器中,并且可以将控制器分配保存为程序和程序库。

QMidi*

Matthias Nagorni 博士显然是一位不知疲倦的音乐家和 Linux MIDI 软件开发人员,他为我们提供了一个最优秀的 Linux 合成器之一,他的 ALSA 模块化合成器。他还编写了许多出色的 MIDI 实用程序,统称为 Kalsatools

QMidiArp 是一个 MIDI 琶音器。可编程琶音器是模拟模块化合成器最酷的功能之一。原则上,琶音器是一个早期的音序器,记录了一系列指令,用于重复和移调音高,以便在单音符上自动播放;琶音器在单音合成器上尤其受欢迎。QMidiArp 在软件中执行相同的操作,扩展了原始模型以包括您喜欢的任意数量的琶音器,并添加了将和弦作为琶音一部分的能力。该程序也是一个多通道/多端口敏感的 ALSA 音序器客户端。

图 7 显示了 QMidiArp 正在处理好医生提供的演示文件,但仅仅屏幕截图无法让您了解 QMidiArp 实际执行的操作。您必须下载它并亲自聆听。

Linux MIDI: A Brief Survey, Part 3

图 7. QMidiArp

QMidiControl(图 8)是一个更简单的实用程序。在其默认配置中,QMidiControl 显示库 16,顺序编号为 1 到 16。库中推子的数量可以使用 --num_controller 选项增加,初始编号可以使用 --offset 标志偏移。QMidiControl 确实是一个简单的程序,仅表示编号的 MIDI 控制器——即没有 sysex 或音高弯音——但如果您的合成器响应 MIDI 控制器但缺少物理旋钮和推子,您可能会发现它非常有帮助。当配置为与 Nagorni 博士的 QAMix(一个 MIDI 可控声卡混音器)一起使用时,QMidiControl 尤其有用。

Linux MIDI: A Brief Survey, Part 3

图 8. QMidiControl

QMidiRoute 是一个 MIDI 映射器。它接收某种类型的 MIDI 消息并将其转换为另一种类型。映射可能非常有用:例如,您可以将音符力度映射到影响混响参数的控制器,从而创建“跟随”音符事件力度的混响。

图 9 中的屏幕截图显示了 QMidiRoute 配置为将音高弯音消息流转换为 MIDI 音符(映射 1),并同时转换为控制器 #7 的 MIDI 控制器消息流,MIDI 音量控制器(映射 2)。音量控制响应被反转,因此当音高弯音轮向下转动时,它会产生一个色阶音符流,这些音符随着音高的降低而变得响亮。向上转动滚轮,音量随着音高的升高而衰减。

Linux MIDI: A Brief Survey, Part 3

图 9. QMidiRoute

我将其留给读者想象 QMidiRoute 的其他用途。MIDI 映射器可能是一个有用的工具,我希望看到该程序的更多开发。

MIDI 音色库

ALSA MIDI 音序器 API 指的是与我在上个月的专栏中介绍的 MIDI 音序器完全不同的东西。订阅 ALSA 音序器 API 的程序可以充当彼此自由连接的客户端,从而允许与单个资源进行多个同步连接(MIDI 多路复用)。可以使用 ALSA aconnect 命令行工具实用程序管理这些连接,但是图形 MIDI 音色库 更易于使用。它可以立即建立连接并清楚地显示所有 MIDI 连接的状态。

本系列中的一些屏幕截图已经展示了 Rui Nunez Capela 的 QJackCtl 中的 MIDI 连接面板,QJackCtl 是一个用于连接 JACK 音频服务器和 ALSA MIDI 音序器客户端的多功能 GUI。用于连接 ALSA 音序器客户端的其他图形界面包括 Bob Hamm 的 ALSA 音色库(图 10)、Matthias Nagorni 的 KAconnect(图 11)和 Maarten De Boer 的 aconnectgui(图 12)。

Linux MIDI: A Brief Survey, Part 3

图 10. ALSA 音色库

Linux MIDI: A Brief Survey, Part 3

图 11. KAconnect

Linux MIDI: A Brief Survey, Part 3

图 12. AconnectGUI

GMidiMon

在某些时候,几乎每个认真的 MIDI 音乐家都需要监视 MIDI 数据流,可能是为了诊断故障设备或在播放期间检查 MIDI 音序的内容。Samuel Dufour-Kowalski 的 GMidiMon 正是完成这项工作的工具,它提供了一个简单的 GTK 界面,用于以人类可读的形式显示 MIDI 消息(图 13)。唉,目前 GMidiMon 不支持 sysex 消息,但该程序在显示任何其他 MIDI 消息类型时效果很好。

Linux MIDI: A Brief Survey, Part 3

图 13. GMidiMon

总结

这就是本月 MIDI 调查的全部内容。请在下个月继续关注,届时我将介绍一些有趣的 MIDI 编程语言和实验性 MIDI 作曲环境。在那之前,我相信您可以从本文中找到一些东西来消磨时间。或者,访问 linux-sound.org 以查看那里列出的一些 Linux 音频和 MIDI 软件。

Dave Phillips 是一位音乐家、教师和作家,居住在俄亥俄州芬德利。自 1995 年首次接触 Linux 以来,他一直是 Linux 音频社区的活跃成员。他是 The Book of Linux Music & Sound 以及 Linux Journal 中众多文章的作者。

加载 Disqus 评论