Super Collision At Studio Dave: SuperCollider3 新世界,第 3 部分

作者:Dave Phillips

高级应用

本系列前几部分中的示例对于具有 Csound 或类似 MusicN 衍生语言背景的人来说应该相当容易理解。它们演示了 SuperCollider 语言元素的一些基本原则,但它们遗漏了该环境最有趣的大部分内容。事实上,SuperCollider 对 MusicN 遗产的借鉴相对较少,其设计考虑因素的排序也不同。从一开始,SuperCollider 就偏爱交互环境中的实时操作。在服务器端,该设计培养了高性能的音频合成/处理引擎。在客户端,控制语言开发了许多在其他计算机音乐系统中未明确定义或不存在的元素。本文无法进行深入介绍,但我们可以瞥见 SuperCollider 的一些更高级的功能。

关于 Tasks、Routines、Patterns 和 Streams

我们在 synth-plus-GUI 的美化示例中已经遇到过 Task。Tasks 和 Routines 是密切相关的机制,在 SuperCollider 代码中经常一起工作。Routine 是具有停止/恢复功能的函数,而 Task 是具有类似特征的进程,即它是一个可暂停的进程。我们在第 2 部分中的合成器 GUI 示例展示了 Routine 和 Task 的典型组合,SuperCollider 文档中包含许多其他示例。

Routines 也与 Patterns 密切相关。音乐家习惯了“pattern”这个术语,但它在 SuperCollider 中意味着独特的东西,其中 Pattern 是

“...一个响应 asStream 和 embedInStream 的对象。Pattern 定义 Stream 的行为,并响应 asStream 消息创建此类 stream。Pattern 和 Stream 之间的区别类似于乐谱和乐谱演奏之间的区别,或者类和该类的实例之间的区别。所有对象都响应此接口,大多数对象通过返回自身来响应。因此,大多数对象都是 pattern,它们定义的 stream 是对象的无限序列,并嵌入为对象的一次返回的单例 stream。”

对于典型的音乐家来说,这个解释可能和泥浆一样不清不楚。不要害怕,SuperCollider 文档和其他地方有很多说明性示例,但在我们展示一个示例之前,让我们了解一下 SuperCollider-speak 中的 Stream 是什么。文档对它的描述是

“Stream 是一个响应 next、reset 和 embedInStream 的对象。Stream 表示值的序列,这些值通过消息 next 一次获得一个。reset 消息将导致 stream 重新启动(许多但并非所有 stream 实际上都会重复自身)。如果 stream 用完了值,它将返回 nil 以响应 next。embedInStream 消息允许 stream 定义允许另一个 stream “接管” stream 的控制权。所有对象都响应 next 和 reset,大多数对象通过返回自身来响应 next。因此,数字 7 定义了一个 Stream,它产生一个无限的 7 序列。大多数对象都使用单例 Stream 响应 embedInStream,该单例 Stream 返回对象一次。”

在文档的另一部分,我们了解到 Stream 是“一个不直接调用的抽象类”。好的,现在所有这些都解释清楚了,我们需要解释这些解释。换句话说,我们需要一些示例来阐明这种业务。幸运的是,SC 文档中有很多有用的示例,所以让我们看一个

    // 这里 Pbind 将 Prand pattern 折叠成默认合成器可播放的 stream。
    Pbind(\freq, Prand([300, 500, 231.2, 399.2], inf), \dur, 0.1).play;

您可能已经弄清楚了,以 P 开头的类是基本 Pattern 模型的变体(扩展)。因此,我们有 Pseq、Pbind、Prand、Pfunc 和许多其他 Pattern 类型,所有类型在文档中都有详细描述。上面的简单代码演示了 Pattern 的一些功能 - 在评估时,默认合成器以随机顺序播放无限重复的音调序列,频率在 Prand 数组中指定,持续时间由 (\dur, 0.1) 对指定。稍加思考就能看到 Pattern 类的潜力,稍微研究一下它的文档,就能为各种有趣的作曲和操作设备打开大门。

Pattern 可以被视为事件的集合 - 音高、声音文件、图像 - 它被转换为 Stream。一个音乐示例将创建一个持续时间值或音高的 Stream,该 Stream 被馈送到合成器或其他处理器。一个 Pattern 可以包含其他 Pattern 在自身内部,Pattern 可以被实时替换为其他 Pattern,或者可以同步或异步播放多个 pattern,如下例所示

    (
      // 为 Pbinds 声明两个变量。
    var a, b;
      // 使用定义的音高和持续时间值创建两个 pattern stream。
    a = Pbind(\freq, Pseq([470, 440, 400], 4), \dur, Pseq([1, 0.5, 1.5], inf));
    b = Pbind(\freq, Pseq([200, 220, 240], 4), \dur, 1);
      // 并行执行 stream。
    Ppar([a, b]).play;
    )

Pseq 数组中的音高在这里表示为赫兹频率,这是 SC 中音高类的许多可能表示形式之一。freq/Pseq 对之后的“4”表示序列将重复的次数。

想要了解有关 Patterns 和 Streams 的更多信息的新用户应该阅读名为 Understanding Streams, Patterns, And Events 的在线帮助教程。您可能会发现文档的文本解释有些令人困惑,在这种情况下,您必须确保运行示例。我发现,通过浏览优秀的示例(SuperCollider 文档包含一些很棒的演示),我的困惑通常会消除 - 这些示例阐明了类或对象在音乐上下文中实际的作用。

音响效果

对我来说,系统的证明体现在其逻辑的可能性和音频输出的质量上。我才刚刚开始探索 SuperCollider 作为算法作曲系统的可能性,所以我必须等到我的研究取得令人满意的结果后,才能对该系统在该领域的优势发表意见。[注 8/31:毫无疑问,该系统非常适合我的目的。] 然而,关于 SuperCollider 的音频质量,毫无疑问:我的耳朵印象深刻。主观上,我将 SuperCollider 的音频输出与我在 Csound 音频质量方面的经验和满意度进行比较,到目前为止我听到的声音在比较中根本没有逊色。我已经提到过文档中许多优秀示例的质量,以下链接指向作曲家使用 SuperCollider 的音乐和声音作品的网站

  Soundcloud 上的 SuperCollider Group
  Josh Parmenter 的近期和精选作品
  Andrea Valle 的器乐作品和乐谱
  James Harkins 的 SuperCollider 作品
  Internet Archive 上的 SuperCollider
  YouTube 上的 SuperCollider3
  Vimeo 上的 SuperCollider Groups
  Rick T 的 YouTube 教程(强烈推荐给新用户)

我相信 SuperCollider - 像任何其他音乐/声音编程环境一样 - 最终最好通过其用户创作的作品来宣传。给定的链接是我在网络上找到的一小部分,但它们清楚地表明 SuperCollider 能够处理任何风格或形式的音乐表达,从严格确定性和非实时的所有方式到最不受约束的实时即兴创作。

Super Softs:SuperCollider 的朋友

在本文前面,我提到 SuperCollider 没有通用的前端,不像 QuteCsound 是 Csound 的前端那样。然而,SuperCollider 享有某些独特的软件助手的陪伴。

SuperCollider 可以捕获和处理各种格式的输入数据,包括 MIDI 和 OSC。该系统的 MIDI 支持非常出色,将系统连接到您的 MIDI 硬件和喜欢的软件应该没有特别的困难。如果 OSC 是您首选的协议,您至少可以考虑三个 OSC 音序器。在之前关于 OSC 的文章中,我已经报道了一些关于 IanniX、CM/Grace 和 AlgoScore 的新闻。自那时以来,前两个程序已经看到了重大升级,AlgoScore 的作者打算用更精通 SuperCollider 的东西来取代该软件。
 

图 1. IanniX (全尺寸)

IanniX 是一款具有独特用户界面(图 1)的 OSC 消息音序器。它是连接到 SuperCollider 的完美候选者,最新版本比我上次评测的版本有了很大的进步。新版本包含一些有趣的示例文件,用于设置 SuperCollider 以通过 IanniX 进行控制(反之亦然)。Rick Taube 的 CM/Grace 系统的最新版本包含一些 Scheme 示例,用于将 Common Music 的强大功能与 SuperColllider 的强大功能联系起来。Grace 是一个用于作曲的环境 - 它不是一个音频合成系统,它的输出能力依赖于外部系统,例如 Common Lisp MusicCsound,以及现在的 SuperCollider。Jonatan Liljedahl 的 AlgoScore 已不再维护,但其最后一个版本完全能够将 OSC 和/或 MIDI 消息排序到 SuperCollider(有关更多信息,请参阅我关于 AlgoScore 的文章)。Jonatan 现在积极参与 SuperCollider 开发,他表示可能会出现 AlgoScore2,当然,特别关注它与 SuperCollider 的关系。
 

FScape and Eisenkraut

图 2. FScape 和 Eisenkraut (全尺寸)

Hanns Holger Rutz 是 SuperCollider、Pd 和 Csound 的杰出作曲家和开发者。在他的贡献中,我们发现了 SwingOSC 图形服务器、FScape 音频处理模块和 Eisenkraut,这是一款需要 SuperCollider 作为其音频处理引擎的声音文件编辑器。FScape 和 Eisenkraut 都响应来自 SuperCollider 的控制消息(见图 2),允许用户从 SuperCollider 内部运行 FScape 处理模块,向 Eisenkraut 的 GUI 添加新的菜单项,对声音文件应用外部 DSP 例程,并通过 SuperCollider 的强大功能执行其他操作。

Meloncillo

图 3. Meloncilllo (全尺寸)

Herr Rutz 还负责 Meloncillo(图 3),这是一个用于 SuperCollider3 和 Csound5 空间化功能的实用程序。您的声源的移动弧线在基于 Java 的 GUI 中绘制,然后发送到接收程序。唉,最新的公开发行版不适用于我的 SuperCollider 3.5 版本,但 Meloncillo 最新 SVN 源代码中的所有问题似乎都已解决。它现在与 SuperCollider 配合良好 - 也是实时的 - 并且对于为多扬声器阵列设计复杂的声波轨迹看起来特别有用。绝对是一个很酷的工具。
 

Processing

图 4. Processing 和 SuperCollider (全尺寸)

Processing 用户可以通过 p5_sc 库在其草图中访问许多 SuperCollider 功能。Google 搜索发现了一些其他访问方式,但 p5_sc 库是将 Processing 的图形功能与 SuperCollider 的音频功能结合在一起的一个很好的起点。顺便说一句,SuperCollider 本身也有一些有趣的图形可能性,但您必须查看文档以获取有关这些功能的更多信息。(提示:查看 Canvas3D 类的文档)。感兴趣的用户还应该查看 Julian Rohrhuber 的 OpenObject 系统(图 4)及其对 SuperCollider 的外部控制可能性,包括使用 Processing 和 Pd 作为控制 GUI。
 

MEAPsoft

图 5. MEAPsoft (全尺寸)

MEAPSoft 是一款基于 Java 的 GUI 音频切片器/分块器(图 5)以及一组类和帮助文件,用于在 SuperCollider 中使用其数据。主程序在 SuperCollider 之外运行 - 它对您的音频文件执行声音操作,并创建一个 EDL(编辑决策列表)和其他可以导入到 SuperCollider 中的数据列表。一旦列表进入 SuperCollider 的世界,它们就可以受到 SuperCollider 各种 DSP 功能和其他例程的处理。唉,我在 SuperCollider 3.5 中使用 MEAPsoft 2.0.4b 生成的数据进行实验时没有成功,但程序本身可以完美地独立运行。早期 1.1.1 版本生成的数据文件可以与 SuperCollider 类很好地配合使用。

Wii 设备、Android 和 iPhones、平板电脑控制器、Arduino 板、运动跟踪器、接近和热传感器、网络摄像头和其他视频设备、各种 MIDI 硬件 - SuperCollider 运行良好,并且与每个人都相处融洽。它的用户包括 DJ/VJ、动作艺术家、即兴音乐家和诗人、现场编码员以及上述所有可能的混合体。SuperCollider 还为大型多扬声器阵列和多维音频格式提供空间化功能。唉,我没有探索这些功能所需的硬件,但读者可以查看 SuperCollider Book 中的相关材料以获取更多信息。

文档

在线帮助文件中有大量文档,现在我们有了 The SuperCollider Book。程序帮助通常非常出色 - 我会再次提到出色的示例 - 但唉,许多类都没有文档记录。与所有 SuperCollider 事物一样,其文档是一个正在进行的项目,鼓励用户提供帮助。

错误会发生,因此您需要熟悉 SuperCollider 的帮助系统及其错误报告。如果您在某个时候真的卡住了,您通常可以在 SuperCollider 用户邮件列表中找到您需要的知识。开发者列表也可用,但我建议新用户将其活动限制在用户列表。两个列表上的讨论通常比音乐更技术性,但新用户应该随意询问任何困惑之处。许多开发人员也是著名的用户,并且有很多友好的朋友会尽力帮助您获得所需的帮助。SuperCollider 主页指向优秀的 wiki 和其他相关站点,当然,在很多方面,当您想筛选网络上与 SuperCollider 相关的材料时,Google 是您的朋友。

评估

我看不出 SuperCollider 会对没有音频编程语言先验概念的感兴趣的新手造成任何非凡的困难。该语言的基础知识并不难学,并且有大量的有用示例代码。事实上,我经常发现最好的文档是程序本身。SuperCollider 附带的示例代码包括完整的作品以及教程和其他教学材料。有了这些项目、现有的帮助文档和 SuperCollider Book,您应该处于良好的状态,可以开始并推进 SuperCollider 之路。

作为长期的 Csound 用户,我禁不住要比较这个精彩的环境和 SuperCollider 的世界。然而,它们的主要设计考虑因素差异很大,以至于任何比较都注定是肤浅的,并且不能让任何一个系统的忠实用户满意。公平地说,SuperCollider 比 Csound 更灵活地适应实时用例,但也值得指出的是,一些 Csound 用户也主要在实时表演中工作,而一些 SuperCollider 用户将其系统用于非实时作曲和离线渲染。

Csound 还带有许多遗留问题 - 它源自已故 Max Mathews 定义的 MusicN 系统 - 一些用户发现它的语法足够过时,迫使他们寻找解决其缺点的方法,例如使用 Python 或 Java 前端进行乐器设计和乐谱制作。该语言不是按照现代模型设计的,但它非常容易学习,这要归功于 MusicN 的设计理念,即典型的音乐家应该能够快速理解和使用该系统。

SuperCollider 的语言模型基于相对更现代的基础 (Smalltalk)。像 cmusicRTCmix 一样,它在乐器和乐谱代码之间没有必要的区别,即单个代码块可以包含所有需要的合成器定义和乐谱指令。SuperCollider 的许多术语对于音乐家来说可能不太容易理解,但一些好的例子清楚地表明,SuperCollider 提供了一种不同 - 且非常令人兴奋 - 的思考方式,即我们如何使用计算机制作音乐。

顺便说一句,The SuperCollider Book 的所有者应该阅读标题为 Practical Applications 和 Projects And Perspectives 的部分中的材料,以全面了解 SuperCollider 在现实世界应用中的实用性,其中一些应用包括带有大型多扬声器阵列的复杂声音装置。

我赞赏设计师决定使用 Qt 作为跨平台 GUI 工具包。是的,一些 Cocoa 组件仍然缺失,一些基于 Swing 的 GUI 的功能优于其 Qt 等效组件,但 SuperCollider/Qt 连接运行良好且发展迅速。特别感谢和赞扬 Jakob Leben 为他在 SuperCollider 的 Qt 界面上所做的持续工作。这项工作规模庞大,在幕后进行,而且不是很性感,但用户级别的回报非常棒。我已经运行了一些以前仅限于 Mac GUI 工具包的“仅 Cocoa”代码,并且我期待着有一天任何人都可以运行任何 SuperCollider 代码,而无需进行任何更改,无论平台或版本如何。

(我也在耐心地等待 IxiQuarks 在新的 Qt GUI 中可用。提示提示。)

在离开之前,我要感谢 SuperCollider 用户和开发社区对我的各种困境的帮助。特别感谢 Tim Blechmann、James Harkins、Jonatan Liljedal 和 Marije A. J. Baalman 的宝贵技术建议和帮助。

请注意,SuperCollider 3.5 是一项正在进行中的工作。它代表了该项目的一个伟大的发展里程碑,具有许多新功能和优化的代码库。我不知道 3.5 何时会成为正式版本 - SuperCollider 是一个具有分布式开发的开源项目,我对这类项目的经验建议我保持耐心并提供鼓励和错误报告。同时,我仍然是一个初学者,我有很多东西要学,所以我最终将结束这份报告并回到我的课程(呵呵)。我希望您喜欢这次游览,我也希望您受到启发自己尝试 SuperCollider。

结尾

请参阅我最近对 The SuperCollider Book 的评论。Linux 音频领域发生了很多事情,包括升级后的 Mixbus 2.0、一些新的 LV2 插件、Loomer 更新、QTractor 的重大发展等等。我将在几周后回来,请查看我将带来什么。

加载 Disqus 评论