| 原作者 | ジェームス・マッカートニー |
|---|---|
| 初回リリース | 1996年 |
| 安定版リリース | 3.13.0 / 2023年2月19日[1] |
| リポジトリ | github.com/supercollider/supercollider |
| 書かれた | C++ |
| オペレーティング·システム | FreeBSD、[2] Linux、macOS、Windows |
| タイプ | オーディオプログラミング言語 |
| ライセンス | GPL-3.0以降[3] |
| Webサイト | スーパーコライダー |
SuperColliderは、 1996年にジェームズ・マッカートニーによってリアルタイムオーディオ合成とアルゴリズム作曲のために最初にリリースされた環境およびプログラミング言語です。[4] [5]
それ以来、音響研究、アルゴリズム音楽、インタラクティブプログラミング、ライブコーディングのフレームワークを提供する動的プログラミング言語として、音響科学者とサウンドを扱うアーティストの両方によって使用され、さらに開発が進められてきました。
SuperCollider は、2002 年にGPL-2.0 以降の条件で最初にリリースされ、バージョン 3.4 からはGPL-3.0 以降の条件でリリースされ、無料のオープンソース ソフトウェアになりました。
建築
バージョン3以降、SuperCollider環境は、サーバー(scsynth)とクライアント(sclang )の2つのコンポーネントに分割されました。これらのコンポーネントはOSC(Open Sound Control)を使用して通信します。[6]
SC言語は、Smalltalkのオブジェクト指向構造と関数型プログラミング言語の機能をC言語ファミリーの構文と組み合わせています。[6]
SCサーバーアプリケーションはシンプルなCおよびC++プラグイン APIをサポートしており、効率的なサウンドアルゴリズム(ユニットジェネレータ)を簡単に記述でき、計算グラフに組み合わせることができます。サーバー内のすべての外部制御はOSC経由で行われるため、他の言語やアプリケーションで使用することもできます。[6]
SuperCollider合成サーバー(シンセ)
SuperColliderのサウンド生成は、最適化されたコマンドライン実行ファイル(scsynthという名前)にバンドルされています。ほとんどの場合、SuperColliderプログラミング言語内から制御されますが、独立して使用することもできます。オーディオサーバーには次の機能があります。[6]
- サウンドコントロールアクセスを開く
- シンプルなANSI CおよびC++11プラグインAPI
- 任意の数の入力および出力チャンネルをサポートし、大規模なマルチチャンネル設定もサポートします[7]
- 実行順序を定義する合成ノードの順序付けられたツリー構造へのアクセスを提供します。
- 信号フローを動的に再構築できるバスシステム
- 書き込みと読み取り用のバッファ
- ニーズに応じて異なるレートで計算:オーディオレート、制御レート、要求レート
サーバーアーキテクチャの独立した実装であるSupernova [8]は、合成ノードの明示的な並列グループ化を通じてマルチプロセッササポートを追加します。
SuperColliderプログラミング言語(スクラン)
SuperColliderプログラミング言語は、動的型付け、ガベージコレクション、単一継承のオブジェクト 指向関数型言語で、Smalltalk [5] に似ており、LispやCプログラミング言語に似た構文を持っています。そのアーキテクチャは、リアルタイム計算のニーズと抽象言語の柔軟性とシンプルさのバランスをとっています。多くの関数型言語と同様に、関数をファーストクラスオブジェクトとして実装し、合成することができます。関数とメソッドは、デフォルトの引数値と可変長の引数リストを持つことができ、キーワード引数の任意の順序で呼び出すことができます。クロージャは語彙的であり、スコープは語彙的かつ動的です。部分適用(明示的なカリー化)によるクロージャの作成、末尾呼び出し最適化、リスト内包表記、コルーチンなど、関数型言語に典型的なその他の機能もサポートされています。具体的には、タプルの暗黙的な展開とステートレスパターンシステムが含まれます。定数時間のメッセージ検索とリアルタイムガベージコレクションにより、大規模システムを効率的にし、信号処理を柔軟に処理できます。[6]
SuperColliderは、リフレクティブプログラミング、会話型プログラミング、リテラルプログラミングの手法をサポートすることで、新しいサウンドアルゴリズム[9]の発見や、カスタムソフトウェアやカスタムフレームワークの開発を比較的容易にします。ドメイン固有の知識に関しては、汎用性(例えば、時間やピッチなどのプロパティをさまざまな抽象度で表現できる)があり、特定の目的のための豊富な実装例があります。[6]
GUIシステム

SuperCollider言語を使用すると、ユーザーはアプリケーション用のクロスプラットフォームのグラフィカルユーザーインターフェイスを構築できます。ユーザーインターフェイスコンポーネントを含む標準クラスライブラリは、利用可能なフレームワークの数によって拡張できます。インタラクティブプログラミングでは、システムはリッチテキストコードファイルへのプログラムによるアクセスをサポートしています。アルゴリズム的にベクターグラフィックスを生成するために使用できます。[10]
インターフェースとシステムサポート
クライアント
サーバーはOpen Sound Control (OSC)を使用して制御されるため、さまざまなアプリケーションを使用してサーバーを制御できます。通常はSuperCollider言語環境(以下を参照)が使用されますが、 Pure Dataなどの他のOSC対応システムも使用できます。[6]
SuperColliderサーバーには、Schemeクライアントのrsc3、 Haskellベースのhsc3、 ScalaベースのScalaCollider [11] 、 ClojureベースのOvertone 、Sonic Pi [12]などの「サードパーティ」クライアントが存在します。これらは、SuperColliderのプログラミング言語へのインターフェースを提供しておらず、代わりにオーディオサーバーと直接通信し、ユーザーの表現を容易にする独自のアプローチを提供するため、以下で説明する開発環境とは異なります。[6]
サポートされているオペレーティングシステム

SuperColliderはmacOS、Linux、Windows、FreeBSDで動作します。これらのオペレーティングシステムごとに、SuperColliderで使用できる複数の言語編集環境とクライアントがあります(以下を参照)。[6]
SuperColliderはAndroid [13]とiOS [14]でも動作することが実証されています。
編集環境

SuperCollider コードは、 Qtベースで Linux、Mac、Windows をサポートする 独自のクロスプラットフォーム IDE 内から編集および使用されることが最も一般的です。
SuperCollider をサポートする その他の開発環境は次のとおりです。
- Emacs(Linux、Mac、Windows)[15]
- Vim (Linux、Mac)
- Atom(Linux、Mac、Windows)[16]
- gedit (Linux、Windows)
- ケイト(Linux、Windows)[17]
コード例
//ピンクノイズと800 Hzの正弦波の混合物を再生します{ 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 } };
// «Pan Sonic エミュレーション - Katadivaihe - lahetys» - Miguel Negrão
(
{
var a , b , c , d , n , e , f , out ;
a = インパルス. ar ( 8 ) * 1.5 ;
b = WhiteNoise.ar * Env ( [ 1.0 , 1.0 , 0.0 ] , [ 0.01 , 0.01 ] , \ step ) .ar ( 0 , Impulse.ar ( 1 ) ) ; b = FreeVerb.ar ( b , 0.5 , 0.4 ) * 2.5 ;
c = SinOsc.ar ( 40 ) * Env.perc ( 0.01,0.2 ) .ar ( 0 , TDuty.ar ( Dseq ( [ 1 / 4,1 / 2,1 / 8,1 / 8 ] , inf ) ) ) ; 5.do { c = ( c.distort + c ) * 0.75 } ; c = c * 1.5 ;
d = LPF 。ar ( Saw . ar ([ 20 , 47 ]). sum , XLine . ar ( 4000 , 200 , 0.5 )) * Env 。パーク。ar ( 0 , インパルス. ar ( 1 / 16 )) * 0.5 ;
d = ( GVerb .ar ( d , roomsize : 10 , revtime : 6 ) * 200 ) 。クリップ( -1.0 , 1.0 ) * 0.3 ;
n = 12 ;
e = ( Saw . ar ( 40 * ( 1 .. n ) * ({ LFNoise1 . ar ( 0.1 ) . range ( 1 , 1.01 ) } ! n ) ) *
({ LFNoise1 . ar ( 0.1 ) . range ( 0.0 , 1.0 ) } n ) ) 。合計 * 10 ;
e = CombC 。ar ( e , 0.1 , 0.1 , 4 ) + e ;
e = e 。Tanh * 0.3 * SinOsc 。ar ( 0.05 )。範囲( 0.5 , 1.0 );
e = e 。ダップ;
e = e * SinOsc 。ar ( 0.03 )。範囲( 0.2 , 1.0 ) * 0.5 ;
f = Blip.ar ( 100 ) * Blip.ar ( 100 ) * Env ( [ 0.0,0.0,1.0 ] , [ 8,8 ] , [ \ step , \ linear , \ step ] ) . ar ( 0 , Impulse.ar ( 1/16 ) ) * 2 ;
アウト = (( a + b + c + f ) ! 2 ) + d + e ;
アウト = アウト * 0.2
}。遊ぶ
)
ライブコーディング
SuperColliderは多用途の動的プログラミング言語として、ライブコーディング、つまり演奏者がその場でコードを変更および実行するパフォーマンスに使用できます。[18]特定の種類のプロキシは、実行時にスワップインまたはスワップアウトしたり変更したりできる合成オブジェクトの高レベルのプレースホルダーとして機能します。環境により、ネットワーク経由でオブジェクトやプロセス宣言を共有および変更できます。[19]さまざまな拡張ライブラリがさまざまな抽象化とサウンドオブジェクトへのアクセスをサポートしています。たとえば、dewdrop_lib [20]では、疑似クラスと疑似オブジェクトのライブ作成と変更が可能です。
参照
参考文献
- ^ “リリース”. Github . 2022年1月8日閲覧。
- ^ asynth. 「SuperCollider」 . 2015年6月20日閲覧。
- ^ 「SuperCollider ライセンス」。2020 年 8 月 7 日時点のオリジナルよりアーカイブ。
- ^ J. McCartney、「SuperCollider: 新しいリアルタイム合成言語」、Proc. International Computer Music Conference (ICMC'96)、1996 年、257 ~ 258 ページ。
- ^ ab J. McCartney、「コンピュータ音楽言語の再考:SuperCollider」、Computer Music Journal、26(2002)、pp.61–68。
- ^ abcdefghi スコット・ウィルソン、デビッド・コトル、ニック・コリンズ (2011)。The SuperCollider Book。MIT Press。ISBN 978-0-262-23269-2. 2011年5月1日時点のオリジナルよりアーカイブ。2011年5月26日閲覧。
- ^ 「SuperCollider メーリングリスト」。2009年11月6日時点のオリジナルよりアーカイブ。 2015年6月20日閲覧。
- ^ T. Blechmann、supernova、SuperCollider 用のマルチプロセッサ対応合成サーバー、Linux Audio Conference Proceedings、ユトレヒト 2010。
- ^ J. Rohrhuber、A. de Campo、Renate Wieser。Algorithms Today。Just in Time プログラミングのための言語設計に関するメモ。2011-07-28 にWayback Machineにアーカイブ。International Computer Music Conference の Proceedings、バルセロナ、2005 年。
- ^ ベクター グラフィックス インターフェイスは、Pen クラスによって提供されます。さまざまな例が Audiovisuals with SC で見つかります。2020 年 6 月 9 日にWayback Machineにアーカイブされました。Fredrik Olofsson のブログ、2009 年 5 月 2 日 (2012 年 5 月 11 日更新)
- ^ Rutz, HH (2010). 「SuperCollider クライアントの再考...」SuperCollider シンポジウム議事録。ベルリン。CiteSeerX 10.1.1.186.9817。
- ^ 「SCとインターフェイスするシステム」。2013年10月23日時点のオリジナルよりアーカイブ。 2015年6月20日閲覧。
- ^ GitHub 上の SuperCollider Android プロジェクト
- ^ 小さな音楽システム - Cylob ブログ、2009 年 11 月 4 日
- ^ 「SuperCollider with emacs: scel」。2012年6月5日時点のオリジナルよりアーカイブ。 2015年6月20日閲覧。
- ^ 「supercollider」. Atom . 2015年6月20日閲覧。
- ^ "jleben/Scate". GitHub . 2013年11月13日. 2015年6月20日閲覧。
- ^ Collins, N., McLean, A., Rohrhuber, J. & Ward, A. (2003)、ラップトップパフォーマンスのためのライブコーディングテクニック、Organised Sound 8(3): pp 321-30。doi : 10.1017 /S135577180300030X
- ^ J. Rohrhuber および A. de Campo。コンピュータ音楽ネットワークにおける待機と不確実性。Wayback Machineに 2006-03-14 にアーカイブ。2004年マイアミ国際コンピュータ音楽会議の議事録に掲載。
- ^ 「Quarks」として知られる多数のユーザー提供ライブラリの 1 つで、SuperCollider Quarks リポジトリで公開されています。
外部リンク
- 公式サイト
