More Related Content More from Atsushi Tadokoro
More from Atsushi Tadokoro (20) Interactive Music II SuperCollider入門 2 - 関数とUGen5. ‣ まず理解のキーとなるのが、{...} 「大括弧」
‣ { } は「関数 (Function) 」を意味している
‣ 関数(Function)とは…
‣ 引数と呼ばれるデータを受け取り、定められた通りの処理を実
行して結果を返す一連の命令群
{[SinOsc.ar(440, 0, 0.2), SinOsc.ar(442, 0, 0.2)]}.play;
関数
11. ‣ 関数以外も格納できる - SuperColliderでの変数の例
// 変数「a」に数値を代入
a = 1;
a;
// 計算結果を代入することも可能
b = 1 + 1;
b;
// 文字列だって入る
c = "Hello";
c;
// アルファベット1文字でない場合は、「var」が必要
{
var num = 10;
num = num * 2;
num;
}.value;
変数
14. ‣ 戻り値: 関数から出力される値
‣ 例えば、計算をしてその結果を出力する
// 足し算
f = {2 + 3;};
f.value;
// もう少し複雑な例: 整数の二乗を出力
f = {
! a = 10.rand;
! a * a;
};
f.value;
関数
15. ‣ 引数: 関数に渡す値
‣ 「arg」に続けて引数の名前を入れる
f = {
! arg a, b; // 引数
! a / b;
};
// 引数の指定 - 順番で区別
f.value(10, 2);
// 引数の指定 - キーワードで指定
f.value(b: 2, a: 10);
関数
18. ‣ { ... } の部分は関数
‣ 音を出す命令をまとめている
‣ では、「SinOsc」とその後のメッセージ「ar」は何か?
{ SinOsc.ar(440, 0, 0.2) } .play;
関数と音
19. ‣ SinOsc → オブジェクト
‣ Sin波を生成するための機能をもった小さなプログラム
関数と音
SinOsc
21. ‣ .ar
‣ Audio Rate
‣ 音の波形を計算する際に用いる、高精度の信号を出力するメ
ソッド
‣ .kr
‣ Control Rate
‣ 音量の変化など、あまり高精度のデータは必要としない信号を
出力するメソッド
関数と音
23. ‣ より丁寧に分解すると、こんな感じ
関数と音
(
{ // 関数の開始
SinOsc.ar( // オーディオレイトでSinOscを出力
440, // 周波数 440Hz
0, // 位相 0
0.2) // 音量 0.2
}.play; // 関数を閉じてPlayメソッドを実行
)
28. UGen (ユニット・ジェネレイター)
‣ ユニット・ジェネレイター
‣ コンピュータ音楽用のプログラミング言語で用いられる用語
‣ 音(信号)を出力したり、処理するためのオブジェクト
‣ SuperColliderには、大量のUgenが存在している
‣ これらを使いこなすことが、多様な音を生みだす秘訣!
‣ 参考: Tour of Ugens
‣ http://doc.sccode.org/Guides/Tour_of_UGens.html
31. ‣ 大括弧 [ ] は基本的には、配列 (たくさんのデータ) をあらわす
‣ たとえば以下のように使うことが可能
a = ["foo", "bar"]; // "foo", "bar"の順にデータを格納
a.at(0); // 1番目のデータ: "foo"
a.at(1); // 2番目のデータ: "bar"
a.at(2); // nil(空)が出力される
// 以下のような記述方法も
a[0]; // a.at(0)と同じ意味
配列と、音像の定位 (パン)
32. ‣ Ugen を配列にした場合は、特殊な意味をもつ
‣ 出力するチャンネルを意味する
‣ 配列に2つのUgen → 左右のチャンネル
‣ マルチチャンネル (4ch., 6ch., 8ch...) も可能
{[SinOsc.ar(440, 0, 0.2), SinOsc.ar(442, 0, 0.2)]}.play;
配列と、音像の定位 (パン)
ch.1 = Left ch.2 = Right
34. ‣ 応用例
‣ どの周波数が、どう定位されているか確認してみる
‣ 「.choose」: 配列のなかからランダムに要素を選択する
(
{ var freq;
freq = [[660, 880], [440, 660], 1320, 880].choose;
SinOsc.ar(freq, 0, 0.2);
}.play;
)
配列と、音像の定位 (パン)
36. ‣ 例2: 移動する2つのSin波
(
{
! a = Pan2.ar(SinOsc.ar(220, 0, 0.2), SinOsc.kr(0.5));
! b = Pan2.ar(SinOsc.ar(330, 0, 0.2), SinOsc.kr(-0.6));
! a + b;
}.play;
)
配列と、音像の定位 (パン)