声音前沿:OpenMusic 和 SuperCollider3

作者:Dave Phillips

即使是随意浏览一下 linux-sound.org 的页面内容,也会发现 Linux 拥有广泛而有趣的音频和音乐应用程序。播放器、录音机和编辑器比比皆是,我计划在本专栏中介绍一些这类软件。本月,我将介绍两个非常接近 Linux 音频软件开发前沿的应用程序:IRCAM 的 OpenMusic 和 James McCartney 的 SuperCollider3。

OpenMusic

Linux 版 OpenMusic (OM) 是一个移植项目,旨在将出色的音乐创作环境从 Macintosh 引入 Linux。正如您可能从 Mac 音乐应用程序中预期的那样,OM 是一个高度图形化的环境,IRCAM(又名巴黎声学/音乐研究与协调研究所)的开发人员在 Linux 版本上做了令人印象深刻的工作(图 1)。

图 1. OpenMusic

其网站告诉我们,OM 是一种基于 CommonLisp/CLOS 的可视化编程语言,它以图标为导向,具有拖放式 GUI,并且具有用于与环境的 Lisp 结构交互的可视化控制结构。OM 被设计为通用编程语言,但其独特的类和函数库显然面向音乐创作领域。

非音乐家可能会想知道 OM 究竟能为作曲家做些什么。OM 不是软件合成器,也不是声音文件编辑器或 MIDI 音序器。OM 的类和函数提供了探索音乐可能性的手段,例如音高、节奏和力度集合的操纵和排列,序列和音列变奏,随机和偶然的生成过程,以及许多其他最好由机器执行的技术。在某些方面,OM 类似于 Rick Taube 出色的 Common Music,另一个基于 Lisp 的音乐创作环境,但 OM 丰富的 GUI 提供了非常不同的体验。

Basic OM

本文并非旨在成为 OM 教程。我只是打算描述其基本操作并展示其一些界面便利性。我必须强调,尽管 OM 本身不是一个新程序(Linux 移植版是 4.7.1 版本),但它对于 Linux 来说是新的,应被视为 beta 阶段的软件。并非原始版本的每个方面都得到了忠实的移植,但我很高兴地说,Mac 版本中的大多数功能都已移植到 Linux 版本。

您可以从 IRCAM URL 获取 OM,但我强烈建议使用 Planet CCRMA 包。OM 需要您系统中可能没有的一些额外组件,包括

  • CMUCL,卡内基梅隆大学的 Common Lisp 版本

  • libgtk-canvas,GTK 1.2 的画布对象

  • CLG,Common Lisp/GTK 绑定

  • MIDIShare,GRAME 团队的 MIDI 工具包

  • fluidsynth,基于声卡的合成器

可能需要这些依赖项的特定版本,因此请查看 OM 网站以获取最新要求列表。该网站还包括 IRCAM 开发人员 Francois Dechelle 提供的详细安装和配置说明。但是,我重申,您最好使用 Planet CCRMA 包。AGNULA Linux 音频发行版的 DEB 包应该很快就会发布。

一旦所有内容都已安装并正确配置,您可以使用以下一系列命令启动 OM 会话

	fluidsynth -a alsa -m midishare soundfonts/8mbgmsfx.sf2
	msconnect
	omlinux

我建议从各自的 xterm 中打开每个程序。这样做可以更轻松地跟踪来自特定应用程序的任何报告或错误消息。

在我的 800MHz 机器上,OM 需要一段时间才能打开。Lisp 是一种解释型语言,因此需要一段时间才能准备好一切。当系统准备好使用时,GTK 画布对象会出现,您就可以开始使用 OM 了。

OM 与其 IRCAM 合成兄弟 jMax 类似,都使用图标来表示其各种类和库。这些图标放置在画布上并连接在一起以创建补丁。OM 补丁可以是音符生成器、MIDI 事件处理器,甚至是简单的播放设备。OM 的图标包括用于算术、列表操作、随机数生成、各种 MIDI 操作、程序控制和许多其他功能的类和函数。支持抽象(即补丁内的补丁),并且可以保存补丁以在其他项目中重用。

图 1 展示了 Karim Haddad 的一系列有用的教程中相对复杂的 OM 补丁。在这个补丁(教程 14)中,我们可以看到 OM 的许多主要功能在工作。各种图标已连接以形成 MIDI 音符生成器,该生成器将其输出定向到通过 fluidsynth 合成器在两个 MIDI 通道上播放的一对通用 MIDI 程序。补丁底部的蓝色-绿色大对象是名为 CHORD-SEQ 的 music/score 类的实例。以真正的 Lisp 风格,一旦补丁构建完成,必须先对其进行评估,然后才能播放,方法是选择它然后在 QWERTY 键盘上键入 v。键入 p 听取结果,键入 s 停止播放。重新评估对象会生成新的音符序列。

该示例还演示了 OM 的抽象功能。omloop 和音符生成器图标都是子补丁,我在图 1 中打开了它们以进行检查。我将再次跳过子补丁构建的细节,但我应该注意,子补丁的构建方式与我描述的补丁的构建方式相同。

更高层次的 OM

构建补丁很有趣,但 OM 包含更高层次的组织,称为 maquette(法语,模型或草图)。最简单地说,maquette 是用于布局补丁序列的网格。然后,maquette 被评估和播放,就像它是一个单独的补丁一样。但是,maquette 能够在其补丁之间建立自己的连接,从而在各个补丁之间提供另一层处理。图 2 说明了 OM maquette 的基本示例。尽管显示了四个块,但仅使用了两个补丁,每个补丁都复制并粘贴以进行重复。双击一个块会打开其结构以进行进一步的调查和编辑。

图 2. OM Maquette

OM 的未来

Linux 版 OM 值得注意的未完成方面包括乐谱记谱、maquette 图形和特定于 Linux 的文档。然而,该移植版非常可用,我一直很享受我的教程之旅。OM 开发人员反应迅速且乐于助人,我期待着对这个最独特的系统进行更多实验。

SuperCollider3

James McCartney 的 SuperCollider3 (SC3) 是一种流行的声音合成和音乐创作环境,以前仅适用于 Macintosh,但现在已在 Linux 移植版中提供。原始程序再次大量使用 Mac 的图形丰富的界面,但实际的 SC3 引擎可以与其 GUI 分离并自行移植。这就是 SC3 的 Linux 移植版的当前状况:其合成引擎及其语言界面已成功移植到 Linux,但其 GUI 组件仍在等待从 Mac 转移到 Linux。

SC3 目前是 SuperCollider 唯一正式维护的版本,此简介仅是对初步阶段环境的考察。然而,即使在纯文本模式界面中,SC3 也是有趣且有用的。

Collision 配置

SC3 现在是一个 SourceForge 项目,因此您需要从其 SF 站点获取源代码,按照其中找到的说明进行操作,并检索最新的 CVS 源代码。SC3 确实在开发中,因此我建议构建和使用最新的 CVS 源代码,以保持与最新功能同步。

编译和安装说明位于 SuperCollider3/linux 目录中,其中的 README 文件说明了如何在 Linux 上编译 SC3。这很容易,但请务必完全按照说明进行操作。在编译 SC3 之前,您必须满足许多依赖项,包括 ALSA、JACK、libsndfile 等。查看 README 以获取有关所需软件包的最新消息。

配置 SC3

Linux 版 SC3 分为两个部分。scsynth 二进制文件是合成引擎和服务器,而 sclang 程序是用于编写、编辑和执行 SC3 代码的语言界面。

在对 SC3 进行任何其他操作之前,您应该为 sclang 界面做一些额外的设置。首先,将 linux/examples 目录中的 sclang.cfg 和 sclang.sc 文件复制到您的主目录。将它们重命名为 .sclang.cfg 和 .sclang.sc,然后在文本编辑器中编辑每个文件。它们应该在没有任何编辑的情况下即可使用,但无论如何都要打开并研究它们——了解它们在环境中的功能是很好的。有关设置和配置的更多详细信息,请参阅 SC3 文档。我还建议感兴趣的读者访问 Stefan Kersten 的 SC3 站点,以获取有关特定于 Linux 功能的更多详细信息。

配置 SC3 需要一些不寻常的步骤,包括向您的 ~/.bashrc 文件添加内容,为 sclang 模式准备 Emacs,以及编写 shell 脚本以轻松启动合成服务器。所有这些步骤都在程序文档或 Stefan 的站点中详细说明。

基本 Collision

要开始使用 SC3,请确保 JACK 音频服务器正在运行,然后启动 scsynth 服务器。

从您的主目录运行 sc3start.sh shell 脚本。您应该看到类似于以下消息的内容

	[dlphilp@localhost dlphilp]$ ./sc3start.sh 
	rm: cannot remove `synthdefs': Is a directory
	SC_JackDriver: jack name is SuperCollider
	SC_JackDriver: connected  alsa_pcm:capture_1 to SuperCollider:in_1
	SC_JackDriver: connected  alsa_pcm:capture_2 to SuperCollider:in_2
	SC_JackDriver: connected  SuperCollider:out_1 to alsa_pcm:playback_1
	SC_JackDriver: connected  SuperCollider:out_2 to alsa_pcm:playback_2
	SuperCollider 3 server ready..

现在我们将在 Emacs 文本编辑器中测试一些 SC3 代码。使用以下命令启动编辑器emacs -sclang,Emacs 像往常一样打开。但是,当您将 SC3 代码写入或加载到其缓冲区之一时,会出现一个新菜单,其中包含各种 sclang 项目。可以在没有 Emacs 的情况下使用 SC3,但我认为那是一种令人沮丧的练习。作为一名狂热的 vi 用户,我对学习如何使用 Emacs 并不热衷,但在使用 SC3 时,我绝对是一个皈依者。与 OM 一样,您在 Emacs 中编写 SC3 代码,然后选择并评估它。如果评估良好,您可以直接从 Emacs 播放代码块。因此,Emacs 可以用作 SC3 的相当完整的工作环境(当然,没有酷炫的 Mac 图形)。

以下代码是音频软件中等同于“Hello world!”的代码,它创建并播放一个 300Hz 的简单正弦波

	s = Server.local;
	s.freeAll;
	SynthDef("sine-out", {
		Out.ar(0, SinOsc.ar(300,0,0.1))
	}).play(s);

保存此文件后,您应该注意到 Emacs 会话的两个新方面。SC3 代码现在以彩色突出显示,并且顶部菜单栏中出现了一个新的 SCLang 菜单(图 3)。

图 3. SuperCollider (SClang) 模式下的 Emacs

现在将光标放在此行

	s = Server.local

然后打开 SCLang 菜单并选择“Evaluate Line”(评估行)。这将打开并验证 sclang 和 scsynth 服务器之间的连接。您应该看到 SCLang 的 Emacs 缓冲区响应此简短报告

	a Server

现在,突出显示代码中从 SynthDef 到 play(s); 的所有内容。再次打开 SCLang 菜单并选择“Evaluate Region”(评估区域)。SCLang 缓冲区再次发出简短报告

	Synth("sine-out" : 1004)

您现在应该听到一个频率为 300Hz 的正弦波在播放。将光标放在此行

	s.freeAll

评估它以停止音频。顺便说一句,记住一些 Emacs 键盘快捷键,例如 C-c C-c 用于评估行或区域,可以减少很多鼠标移动。

更大的 Collision

让我们看看如何制作一些更具音乐性的东西。这次我将循环我的简单正弦乐器,并在循环的每次迭代中增加其频率。我首先用循环结构包围乐器,并为每个发出的音符添加一个持续时间值。此代码说明了这些程序,这些程序被包装在 SC3 称为 Task 的内容中

	s = Server.local;

	Task({ 
		var freqArray, dur; 
		freqArray = [262, 262, 294, 311, 392, 392, 370, 392];
		dur = 0.1;
		4.do {
		8.do { arg i;
			{SinOsc.ar( freqArray[i], 0, 0.2) * Line.kr(1, 0, dur, doneAction: 2)}.play;
			dur.wait;
		}}
	}).play 

此 Task 还演示了嵌套循环。内部循环按顺序读取 freqArray 中的八个音符,并在每次重复时将数组指针 (i) 递增 1。然后,此内部循环本身由外部循环播放四次。与前面的示例一样,我评估服务器,然后评估 Task 块以听到我简单的重复模式。do 循环的终止表示任务的结束,因此无需显式调用来释放服务器。

可以从 Emacs 访问 SC3 的帮助系统。突出显示您需要帮助的项目,然后从 SCLang 菜单中选择“Find Help”(查找帮助)。emacs 迷你缓冲区会询问帮助主题。默认主题是您的选择,因此按 Enter,一个新的 Emacs 窗口将出现,其中包含您所选项目的帮助文件。SC3 帮助文件包含有用的示例代码,因此请学习该系统并使用它。

图 4. Emacs 中的 SC3 帮助

SC3 也支持 MIDI。它将自身标识为 ALSA 音序器客户端,从而为其提供灵活的路由功能。以下代码采用稍微复杂版本的简单正弦乐器,并将其交给 MIDI 控制

	MIDIIn.connect;
	s = Server.local;
	s.boot;	
	s.latency = 0;

	SynthDef("midi-sine", { arg freq=440;
		var x;
		x = SinOsc.ar(freq,0,0.1, SinOsc.ar(freq+1, 0, 0.1));
		Out.ar(0,x); 
	}).send(s);

	x = Synth("midi-sine");
	MIDIIn.noteOn = {arg src, chan, num, vel;
			x.set(\freq, num.midicps);
			};

	s.freeAll;

通过逐块评估此代码块后,我可以使用外部 MIDI 键盘演奏合成器。由于输入是 MIDI 音符开启消息,因此事件持续时间可能没有值。因此,我必须评估最后一行 (s.freeAll;) 以关闭最后一个发声的音符。

离开 SC3

Linux 版 SC3 仍处于早期阶段,但它已经处于可用于创意工作的状态。活跃的开发和用户社区促进了语言在技术和音乐方面的进步。SC3 绝对值得学习,我甚至冒险预测它将发展成为进入 Linux 软件声音合成世界的最佳理由之一。

最终说明

OpenMusic 和 SuperCollider3 只是许多令人兴奋的正在开发的 Linux 音频项目中的两个。唉,这些简介提供的只是对其系统功能的惊鸿一瞥,我希望我鼓励了一些读者进行进一步的调查。随着 OM 和 SC3 等应用程序的可用,我更加确信 Linux 音频软件的未来确实看起来和听起来都不错。

Dave Phillips (dlphilp@bright.net) 是一位音乐家、教师和作家,居住在俄亥俄州芬德利。自 1995 年首次接触 Linux 以来,他一直是 Linux 音频社区的活跃成员。他是Linux 音乐与声音之书的作者,以及Linux Journal中的众多文章。

加载 Disqus 评论