SuperCollider教程:深入理解SynthDefs合成器定义
什么是SynthDefs?
在SuperCollider音频编程环境中,SynthDef(合成器定义)是构建服务器上运行合成器引擎的核心组件。这些引擎可以保存到磁盘并重复使用,类似于商业硬件和软件合成器中的预设。
SynthDef的基本结构
一个完整的SynthDef包含两个基本部分:
- 名称:用于标识该合成器定义的唯一标识符
- ugenGraphFunc:包含实际音频处理逻辑的函数
术语"ugenGraphFunc"来源于图(graph)的概念,这是SuperCollider用来组织单元生成器(UGens)的数据结构。SuperCollider会自动从你的函数代码中构建这个图,这意味着你不需要了解图的工作原理甚至不需要知道它的存在。
SynthDef模板示例
下面是一个基本的SynthDef模板:
SynthDef(
"aSynthDef", // 第一个参数是名称
{ ... 这里是ugenGraphFunc ... } // 第二个参数是包含音频处理逻辑的函数
)
要使这个模板真正发挥作用,需要:
- 在ugenGraphFunc中填充实际的音频处理代码
- 向synthdef发送.load消息
实际可用的SynthDef示例
(
SynthDef(
"aSynthDef", // 合成器定义的名称
{ // 包含实际代码的ugenGraphFunc
arg freq; // 定义一个频率参数
Out.ar( // 输出音频
0, // 输出到总线0
SinOsc.ar(freq, 0, 0.1) // 正弦波振荡器
)
}
).load(s); // 加载到服务器
)
服务器通信方法
SuperCollider提供了几种将SynthDef发送到服务器的方法:
-
.load方法:
- 将synthdef写入磁盘
- 同时发送到默认服务器
- 默认服务器在SuperCollider启动时定义为localhost服务器,并赋值给变量's'
-
.send方法:
- 不写入磁盘,直接传输到服务器
- 适合将synthdef从一台计算机发送到另一台
(
var aServer;
aServer = Server(
"aRemoteServerOnAnotherMachine",
NetAddr("... IP地址 ...", 57110) // 另一台计算机上的服务器
);
SynthDef( .... ).send(aServer);
)
注意:本教程编写后,SuperCollider新增了
.add
方法,它将成为替代.load
和.send
的新推荐标准。
SynthDef浏览器
SuperCollider提供了内置的synthdef浏览器,用于检查已写入磁盘的synthdef:
(
// synthdef浏览器
SynthDescLib.global.read;
SynthDescLib.global.browse;
)
浏览器界面包含多个信息区域:
- 顶部中间的框显示synthdef名称
- 选择名称后,其他框会显示特定synthdef的UGens、控件、输入和输出
- "SynthDef controls"框特别有用,它显示可以传递给给定synthdef的参数
关键概念解析
- Controls(控件):synthdef中可以创建或运行时修改的参数
- Inputs/Outputs(输入/输出):表示synthdef是否使用音频或控制总线数据
- UGens(单元生成器):构成音频处理图的基本构建块
在前面的"aSynthDef"示例中,浏览器会显示它由四个UGens组成:Control、SinOsc、BinaryOpUGen和Out类的实例。它有一个"freq"控件,没有输入,并将一个音频通道输出到音频总线。
总结
SynthDef是SuperCollider音频合成的核心构建块,理解其结构和通信机制对于创建复杂的音频处理程序至关重要。通过掌握SynthDef的创建、加载和浏览方法,你可以构建出强大而灵活的音频合成系统。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考