• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Interactive Music II SuperCollider入門 2 - 関数とUGen
 

Interactive Music II SuperCollider入門 2 - 関数とUGen

on

  • 1,370 views

 

Statistics

Views

Total Views
1,370
Views on SlideShare
759
Embed Views
611

Actions

Likes
4
Downloads
29
Comments
0

4 Embeds 611

http://yoppa.org 583
http://cloud.feedly.com 24
http://www.feedspot.com 3
http://digg.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Interactive Music II SuperCollider入門 2 - 関数とUGen Interactive Music II SuperCollider入門 2 - 関数とUGen Presentation Transcript

    • Interactive Music II SuperCollider入門 2 - 関数とUGen 2013年10月10日 東京藝術大学芸術情報センター(AMC) 田所 淳
    • 今日の内容 ‣ SuperColliderで音を生成する簡単なプログラムをサンプルに して、その構造を理解する ‣ キーワード: ‣ 変数、関数、引数、オブジェクト、メッセージ、Ugen(ユニッ トジェネレータ)
    • ‣ 以下のコードを今日中に完璧に理解したい!! ‣ まず音を聞いてみる ‣ どんな音がしているか? ‣ ここからしばらく、あまり面白い音は出ませんが、基礎固めと 考えて、頑張りましょう! {[SinOsc.ar(440, 0, 0.2), SinOsc.ar(442, 0, 0.2)]}.play; 今日中に理解したいコード
    • 変数と関数
    • ‣ まず理解のキーとなるのが、{...} 「大括弧」 ‣ { } は「関数 (Function) 」を意味している ‣ 関数(Function)とは… ‣ 引数と呼ばれるデータを受け取り、定められた通りの処理を実 行して結果を返す一連の命令群 {[SinOsc.ar(440, 0, 0.2), SinOsc.ar(442, 0, 0.2)]}.play; 関数
    • ‣ SuperCollider関数のイメージ ‣ ざっくりとしたイメージ ‣ { } の中を評価して、「.動作」の部分で結果を出す {処理の内容}.動作 関数
    • 関数 ‣ 関数のイメージ ‣ 「引数」を入力すると、「戻り値」が出てくる 関数 引数1 引数2 引数3 戻り値
    • ‣ SuperCollider、関数の例 ‣ 1行目から順番に選択して、Command + Enter してみる ‣ どんな結果が出てくるか? ‣ Post Windowで確認してみる! f = {"関数を評価しています。".postln;}; f; f.value; 関数
    • ‣ ところで、この例に出てくる「f」は何か? ‣ 「f」は「変数 (Variables)」 ‣ 変数 (Variables) とは… ‣ 値を格納する箱 ‣ プログラムで使われるデータに固有の名前を与えたもの f = {"関数を評価しています。".postln;}; f; f.value; 変数
    • ‣ この例では、「変数」の箱に「関数」を入れている 変数 variables {Function}
    • ‣ 関数以外も格納できる - SuperColliderでの変数の例 // 変数「a」に数値を代入 a = 1; a; // 計算結果を代入することも可能 b = 1 + 1; b; // 文字列だって入る c = "Hello"; c; // アルファベット1文字でない場合は、「var」が必要 { var num = 10; num = num * 2; num; }.value; 変数
    • ‣ 先程の関数の出力結果 ‣ 最初に、関数(処理のかたまり)を、変数「f」に代入 ‣ 「f;」をそのまま評価すると、「a Function」が出力される ‣ 「f.value;」で、関数が評価される ‣ → 「関数を評価しています。」が出力 a Function a Function 関数を評価しています。 関数を評価しています。 関数
    • 引数と戻り値
    • ‣ 戻り値: 関数から出力される値 ‣ 例えば、計算をしてその結果を出力する // 足し算 f = {2 + 3;}; f.value; // もう少し複雑な例: 整数の二乗を出力 f = { ! a = 10.rand; ! a * a; }; f.value; 関数
    • ‣ 引数: 関数に渡す値 ‣ 「arg」に続けて引数の名前を入れる f = { ! arg a, b; // 引数 ! a / b; }; // 引数の指定 - 順番で区別 f.value(10, 2); // 引数の指定 - キーワードで指定 f.value(b: 2, a: 10); 関数
    • 関数と音
    • ‣ 以下のプログラムについて考えてみる { SinOsc.ar(440, 0, 0.2) }.play; 関数と音
    • ‣ { ... } の部分は関数 ‣ 音を出す命令をまとめている ‣ では、「SinOsc」とその後のメッセージ「ar」は何か? { SinOsc.ar(440, 0, 0.2) } .play; 関数と音
    • ‣ SinOsc → オブジェクト ‣ Sin波を生成するための機能をもった小さなプログラム 関数と音 SinOsc
    • ‣ SinOscクラスは、「ar」「kr」「ir」などの動作を持つ ‣ → メソッド 関数と音 SinOsc ar krir ...
    • ‣ .ar ‣ Audio Rate ‣ 音の波形を計算する際に用いる、高精度の信号を出力するメ ソッド ‣ .kr ‣ Control Rate ‣ 音量の変化など、あまり高精度のデータは必要としない信号を 出力するメソッド 関数と音
    • ‣ この例では、SinOsc.ar メソッドに3つの引数を指定している ‣ 引数の順番によって、意味を区別している ‣ 第1引数: 周波数(Hz) ‣ 第2引数: 位相 (波形の時間軸方向のずれ) ‣ 第3引数: 音量 関数と音 { SinOsc.ar(440, 0, 0.2) }.play;
    • ‣ より丁寧に分解すると、こんな感じ 関数と音 ( {             // 関数の開始 SinOsc.ar(  // オーディオレイトでSinOscを出力 440,     // 周波数 440Hz     0,     // 位相 0     0.2)     // 音量 0.2 }.play;       // 関数を閉じてPlayメソッドを実行 )
    • ‣ 「.play」を「.scope」に変えてみる ‣ 波形がグラフで表示される 関数と音 { SinOsc.ar(440, 0, 0.2) }.scope;
    • ‣ 3つの引数「440, 0, 0.2」をいろいろ変化させて、波形の変化 と対応する音の変化を確認してみる! 関数と音
    • ‣ 応用: SinOscをくみあわせる 関数と音 ( { var ampOsc;     ampOsc = SinOsc.kr(0.5, 1.5pi, 0.5, 0.5);     SinOsc.ar(440, 0, ampOsc); }.play; )
    • UGen (ユニット・ジェネレイター)
    • UGen (ユニット・ジェネレイター) ‣ ユニット・ジェネレイター ‣ コンピュータ音楽用のプログラミング言語で用いられる用語 ‣ 音(信号)を出力したり、処理するためのオブジェクト ‣ SuperColliderには、大量のUgenが存在している ‣ これらを使いこなすことが、多様な音を生みだす秘訣! ‣ 参考: Tour of Ugens ‣ http://doc.sccode.org/Guides/Tour_of_UGens.html
    • 配列と、音像の定位 (パン)
    • ‣ いよいよ、今日冒頭のソースコードに突入 ‣ 2つのSinOscが、大括弧 [ ] に格納されている ‣ これはどういう意味なのか? {[SinOsc.ar(440, 0, 0.2), SinOsc.ar(442, 0, 0.2)]}.play; 配列と、音像の定位 (パン)
    • ‣ 大括弧 [ ] は基本的には、配列 (たくさんのデータ) をあらわす ‣ たとえば以下のように使うことが可能 a = ["foo", "bar"]; // "foo", "bar"の順にデータを格納 a.at(0);     // 1番目のデータ: "foo" a.at(1); // 2番目のデータ: "bar" a.at(2); // nil(空)が出力される // 以下のような記述方法も a[0];             // a.at(0)と同じ意味 配列と、音像の定位 (パン)
    • ‣ 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
    • ‣ UGenの引数のみ配列にしても、同じ効果を得られる {[SinOsc.ar(440, 0, 0.2), SinOsc.ar(442, 0, 0.2)]}.play; 配列と、音像の定位 (パン) { SinOsc.ar([440, 442], 0, 0.2) }.play;
    • ‣ 応用例 ‣ どの周波数が、どう定位されているか確認してみる ‣ 「.choose」: 配列のなかからランダムに要素を選択する ( { var freq;     freq = [[660, 880], [440, 660], 1320, 880].choose;     SinOsc.ar(freq, 0, 0.2); }.play; ) 配列と、音像の定位 (パン)
    • ‣ Pan2を使うと、音像を移動を表現できる ‣ 例: Sin波を音像の動きに適用 ( { ! Pan2.ar(SinOsc.ar(440, 0, 0.2), SinOsc.kr(0.5)); }.play; ) 配列と、音像の定位 (パン)
    • ‣ 例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; ) 配列と、音像の定位 (パン)
    • 今日はここまで!