Studio Dave 的超级碰撞:SuperCollider3 的新世界,第 1 部分
SuperCollider3
SuperCollider 是作曲家/程序员 James McCartney 献给开源音频合成/作曲环境世界的礼物。在其当前的形态中,SuperCollider3 包含多种声音合成和信号处理方法的功能,用于设计交互式表演界面的跨平台集成 GUI 组件,支持通过各种外部设备进行远程控制,以及一套丰富的算法音乐和声音作曲工具。是的,还有更多,更多。
这篇分为 3 部分的文章结合了 SuperCollider 3.5 的预览和对 《The SuperCollider Book》的评测,《The SuperCollider Book》是 MIT 出版社最新的音频相关著作。我将介绍该系统及其一些组件,包括示例代码和屏幕截图(我喜欢屏幕截图),然后我将担任您的导游,带您了解一些有趣的 SuperCollider 项目和网站。最后,我将总结我对 SuperCollider 的印象,并随后评测《The SuperCollider Book》。
背景知识
1996 年,SuperCollider 以闭源商业程序发布,仅适用于 Macintosh 计算机。2002 年,源代码根据 GPL 协议向公众发布。此后,开发一直稳定且令人印象深刻,该系统现在可在 Linux、Mac OSX 和 Windows 上使用,并具有高度的跨平台兼容性。
SuperCollider 被设计为客户端/服务器架构,在其音频处理部分 (scsynth) 和用于控制这些部分的语言 (sclang) 之间有清晰的划分。在典型的应用中,合成器在单独的进程中启动,然后用户在配置为与 SuperCollider 一起运行的文本编辑器(例如 Emacs、Gedit、vi/vim)中编写代码。编辑器配置通常包括用于控制服务器状态和将代码发送到合成器进行渲染的机制,通常作为实时进程。
SuperCollider 功能的完整列表将超出本文的范围。合成原语通过各种振荡器、滤波器、效果器和控制机制(包络、门、触发器)得到很好的体现。SuperCollider 从 MusicN 语言中借鉴了单元发生器概念——即音频处理“黑匣子”。用户组合单元发生器,将其自身的合成和处理图表滚动到 SuperCollider 所谓的 SynthDef 中。许多预定义的 SynthDef 可用,并且很容易创建自己的。
控制语言包括大量用于控制 scsynth 输出的组件。SuperCollider 对即兴演奏者和其他基于实时的艺术家具有很大的吸引力,这可能是因为它拥有丰富的调度工具、流程控制和计时器(时钟)。一些表演者使用 SuperCollider 的内置图形功能来设计特定于其项目的 GUI,其中 UI 是艺术家选择的进程的主要控制面板。其他人则完全跳过 GUI。我将更多地谈论 SuperCollider 的界面可能性,但现在让我们继续讨论安装系统的细节。
安装和配置
安装 SuperCollider3 最简单的方法是通过您发行版的包管理器。如果这种简单易行的方法失败,您将需要访问 SourceForge 上 SuperCollider 网站的 下载页面。如果您的发行版没有预打包版本,您可以下载当前版本的源代码 tarball。将 tarball 解压缩到您的 ~/src 目录中,并按照说明构建和安装程序。
如果您只想试用 SuperCollider,您可以下载 Puredyne,这是一个带有“live”模式的 Linux 发行版(即您无需安装即可运行它),针对媒体性能进行了优化。Puredyne 在其应用程序堆栈中包含 SuperCollider,以及其他优秀的 Linux 音频软件,如果您选择使其成为硬盘上的永久居民,所有这些都可以与系统一起安装。
顺便说一句,从 3.4 版本开始,SuperCollider 可以为 64 位系统构建。以前的版本仅限于 32 位环境或原生 64 位构建中的 32 位 chroot。如果这个限制阻止您接触 SuperCollider,请不要再等待了。
如果您喜欢测试最新版本,您可以构建 SourceForge 存储库源代码。获取 Git 软件,然后打开终端窗口,移动到您的 $HOME/src 目录,并发出此命令
git clone --recursive git://supercollider.git.sourceforge.net/gitroot/supercollider/supercollider
下载代码后,进入您新创建的 ~/src/supercollider 目录,并阅读 ~/src/supercollider/platforms/ 中的 README LINUX 文件,以获取有关安装和配置 SuperCollider 的最新说明。现在在终端提示符下(在 ~/src/supercollider 中)发出这些神秘的咒语
mkdir build
cd build
cmake ..
make
sudo make install
这就是构建和安装您自己的 SuperCollider3 所需的全部内容。您可能需要安装标准插件集 (sc3-plugins) 和一些 Quarks。我将更多地谈论这些附加组件,但现在让我们继续我们的安装说明。
如果您想了解 SuperCollider 的开发轨迹,您会欣赏 Git 更新过程的简单性。打开终端窗口,进入您的 ~/src/supercollider 目录并运行这些命令
git pull
git submodule update
第二个命令对于构建 supernova 尤其重要,supernova 是 Tim Blechmann 为 venerable scsynth 提供的多核替代品。Supernova 默认使用 Git 源代码构建和安装,并且在不久的将来,supernova 很可能会取代 scsynth。但是,在我的研究时,典型的安装仍然将 scsynth 部署为其默认服务器。
SuperCollider 世界的开发速度很快,所以我几乎每天都更新。Git 源代码通常是稳定的,但异常情况可能会发生。如果您需要性能最可靠的版本,您应该使用官方 tarball 或打包的二进制文件。如果您想知道 SuperCollider 的发展方向 - 并且假设您没有进行关键工作 - 那么您将需要构建 Git 源代码。
顺便说一句,本文中代码的测试平台是 Ubuntu 10.04,在 Hewlett-Packard G60 双核笔记本电脑和围绕 AMD 3800+ CPU 构建的台式机上以 32 位模式运行。音频硬件包括笔记本电脑的内置声卡 - 无处不在的 Intel HDA 芯片组 - 以及连接到台式机的 M-Audio Delta 66。两台机器都运行相同的内核(2.6.31 修补以实现实时操作)、相同的 ALSA 系统 (1.0.20) 和相同版本的 JACK1 (0.120.1)。
运行 SuperCollider3
正如我之前所说,SuperCollider 被设计为客户端/服务器系统,因此您需要先启动 scsynth 音频服务器,然后任何客户端才能访问其服务。基本调用如下所示
scsynth -u 57110
此命令使用 UDP 地址 57110 启动服务器。需要该地址来为与 sclang(SuperCollider 语言前端)的 OSC 通信提供端口。您可以通过 ~/.sclang.cf 自动化您的服务器配置和其他启动详细信息,这是一个用于使用您指定的默认值启动 SuperCollider 的小型配置文件。以下是 Studio Dave 的配置
// Where's the server ?
Server.program = "/usr/local/bin/scsynth";
// Set up server for available audio I/O channels.
#[\internal, \local].do { |s|
s = Server.perform(s);
s.options.numInputBusChannels = 2;
s.options.numOutputBusChannels = 2;
};
// Connect JACK ports to audio channels.
"SC_JACK_DEFAULT_INPUTS".setenv(
"system:capture_1,"
"system:capture_2"
);
"SC_JACK_DEFAULT_OUTPUTS".setenv(
"system:playback_1,"
"system:playback_2"
);
// Where's the SwingOSC GUI server ?
SwingOSC.program = "/home/dlphilp/jars/SwingOSC.jar";
如您所见,此文件允许您确定连接到 JACK 的一些选项。该示例仅限于我的笔记本电脑的简单 2 声道功能,但它可以扩展以适应您的硬件支持的连接数量。
配置文件实际上并没有启动服务器。您可以如上所示从终端提示符手动启动它,也可以从配置为与 SuperCollider 一起工作的文本编辑器启动它。SuperCollider 可以从命令行操作,但它通常在配置为提供对系统及其资源的访问权限的文本编辑器中启动和操作。编辑器还将提供用于突出显示和评估(即运行)您的代码、启动和停止音频和图形服务器、访问帮助文档等便利功能。
Sclang,SuperCollider 的控制语言,基于 Smalltalk,一种面向对象的编程语言。初学者应该不会发现理解 SuperCollider 的语义和编码语法有任何特殊困难;但是,如果您来自 Csound 或 Pd 等环境,您可能会发现您可能需要一些面向对象方法的基础知识。唉,本文很难详细描述面向对象编程,因此我将读者重定向到 Wikipedia 上关于该主题的页面。
当您在正确配置的编辑器中编写 SuperCollider 程序时,您将使用 sclang 的语言元素。正如我所说,可以从命令行编写 SuperCollider 程序,但对于初学者来说,使用带有编辑器的 sclang 肯定会更容易。在本文的后面,我们将看一些示例代码,所有代码都在我选择的文本编辑器中编写和执行。
顺便说一句,sclang 不是 scsynth 音频服务器的唯一客户端语言。服务器基本上是对正确配置的 OSC 消息的响应者,并且已经为 Haskell 和 Scheme 编程语言创建了替代客户端。这些客户端完全绕过 sclang,用客户端的语法和语言元素替换其语法和语言元素。
我们必须继续前进,但当然 scysnth/sclang 比我在这里介绍的要多得多。Wikipedia 上关于 SuperCollider 的页面 对 scsynth 和 sclang 进行了很好的简洁描述,因此我不会重复这些材料,而是将读者引导到该页面以获取有关 SuperCollider 客户端/服务器模型的更多详细信息。
配置编辑器,Ubuntu 风格
以下说明仅适用于在 Ubuntu 系统上运行的 Gedit 文本编辑器。Emacs 和 vi/vim 用户应以类似的方式配置其编辑器。有关配置您喜欢的编辑器的说明,请参阅 SuperCollider 网站。
要配置 Gedit 以支持 SuperCollider,请启动编辑器,打开“编辑/首选项”对话框,然后选择“插件”选项卡。您应该找到一个名为 Sced 的插件,即 SuperCollider 编辑器。激活它,关闭对话框,您应该在 Gedit 的“工具”菜单中找到“SuperCollider 模式”项。
顺便说一句,如果您是从源代码构建的,并且在安装 SuperCollider 后没有找到 Sced 插件,只需逐步执行以下复制例程来准备 Gedit
cp ~/src/supercollider/editors/sced/sced/ ~/.gnome2/gedit/plugins/sced/
cp ~/src/supercollider/editors/sced/data/sced.gedit-plugin ~/.gnome2/gedit/plugins/sced.gedit-plugin
重新启动 Gedit,插件应该可以按照上述方式安装。
您几乎可以开始了。如果您想要基于 Java 的 Swing GUI 组件,您仍然需要安装 SwingOSC 包,并且您最终会想要 sc3-plugins 和一些 SuperCollider quarks(即通常包括带有示例、帮助和其他支持文件的类代码的专用包)。有关这些下载的最新信息,请参阅 SuperCollider SourceForge 网站。
顺便说一句,您只需要 SwingOSC 包中的一个文件,该文件位于 /path/to/SwingOSC/build/SwingOSC.jar。将此 jar 文件复制到永久位置,然后在您的 ~/.sclang.cf 文件中指定该位置
// Prepare SwingOSC
SwingOSC.program = "/home/dlphilp/jars/SwingOSC.jar";
我使用 Gedit 的 SuperCollider 菜单选项来操作 SwingOSC 服务器并启动一个面板来控制 scsynth,SuperCollider 的音频服务器。
好的,让我们花一点时间回顾一下。系统已安装,您的 .sclang.cf 文件已得到适当的自定义,您最喜欢的文本编辑器已准备就绪 - 我想说现在是运行一些代码的时候了。
超级简单
如果您从未见过或听过 SuperCollider 的代码,我准备了一个包含一些基本操作的示例,包括添加 GUI。我在 Gedit 的上下文中描述了这个过程,但未经修改的代码应该可以在 Emacs 或 vi/vim 中运行。
所以,我打开 Gedit,激活它的 SuperCollider 模式,并从 SuperCollider 菜单启动服务器。我打开一个新文档,将其高亮模式设置为 SuperCollider 语言,并将以下代码输入到其中
a = {SinOsc.ar(440)}.play;
在 = 符号的右侧,此行表示正弦波振荡器的调用,其中有一些值要传递给它,在本例中是一个频率值。.ar 扩展名让 SuperCollider 知道输出是音频速率信号,而 .play 命令扩展名告诉系统将正弦波实时渲染到音频输出。整个过程通过 = 符号分配给名为 a 的变量。
顺便说一句,SuperCollider 代码是从左到右读取和评估的。正常的数学优先级不适用,因此如果您的代码包含如下行
n = 5 + 4 * 3
答案将是 27,而不是 17。对于后一种结果,需要重写代码以强制优先级
n = 5 + (4 * 3)
让我们回到我们的示例。我可以使用 Gedit 的 SuperCollider 菜单中的“停止声音”项来关闭音频输出,但我将添加以下行作为代码中的便捷关闭开关
a.free;
要评估第一行,我选择文本,然后按 Ctrl-E 或从 Gedit 的 SuperCollider 菜单中选择“评估”项。如果评估成功,我将听到频率为 440 赫兹的正弦波。我以相同的方式评估下一行以关闭声音,然后,万岁,我正在走向 SuperCollider 大师之路。图 1 展示了 Gedit 中的这个小会话。
图 1. Gedit 中的 SuperCollider3 (全尺寸)
如果评估不成功,SuperCollider 日志窗口将打印一条错误消息,该消息应指示问题的来源。SuperCollider 的错误报告通常很详细,对于新手来说完全令人困惑,因此您需要花一些时间学习如何阅读它们。文档包含有关故障排除的材料,大多数问题可以通过仔细调查报告来解决。
结尾,第 1 部分
离别是令人悲伤的,但我会在一周左右回来继续这个系列。我希望您能在现在到那时之间花一些时间研究 SuperCollider3,甚至可以查看这里的示例和系统文档。在下一部分中,我们将研究它的 GUI 功能、MIDI 可能性,甚至简要了解它作为算法作曲环境的能力。很酷的东西,不要错过。