SuperCollider 是一個最初由 James McCartney 在1996年發布的程式語言和聲音編程環境,主要用於實時聲音合成算法作曲[2][3]

Quick Facts 開發者, 首次發布 ...
SuperCollider
開發者James McCartney 和其他
首次發布1996年,​28年前​(1996
當前版本3.11.2(2020年11月15日,​3年前​(2020-11-15[1]
原始碼庫 編輯維基數據鏈接
作業系統Linux, OS X, Windows
許可協議GNU通用公共許可協議
網站http://supercollider.github.io/
Close

自此之後,它逐步變成一個被科學家與藝術家們共同開發和操作聲音的系統。這個高效且有表現力的動態語言,為聲學算法音樂交互式編程英語Interactive programming提供了一個框架。[4]

在2002年以GNU通用公共許可協議發布,SuperCollider 是自由軟體

架構

從版本3開始,SuperCollider被分為兩部分:一個伺服器,scsynth;一個客戶端,sclang。兩者通過OSC(Open Sound Control英語Open Sound Control)通信。

SC 的語言結合了 Smalltalk 的物件導向特性、來自函數式程式語言的特性和類C語言的語法。

SC 的伺服器支持簡單的C擴展API,使它很簡單的編寫高效的聲音算法。因為外界對伺服器的操作都經過OSC,所以很方便地使用其他語言或應用操作它。

SuperCollider 合成器伺服器 (scsynth)

SuperCollider的聲音產生捆綁在一個優化的命令行可執行程序(scsynth)。大部分情況下它將被SuperCollider程式語言控制,但也可以被獨立地使用。這個音頻伺服器有下列的特點:[4]

  • Open Sound Control英語Open Sound Control 接入
  • 簡單的 ANSI C 插件 API
  • 支持任意數量的輸入和輸出頻道[5]
  • 一個以合成節點構成的有序樹結構定義了執行的順序
  • 能動態重建信號流向的匯流排系統
  • 可供讀寫的緩衝塊
  • 根據需要以不同的速率計算:音頻速率、控制速率和需求速率

SuperCollider 程式語言 (sclang)

SuperCollider 程式語言是一個類似於 Smalltalk動態類型垃圾回收、 單繼承的物件導向函數式程式語言,[3] 它的語法類似LISP或者C語言。它的架構是在實時計算需求和抽象語言的靈活、簡潔性之間的折衷。和許多函數式程式語言類似,它實現了函數作為一級對象,使得函數可以複合。函數和方法支持預設參數、可變參數,調用時可以使用任意次序的關鍵詞參數。 閉包 是詞法的, 作用域 既有詞法作用域和動態作用域。也支持函數式程式語言的其他典型特性,包括尾調用優化,列表解析英語List comprehension協程。 它特有功能包括隱式的元組擴展和無狀態的模式系統。它的常量時間的消息查找和實時的垃圾回收 讓大型系統保持高效與信號處理的靈活。[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.