SuperCollider
SuperCollider 是一个最初由 James McCartney 在1996年发布的编程语言和声音编程环境,主要用于实时声音合成和算法作曲。[1][2]
開發者 | James McCartney 和其他 |
---|---|
初始版本 | 1996 |
穩定版本 | 3.9.0 (2018年1月14日 ) |
源代码库 | |
操作系统 | Linux, OS X, Windows |
许可协议 | GNU通用公共许可协议 |
网站 | http://supercollider.github.io/ |
自此之后,它逐步变成一个被科学家与艺术家们共同开发和操作声音的系统。这个高效且有表现力的动态语言,为声学、 算法音乐和交互式编程提供了一个框架。[3]
在2002年以GNU通用公共许可协议发布,SuperCollider 是自由软件。
架构
从版本3开始,SuperCollider被分为两部分:一个服务器,scsynth;一个客户端,sclang。两者通过OSC(Open Sound Control)通信。
SC 的语言结合了 Smalltalk 的面向对象特性、来自函数式编程语言的特性和类C语言的语法。
SC 的服务器支持简单的C扩展API,使它很简单的编写高效的声音算法。因为外界对服务器的操作都经过OSC,所以很方便地使用其他语言或应用操作它。
SuperCollider 合成器服务器 (scsynth)
SuperCollider的声音产生捆绑在一个优化的命令行可执行程序(scsynth)。大部分情况下它将被SuperCollider编程语言控制,但也可以被独立地使用。这个音频服务器有下列的特点:[3]
SuperCollider 编程语言 (sclang)
SuperCollider 编程语言是一个类似于 Smalltalk 的动态类型、 垃圾回收、 单继承的面向对象和函数式编程语言,[2] 它的语法类似LISP或者C语言。它的架构是在实时计算需求和抽象语言的灵活、简洁性之间的折衷。和许多函数式编程语言类似,它实现了函数作为一级对象,使得函数可以复合。函数和方法支持缺省参数、可变参数,调用时可以使用任意次序的关键词参数。 闭包 是词法的, 作用域 既有词法作用域和动态作用域。也支持函数式编程语言的其他典型特性,包括尾调用优化,列表解析和协程。 它特有功能包括隐式的元组扩展和无状态的模式系统。它的常量时间的消息查找和实时的垃圾回收 让大型系统保持高效与信号处理的灵活。[3]
示例代码
// 打印 "Hello world!"
"Hello world!".postln;
// 播放一个800Hz正弦波与粉噪音的混合
{ SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play;
// 以一个频率由鼠标的水平位置决定的正弦波调制另外一个正弦波的频率和一个噪音的振幅
{
var x = SinOsc.ar(MouseX.kr(1, 100));
SinOsc.ar(300 * x + 800, 0, 0.1)
+ PinkNoise.ar(0.1 * x + 0.1)
}.play;
// 列表迭代: 将列表中元素值乘以它们的索引
[1, 2, 5, 10, -3].collect { |elem, idx| elem * idx };
// 阶乘函数
f = { |x| if(x == 0) { 1 } { f.(x-1) * x } };
参考资料
- J. McCartney, SuperCollider: A new real time synthesis language 页面存档备份,存于, in Proc. International Computer Music Conference (ICMC’96), 1996, pp. 257–258.
- J. McCartney, Rethinking the computer music language: SuperCollider, Computer Music Journal, 26 (2002), pp. 61–68.
- Scott Wilson; David Cottle; Nick Collins. . The MIT Press. 2011 [2013-10-13]. ISBN 978-0-262-23269-2. (原始内容存档于2011-05-01).
- . [2014-01-11]. (原始内容存档于2009-11-06).