Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

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

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

    Be the first to comment

    Login to see the comments

  • arktyp

    Oct. 30, 2013
  • KazukiSekiya

    Dec. 19, 2013
  • yuichirouk

    Dec. 29, 2013
  • toshimichimizube

    Jul. 17, 2014
  • m0Rya

    Sep. 30, 2014
  • ssuserfe283a

    Oct. 1, 2016
  • IsobeKota

    Nov. 20, 2018

Views

Total views

4,486

On Slideshare

0

From embeds

0

Number of embeds

1,479

Actions

Downloads

77

Shares

0

Comments

0

Likes

7

×