SuperCollider 是一個最初由 James McCartney 在1996年發布的程式語言和聲音編程環境,主要用於實時聲音合成和算法作曲。[2][3]
自此之後,它逐步變成一個被科學家與藝術家們共同開發和操作聲音的系統。這個高效且有表現力的動態語言,為聲學、 算法音樂和交互式編程提供了一個框架。[4]
在2002年以GNU通用公共許可協議發布,SuperCollider 是自由軟體。
架構
從版本3開始,SuperCollider被分為兩部分:一個伺服器,scsynth;一個客戶端,sclang。兩者通過OSC(Open Sound Control)通信。
SC 的語言結合了 Smalltalk 的物件導向特性、來自函數式程式語言的特性和類C語言的語法。
SC 的伺服器支持簡單的C擴展API,使它很簡單的編寫高效的聲音算法。因為外界對伺服器的操作都經過OSC,所以很方便地使用其他語言或應用操作它。
SuperCollider的聲音產生捆綁在一個優化的命令行可執行程序(scsynth)。大部分情況下它將被SuperCollider程式語言控制,但也可以被獨立地使用。這個音頻伺服器有下列的特點:[4]
SuperCollider 程式語言是一個類似於 Smalltalk 的動態類型、 垃圾回收、 單繼承的物件導向和函數式程式語言,[3] 它的語法類似LISP或者C語言。它的架構是在實時計算需求和抽象語言的靈活、簡潔性之間的折衷。和許多函數式程式語言類似,它實現了函數作為一級對象,使得函數可以複合。函數和方法支持預設參數、可變參數,調用時可以使用任意次序的關鍵詞參數。 閉包 是詞法的, 作用域 既有詞法作用域和動態作用域。也支持函數式程式語言的其他典型特性,包括尾調用優化,列表解析和協程。 它特有功能包括隱式的元組擴展和無狀態的模式系統。它的常量時間的消息查找和實時的垃圾回收 讓大型系統保持高效與信號處理的靈活。[4]
示例代碼
// 打印 "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 } };
參考資料
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.