0
Interactive Music II
SuperCollider応用
JITLib - ライブコーディング 2
2013年11月28日
東京藝術大学芸術情報センター(AMC)
田所 淳
今日の内容
‣ JITlibを使用した、SuperColliderライブコーディングつづき
‣ より高度なライブコーディングに挑戦!
先週の復習
ライブ・コーディング
‣ ライブ・コーディング (Live Coding) とは?
!

‣ 「on-the-fly programming」「just in time programming」
‣ 即興的にプログラミングを行う
!

‣ コンピ...
ライブ・コーディング
‣ ライブコーディングに対応した言語
!

‣
‣
‣
‣
‣
‣
‣
‣

SuperCollider
ChucK
COLT
Impromptu
Pure Data
Max
LiveCode
Fluxus
ライブ・コーディング
‣ 参考サイト: TOPLAP
ライブ・コーディング
‣ Study In Keith - A livecoding performance by Andrew Sorensen
SuperColliderで、ライブコーディング
‣ JITlibとは?
‣ 標準のsupercolliderサーバ・リリースとともに配布されるサー
ド・パーティ・ライブラリの1つ
‣ SuperCollider (SCLang) にライブコー...
SuperColliderで、ライブコーディング
‣ 一般のSuperColliderでのコード作成イメージ
SuperColliderで、ライブコーディング
‣ 一般のSuperColliderでのコード作成イメージ

楽器の全てを定義
SuperColliderで、ライブコーディング
‣ 一般のSuperColliderでのコード作成イメージ

楽器の全てを定義

最終結果のシグナルを出力へ

出力
SuperColliderで、ライブコーディング
‣ SuperCollider + JITLibでのコード作成イメージ
SuperColliderで、ライブコーディング
‣ SuperCollider + JITLibでのコード作成イメージ

出力

まず始めに
最終出力を作成
SuperColliderで、ライブコーディング
‣ SuperCollider + JITLibでのコード作成イメージ

Node

ノートを出力に送ると
すぐに音が生成される

出力
SuperColliderで、ライブコーディング
‣ SuperCollider + JITLibでのコード作成イメージ

Node

Node

複数のNodeを
ミックス可能

出力
SuperColliderで、ライブコーディング
‣ SuperCollider + JITLibでのコード作成イメージ

Node
Node

出力

Nodeを後から
入れ替えも可能
SuperColliderで、ライブコーディング
‣ SuperCollider + JITLibでのコード作成イメージ

Node

Node

Node

Node

Node
出力結果を常に聞きながら
複雑な構造を構築できる

出力
SuperColliderで、ライブコーディング
‣ JITlibモードに入る、元に戻る
//セットアップ。これによって「jitlibモード」に入る	
p= ProxySpace.push(s);	

!
//通常のsc langに戻るには	
...
SuperColliderで、ライブコーディング
‣ NodeProxy サーバーで処理する場所を確保する
//「~ + 変数名」はサーバーで処理される何かの場所を確保する(NodeProxy)	
//ugen関数、静的な数、pbind、lfo...
SuperColliderで、ライブコーディング
‣ Proxyの置き換え、クロスフェード
//プロキシの中に現在あるものを別のugen関数で置き換える	
~out = {SinOsc.ar([220, 222], 0, 0.5)};	

!
...
SuperColliderで、ライブコーディング
‣ 簡単な実例: アルゴリズミックハーモニー
//アルゴリズミック・ハーモニーをライブコーディングで!	
~out = {Mix.arFill(24,{SinOsc.ar([220,221]*(...
LITLibのサンプルいろいろ
LITLibのサンプルいろいろ
‣ いろいろなサンプルを通して、JITLibの雰囲気をつかんでいき
ましょう
‣ 実際にコードを実行して、音を聞きながら進めていくと、理解
しやすいと思います
LITLibのサンプルいろいろ
‣ LITLibの準備、ProxySpaceの作成
// ProxySpaceの作成 (コードを実行する場所を確保)	
p = ProxySpace.push(s);	

!

// まず始めに出力を設定	
~o...
LITLibのサンプルいろいろ
‣ NodeProxyの入れ替え
// ノードの入れ替え	
~out = { SinOsc.ar([400, 408] * 0.8, 0, 0.2) };	
~out = { SinOsc.ar([443, 60...
LITLibのサンプルいろいろ
‣ Nodeの引数を設定
// nodeの引数を設定	
~out = { arg rate = 2; Pan2.ar(PinkNoise.ar(0.1), LFClipNoise.kr(rate)) };	
~o...
LITLibのサンプルいろいろ
‣ Proxyを相互に参照
// Proxyを相互に参照	
~lfo = { LFNoise2.kr(30, 300, 500) };	
~out = { SinOsc.ar(~lfo.kr, 0, 0.15) ...
LITLibのサンプルいろいろ
‣ Proxy同士の演算
// Proxy同士の演算	
~lfo2 = { SinOsc.kr(0.5, 0, 600, 100) };	
~lfo = ~lfo2.abs;	
~lfo2 = { SinOsc....
LITLibのサンプルいろいろ
‣ 出力のフィードバック
// 出力のフィードバック	
~out = { SinOsc.ar([220, 330], ~out.ar(2).reverse * LFNoise2.kr(0.5, 4pi), 0.4...
LITLibのサンプルいろいろ
‣ 出力のフィードバック
// ミキシング	
~out1 = { SinOsc.ar(600, 0, 0.1) };	
~out2 = { SinOsc.ar(500, 0, 0.1) };	
~out3 = {...
LITLibのサンプルいろいろ
‣ 引数のマッピング
~out = { arg freq=100, ffreq=20; SinOsc.ar(freq, SinOsc.ar(SinOsc.ar(ffreq)*ffreq,
0, pi), 0.2)...
LITLib実習
‣ 前回、自分が作成した楽器を、JITLibで動かせるように編集
‣ 音を聞きながら、パラメーターを微調整してみる
‣ ライブコーディングをすると、便利になったか?
Upcoming SlideShare
Loading in...5
×

Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2

1,030

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,030
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
26
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2"

  1. 1. Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2 2013年11月28日 東京藝術大学芸術情報センター(AMC) 田所 淳
  2. 2. 今日の内容 ‣ JITlibを使用した、SuperColliderライブコーディングつづき ‣ より高度なライブコーディングに挑戦!
  3. 3. 先週の復習
  4. 4. ライブ・コーディング ‣ ライブ・コーディング (Live Coding) とは? ! ‣ 「on-the-fly programming」「just in time programming」 ‣ 即興的にプログラミングを行う ! ‣ コンピュータ音楽、CGアニメーションなどで多くの試み
  5. 5. ライブ・コーディング ‣ ライブコーディングに対応した言語 ! ‣ ‣ ‣ ‣ ‣ ‣ ‣ ‣ SuperCollider ChucK COLT Impromptu Pure Data Max LiveCode Fluxus
  6. 6. ライブ・コーディング ‣ 参考サイト: TOPLAP
  7. 7. ライブ・コーディング ‣ Study In Keith - A livecoding performance by Andrew Sorensen
  8. 8. SuperColliderで、ライブコーディング ‣ JITlibとは? ‣ 標準のsupercolliderサーバ・リリースとともに配布されるサー ド・パーティ・ライブラリの1つ ‣ SuperCollider (SCLang) にライブコーディング機能を追加 ‣ 参考: http://doc.sccode.org/Overviews/JITLib.html
  9. 9. SuperColliderで、ライブコーディング ‣ 一般のSuperColliderでのコード作成イメージ
  10. 10. SuperColliderで、ライブコーディング ‣ 一般のSuperColliderでのコード作成イメージ 楽器の全てを定義
  11. 11. SuperColliderで、ライブコーディング ‣ 一般のSuperColliderでのコード作成イメージ 楽器の全てを定義 最終結果のシグナルを出力へ 出力
  12. 12. SuperColliderで、ライブコーディング ‣ SuperCollider + JITLibでのコード作成イメージ
  13. 13. SuperColliderで、ライブコーディング ‣ SuperCollider + JITLibでのコード作成イメージ 出力 まず始めに 最終出力を作成
  14. 14. SuperColliderで、ライブコーディング ‣ SuperCollider + JITLibでのコード作成イメージ Node ノートを出力に送ると すぐに音が生成される 出力
  15. 15. SuperColliderで、ライブコーディング ‣ SuperCollider + JITLibでのコード作成イメージ Node Node 複数のNodeを ミックス可能 出力
  16. 16. SuperColliderで、ライブコーディング ‣ SuperCollider + JITLibでのコード作成イメージ Node Node 出力 Nodeを後から 入れ替えも可能
  17. 17. SuperColliderで、ライブコーディング ‣ SuperCollider + JITLibでのコード作成イメージ Node Node Node Node Node 出力結果を常に聞きながら 複雑な構造を構築できる 出力
  18. 18. SuperColliderで、ライブコーディング ‣ JITlibモードに入る、元に戻る //セットアップ。これによって「jitlibモード」に入る p= ProxySpace.push(s); ! //通常のsc langに戻るには p.pop; !
  19. 19. SuperColliderで、ライブコーディング ‣ NodeProxy サーバーで処理する場所を確保する //「~ + 変数名」はサーバーで処理される何かの場所を確保する(NodeProxy) //ugen関数、静的な数、pbind、lfoなどを入れることが可能 ! //例えば、UGenのひとつSinOscの出力結果をNodeProxyに入れる ~out = {SinOsc.ar}; ! //proxyspaceに定義したもののリストを見る p; ! //ProxySpaceに定義したものを再生する ~out.play;
  20. 20. SuperColliderで、ライブコーディング ‣ Proxyの置き換え、クロスフェード //プロキシの中に現在あるものを別のugen関数で置き換える ~out = {SinOsc.ar([220, 222], 0, 0.5)}; ! //クロスフェードの時間を設定 ~out.fadeTime = 4; ! //クロスフェードしながら、別のUgenに置き換え ~out = {SinOsc.ar([300, 333], 0, 0.5)}; ! //無音にフェードアウト ~out.release;
  21. 21. SuperColliderで、ライブコーディング ‣ 簡単な実例: アルゴリズミックハーモニー //アルゴリズミック・ハーモニーをライブコーディングで! ~out = {Mix.arFill(24,{SinOsc.ar([220,221]*(3.0/2**rrand(1,6))*(0.5** rrand(1,6)),0,1.0/24)})}; ~out = {Mix.arFill(24,{SinOsc.ar([220,221]*(4.0/3**rrand(1,6))*(0.5** rrand(1,6)),0,1.0/24)})}; ~out = {Mix.arFill(24,{SinOsc.ar([220,221]*(5.0/3**rrand(1,8))*(0.5** rrand(1,6)),0,1.0/24)})}; ~out = {Mix.arFill(24,{SinOsc.ar([220,221]*(9.0/8**rrand(1,20))*(0.5** rrand(1,6)),0,1.0/24)})};
  22. 22. LITLibのサンプルいろいろ
  23. 23. LITLibのサンプルいろいろ ‣ いろいろなサンプルを通して、JITLibの雰囲気をつかんでいき ましょう ‣ 実際にコードを実行して、音を聞きながら進めていくと、理解 しやすいと思います
  24. 24. LITLibのサンプルいろいろ ‣ LITLibの準備、ProxySpaceの作成 // ProxySpaceの作成 (コードを実行する場所を確保) p = ProxySpace.push(s); ! // まず始めに出力を設定 ~out.play;
  25. 25. LITLibのサンプルいろいろ ‣ NodeProxyの入れ替え // ノードの入れ替え ~out = { SinOsc.ar([400, 408] * 0.8, 0, 0.2) }; ~out = { SinOsc.ar([443, 600 - Rand(0,200)], 0, 0.2) }; ~out = { Resonz.ar(Saw.ar(40 + [0,0.2], 1), [1200, 1600], 0.1) + SinOsc.ar(60 * [1,1.1],0,0.2) }; ~out = { Pan2.ar(PinkNoise.ar(0.1), LFClipNoise.kr(2)) };
  26. 26. LITLibのサンプルいろいろ ‣ Nodeの引数を設定 // nodeの引数を設定 ~out = { arg rate = 2; Pan2.ar(PinkNoise.ar(0.1), LFClipNoise.kr(rate)) }; ~out.set(rate, 30); ~out = { arg rate = 2; Pan2.ar(Dust.ar(2000, 0.2), LFClipNoise.kr(rate)) }; ~out.set(rate, 2);
  27. 27. LITLibのサンプルいろいろ ‣ Proxyを相互に参照 // Proxyを相互に参照 ~lfo = { LFNoise2.kr(30, 300, 500) }; ~out = { SinOsc.ar(~lfo.kr, 0, 0.15) }; ~out = { SinOsc.ar(~lfo.kr * [1, 1.2], 0, 0.1) * Pulse.ar(~lfo.kr * [0.1, 0.125], 0.5) }; ~lfo = { LFNoise1.kr(30, 40) + SinOsc.kr(0.1, 0, 200, 500) }; ~out = { SinOsc.ar(~lfo.kr * [1, 1.2], 0, 0.1) }; ~lfo = 410;
  28. 28. LITLibのサンプルいろいろ ‣ Proxy同士の演算 // Proxy同士の演算 ~lfo2 = { SinOsc.kr(0.5, 0, 600, 100) }; ~lfo = ~lfo2.abs; ~lfo2 = { SinOsc.kr(1.3, 0, 600, 100) }; ~lfo3 = { LFTri.kr(0.5, 0, 80, 300) }; ~lfo = ~lfo2 + ~lfo3; ~lfo = ~lfo3; ~lfo = (~lfo3 / 50).sin * 200 + 500 * { LFTri.kr(~lfo.kr * 0.0015, 0, 0.1 * ~lfo3.kr / 90, 1) }; ~lfo3 = { Mix(~lfo2.kr * [1, 1.2]) };
  29. 29. LITLibのサンプルいろいろ ‣ 出力のフィードバック // 出力のフィードバック ~out = { SinOsc.ar([220, 330], ~out.ar(2).reverse * LFNoise2.kr(0.5, 4pi), 0.4) }; ~out = { Impulse.ar(1 ! 2) + (~out.ar(2) * 0.99) }; ~out = { SinOsc.ar(Slope.ar(~out.ar) * MouseX.kr(1000, 18000, 1)) * 0.1 + SinOsc.ar(100, 0, 0.1) }; ( ~out = { var z, zz; z = Slope.ar(~out.ar); zz = Slope.ar(z); SinOsc.ar(Rand(300,410), z) * SinOsc.ar(zz * 410) * 0.1 + Decay2.ar(Pan2.ar(Dust.ar(600), MouseX.kr(-1,1)), 0.01, 0.05); } )
  30. 30. LITLibのサンプルいろいろ ‣ 出力のフィードバック // ミキシング ~out1 = { SinOsc.ar(600, 0, 0.1) }; ~out2 = { SinOsc.ar(500, 0, 0.1) }; ~out3 = { SinOsc.ar(400, 0, 0.1) }; ~out = ~out2 + ~out1 + ~out3; ~out = ~out1 + ~out2; ~out = ~out1; ! // ミキシング別の方法 ~out = { SinOsc.ar(600, 0, 0.1) }; ~out.add({ SinOsc.ar(500, 0, 0.1) }); ~out.add({ SinOsc.ar(400, 0, 0.1) }); ! // 配列の使用 ~out[1] = { SinOsc.ar(500 * 1.2, 0, 0.1) }; ~out[2] = { SinOsc.ar(400 * 1.2, 0, 0.1) };
  31. 31. LITLibのサンプルいろいろ ‣ 引数のマッピング ~out = { arg freq=100, ffreq=20; SinOsc.ar(freq, SinOsc.ar(SinOsc.ar(ffreq)*ffreq, 0, pi), 0.2) }; ! // 別のProxyを引数としてマッピング ~lfo = { SinOsc.kr(0.3, 0, 80, 100) }; ~out.map(ffreq, ~lfo); ~out = { arg freq=300, ffreq=20; Pulse.ar(freq * [1, 1.1] + SinOsc.ar(ffreq, 0, freq), 0.3, 0.1) }; ~out = { arg freq=300, ffreq=20; BPF.ar(LFSaw.ar(ffreq * [1, 1.1], 0, 1), freq, 0.2) }; ~lfo = { FSinOsc.kr(0.3, 0, 30, 200) + FSinOsc.kr(10, 0, 10) }; ~out = { arg freq=300, ffreq=20; SinOsc.ar(freq*[1,1.1], SinOsc.ar(ffreq, 0, pi), 0.1) }; ! // クロスフェード ~out.fadeTime = 2; ~out.xset(freq, 9000); ~out.xset(freq, rrand(400, 700)); ~lfo = { FSinOsc.kr(0.1, 0, 30, 100) }; ~lfo2 = { LFClipNoise.kr(3, 100, 200) }; ~lfo3 = StreamKrDur(Pseq([Prand([530, 600],1), 700, 400, 800, 500].scramble, inf) / 3, 0.2); ~out.xmap(ffreq, ~lfo2); ~out.xmap(ffreq, ~lfo); ~out.xmap(ffreq, ~lfo3);
  32. 32. LITLib実習 ‣ 前回、自分が作成した楽器を、JITLibで動かせるように編集 ‣ 音を聞きながら、パラメーターを微調整してみる ‣ ライブコーディングをすると、便利になったか?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×