SuperCollider

SuperCollider 是一个最初由 James McCartney 在1996年发布的编程语言和声音编程环境，主要用于实时声音合成和算法作曲。

自此之后，它逐步变成一个被科学家与艺术家们共同开发和操作声音的系统。这个高效且有表现力的动态语言，为声学、 算法音乐和提供了一个框架。

在2002年以GNU通用公共许可协议发布，SuperCollider 是自由软件。

架构
从版本3开始，SuperCollider被分为两部分：一个服务器，scsynth；一个客户端，sclang。两者通过OSC()通信。

SC 的语言结合了 Smalltalk 的面向对象特性、来自函数式编程语言的特性和类C语言的语法。

SC 的服务器支持简单的C扩展API，使它很简单的编写高效的声音算法。因为外界对服务器的操作都经过OSC，所以很方便地使用其他语言或应用操作它。

SuperCollider 合成器服务器 (scsynth) 

SuperCollider的声音产生捆绑在一个优化的命令行可执行程序(scsynth)。大部分情况下它将被SuperCollider编程语言控制，但也可以被独立地使用。这个音频服务器有下列的特点：

  接入
 简单的 ANSI C 插件 API
 支持任意数量的输入和输出频道
 一个以合成节点构成的有序树结构定义了执行的顺序
 能动态重建信号流向的总线系统
 可供读写的缓冲块
 根据需要以不同的速率计算：音频速率、控制速率和需求速率

SuperCollider 编程语言 (sclang) 

SuperCollider 编程语言是一个类似于 Smalltalk 的动态类型、 垃圾回收、 单继承的面向对象和函数式编程语言， 它的语法类似LISP或者C语言。它的架构是在实时计算需求和抽象语言的灵活、简洁性之间的折衷。和许多函数式编程语言类似，它实现了函数作为一级对象，使得函数可以复合。函数和方法支持缺省参数、可变参数，调用时可以使用任意次序的关键词参数。 闭包 是词法的,  作用域 既有词法作用域和动态作用域。也支持函数式编程语言的其他典型特性，包括尾调用优化，和协程。 它特有功能包括隐式的元组扩展和无状态的模式系统。它的常量时间的消息查找和实时的垃圾回收 让大型系统保持高效与信号处理的灵活。

示例代码
// 打印 "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 } };

参考资料

外部链接
 SuperCollider 官方网站
 SuperCollider 用户邮件列表
  Nick Collins 关于 SuperCollider 的工作坊
 SuperCollider 在线帮助文件

自由软件
面向对象的编程语言
程序设计语言
陣列編程語言
音频编程语言
電子音樂軟體
现场编程