SuperCollider

維基百科,自由的百科全書
跳至導覽 跳至搜尋
SuperCollider
File:SuperCollider logo.svg
開發者James McCartney 和其他
首次發佈1996年,​30年前​(1996
當前版本3.11.2(2020年11月15日,​5年前​(2020-11-15[1]
原始碼庫
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
引擎
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    作業系統Linux, OS X, Windows
    許可協議GNU通用公共許可協議
    網站http://supercollider.github.io/

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

    自此之後,它逐步變成一個被科學家與藝術家們共同開發和操作聲音的系統。這個高效且有表現力的動態語言,為聲學算法音樂交互式編程英語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 } };
    


    參考資料[編輯]

    1. ^ Releases. Github. [15 November 2020]. (原始內容存檔於2020-12-30). 
    2. ^ J. McCartney, SuperCollider: A new real time synthesis language頁面存檔備份,存於互聯網檔案館), in Proc. International Computer Music Conference (ICMC』96), 1996, pp. 257–258.
    3. ^ 3.0 3.1 J. McCartney, Rethinking the computer music language: SuperCollider, Computer Music Journal, 26 (2002), pp. 61–68.
    4. ^ 4.0 4.1 4.2 Scott Wilson; David Cottle; Nick Collins. The SuperCollider Book. The MIT Press. 2011 [2013-10-13]. ISBN 978-0-262-23269-2. (原始內容存檔於2011-05-01). 
    5. ^ BEASTmulch tools for multichannel audio. [2014-01-11]. (原始內容存檔於2009-11-06). 

    外部連結[編輯]