クロックは、SuperColliderの中で自動のアルゴリズミックなスケジュ−リングを生成する際に使うメカニズムを提供します。クロックはルーチン、タスク、そしてパターンを再生します。
パターンとタスクはルーチンから作られます。
ルーチンに対する最初のアーギュメント(そして通常は唯一のアーギュメント)は関数です。
これが関数の一例です。
これはルーチンの中に関数を配置したものです。.yieldメッセージを送ることで関数の中の式を評価します。
ルーチンを実行するには、評価して下さい。
もう一度やってみましょう。
これは一度ルーチンが"yield"(受け渡し)すると、関数の中にさらなるコードがあるか、resetメッセージを受け取らない限り、終了することを示します。
////////////////////////////////////////////////////////////////////////////////////////////////////
この引用では、ルーチンに.nextメッセージが送られると、3つの表現(文字列)を順番に引き渡すことを引き起こします。例えば、nextメッセージが送られると、文字列が引き渡され、nextメッセージが送られると、文字列が引き渡さるという様にです。
上の例での最後の.nextメッセージはnilを返すでしょう。最後の表現が引き渡されると、ルーチンはリセットされるまで常にnilを返します。
////////////////////////////////////////////////////////////////////////////////////////////////////
このルーチンを.doメッセージを使って書き直すと、loopを作ります。
このdo loopをルーチンの中のループよりももう1回多く実行すると、前の例と同じ様に、3つの文字列とnilを返します。
////////////////////////////////////////////////////////////////////////////////////////////////////
次に、このルーチンを.waitメッセージを含む形で書き直します。.waitメッセージは、その数字が示す秒単位で指定した時間だけ、ルーチンを「プレイ」するクロックを一時停止させます。
以下のコードが示す様に、ルーチンに.resetメッセージを追加します。このようにして、ルーチンは常に再スタートできる様になります。そして、クロックとともにルーチンをプレイします。
以下のコードはSuperColliderがイベントをスケジューリングする時に使用する3つのクロックを示します。
////////////////////////////////////////////////////////////////////////////////////////////////////
または、そのプロセスを省略することができ、その場合にはデフォルトとしてTempoClockが使用されます。
////////////////////////////////////////////////////////////////////////////////////////////////////
ルーチンの中にシンセを入れます。シンセの中のSynthDefが必ずエンベロープを持つ様にし、そのエンベロープのdoneActionパラメータを2にセットします。これによって、エンベロープが終了した後に、そのシンセのために必要とされていたメモリが解放されます。
////////////////////////////////////////////////////////////////////////////////////////////////////
ルーチンの中で引き起こされたシンセを、ルーチンの外側で実行するエコー・エフェクト・ユニットを通してプレイします。
////////////////////////////////////////////////////////////////////////////////////////////////////