interactive music ii supercollider応用 jitlib - ライブコーディング 2

32
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2 2013年11月28日 東京藝術大学芸術情報センター(AMC) 田所 淳

Upload: atsushi-tadokoro

Post on 04-Jun-2015

962 views

Category:

Documents


1 download

TRANSCRIPT

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

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

2013年11月28日 東京藝術大学芸術情報センター(AMC) 田所 淳

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

今日の内容‣ JITlibを使用した、SuperColliderライブコーディングつづき ‣ より高度なライブコーディングに挑戦!

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

先週の復習

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

ライブ・コーディング‣ ライブ・コーディング (Live Coding) とは? !

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

‣ コンピュータ音楽、CGアニメーションなどで多くの試み

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

ライブ・コーディング‣ 参考サイト: TOPLAP

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

ライブ・コーディング‣ Study In Keith - A livecoding performance by Andrew Sorensen

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

SuperColliderで、ライブコーディング‣ JITlibとは? ‣ 標準のsupercolliderサーバ・リリースとともに配布されるサード・パーティ・ライブラリの1つ

‣ SuperCollider (SCLang) にライブコーディング機能を追加 ‣ 参考: http://doc.sccode.org/Overviews/JITLib.html

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

SuperColliderで、ライブコーディング‣ 一般のSuperColliderでのコード作成イメージ

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

SuperColliderで、ライブコーディング‣ 一般のSuperColliderでのコード作成イメージ

楽器の全てを定義

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

SuperColliderで、ライブコーディング‣ 一般のSuperColliderでのコード作成イメージ

楽器の全てを定義

出力

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

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

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

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

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

出力 まず始めに 最終出力を作成

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

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

出力

Node

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

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

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

出力

複数のNodeを ミックス可能

Node Node

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

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

出力

NodeNodeを後から 入れ替えも可能Node

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

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

出力

Node

Node Node

Node

Node

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

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

//セットアップ。これによって「jitlibモード」に入るp= ProxySpace.push(s);!//通常のsc langに戻るにはp.pop;!

SuperColliderで、ライブコーディング‣ JITlibモードに入る、元に戻る

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

//「~ + 変数名」はサーバーで処理される何かの場所を確保する(NodeProxy)//ugen関数、静的な数、pbind、lfoなどを入れることが可能!//例えば、UGenのひとつSinOscの出力結果をNodeProxyに入れる~out = {SinOsc.ar};!//proxyspaceに定義したもののリストを見るp;!//ProxySpaceに定義したものを再生する~out.play;

SuperColliderで、ライブコーディング‣ NodeProxy サーバーで処理する場所を確保する

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

//プロキシの中に現在あるものを別のugen関数で置き換える~out = {SinOsc.ar([220, 222], 0, 0.5)};!//クロスフェードの時間を設定~out.fadeTime = 4;!//クロスフェードしながら、別のUgenに置き換え~out = {SinOsc.ar([300, 333], 0, 0.5)};!//無音にフェードアウト~out.release;

SuperColliderで、ライブコーディング‣ Proxyの置き換え、クロスフェード

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

//アルゴリズミック・ハーモニーをライブコーディングで!~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)})};

SuperColliderで、ライブコーディング‣ 簡単な実例: アルゴリズミックハーモニー

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

LITLibのサンプルいろいろ

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

LITLibのサンプルいろいろ‣ いろいろなサンプルを通して、JITLibの雰囲気をつかんでいきましょう

‣ 実際にコードを実行して、音を聞きながら進めていくと、理解しやすいと思います

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

// ProxySpaceの作成 (コードを実行する場所を確保)p = ProxySpace.push(s);!// まず始めに出力を設定~out.play;

LITLibのサンプルいろいろ‣ LITLibの準備、ProxySpaceの作成

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

// ノードの入れ替え~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)) };

LITLibのサンプルいろいろ‣ NodeProxyの入れ替え

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

// 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);

LITLibのサンプルいろいろ‣ Nodeの引数を設定

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

// 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;

LITLibのサンプルいろいろ‣ Proxyを相互に参照

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

// 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]) };

LITLibのサンプルいろいろ‣ Proxy同士の演算

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

// 出力のフィードバック~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);})

LITLibのサンプルいろいろ‣ 出力のフィードバック

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

// ミキシング~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) };

LITLibのサンプルいろいろ‣ 出力のフィードバック

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

~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);

LITLibのサンプルいろいろ‣ 引数のマッピング

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

LITLib実習‣ 前回、自分が作成した楽器を、JITLibで動かせるように編集 ‣ 音を聞きながら、パラメーターを微調整してみる ‣ ライブコーディングをすると、便利になったか?