Interactive Music II SuperCollider応用 - SuperColliderと OSC (Open Sound Control)

Preview:

Citation preview

SuperCollider応用 SuperColliderと OSC (Open Sound Control)

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

今日の内容‣ OSC (Open Sound Control) というプロトコルについて ‣ この仕組みを理解することで、SuperColliderと他のアプケーションとの連携が可能に !

‣ 最終的な目標 ‣ SuperColliderを、他のアプケーションのGUIからコントロール ‣ SuperColliderの音を、他のアプリケーションでビジュアライズ

Open Sound Control (OSC) について

Open Sound Control とは‣ Open Sound Control のプロジェクトのWebページより ‣ Open Sound Control (OSC) is a protocol for communication among computers, sound synthesizers, and other multimedia devices that is optimized for modern networking technology. Bringing the benefits of modern networking technology to the world of electronic musical instruments, OSC's advantages include interoperability, accuracy, flexibility, and enhanced organization and documentation.

Open Sound Control とは‣ 要点: Open Sound Control (OSC)とは !

‣ コンピュータ、シンセサイザーや、その他のマルチメディアデバイス同士でコミュニケーションするための通信プロトコル !

‣ 現代のネットワーク技術の成果を電子楽器の世界に適用 ‣ → UDP/IP !

‣ 相互運用性、正確さ、柔軟さ、拡張性に優れる

Open Sound Control とは‣ Open Sound Control のポイント !

‣ ポストMIDIを目指す ‣ インターネットのプロトコルの仕組みを、音楽やマルチメディアの世界へ適用 (UDP/IPを利用)

‣ 多くの機器、言語、アプリケーションに実装済み ‣ オープンでシンプルな命名規則 ← URLの仕組みに似ている

Open Sound Control とは‣ Open Sound Control が実装された主な環境 ‣ サウンド系 ‣ Max/MSP ‣ Pd ‣ SuperCollider ‣ Chuck ‣ Csound ‣ Reactor ..etc. !

‣ ビジュアル系 ‣ Flash ( flosc ) ‣ Processing ‣ OpenFrameworks ‣ QuartzComposer ‣ vvvv ..etc.

‣ ハードウェアにも対応したものが出てきている ‣ Lemur ‣ monome ..etc.

Open Sound Control とは

‣ iPhoneやiPadからも!

Open Sound Control とは

OSCのプロトコル

OSC Message OSC Arguments

• 情報内容をラベリング • URLに同様の名前付けの規則

• 情報の本体 • いろいろな型を同時に含めることができる

‣ では、実際にOSCのプロトコルは、どんななっているのか? !!/trigger/inst/a 440 0.1 “hello”

‣ OSC Messageのアドレスパターン → URLのような階層構造

OSC Message

OSC の通信のしくみ

‣ 送信側:IPアドレスとportを指定

OSC の通信のしくみ

IP: 192.168.1.3 port: 57120

‣ 受信側:ポートをオープン

OSC の通信のしくみ

IP: 192.168.1.3 port: 57120

‣ 接続

OSC の通信のしくみ

IP: 192.168.1.3 port: 57120

‣ 送信側:情報を送信 ‣ 受信側:受信

OSC の通信のしくみ

/trigger/inst/a 440 0.1 “hello”

IP: 192.168.1.3 port: 57120

‣ 受信側:OSCのメッセージを解釈、アプリケーションに適用

OSC の通信のしくみ

/trigger/inst/a 440 0.1 “hello”

IP: 192.168.1.3 port: 57120

SuperColliderの構造 サーバー v.s. クライアント

‣ クライアント v.s. サーバー

SuperCollider application

SuperColliderの構造

sclang scsynth

language

Client Server

‣ クライアント v.s. サーバー

SuperCollider application

SuperColliderの構造

sclang scsynth

language

Client Server

OSCで連携

SuperColliderの構造‣ クライアント v.s. サーバー ‣ 今までのプログラムも、その裏ではOSCで連携していた!! !

‣ OSXのアクティビティーモニタで確認

SuperColliderの構造‣ クライアント v.s. サーバー ‣ サーバーとクライアントのOSC連携の詳細

SuperColliderでOSCを試す

SuperColliderでOSCを試す‣ これまでやってきた操作の背後でやりとりされていた、OSCメッセージをモニタしてみる !

‣ { 関数 }.play で再生 ‣ SynthDefで作成した楽器を再生 ‣ 楽器のパラメータを変更 …etc.

//サーバーのブート s = Server.default; s.boot; !//全てのOSCメッセージを表示する s.dumpOSC;

SuperColliderでOSCを試す‣ OSCをモニターする (dumpOSC)

//楽器の定義 SynthDef("test_osc", { var out; out = SinOsc.ar([220, 221],0,0.5); Out.ar(0, out); }).store;

SuperColliderでOSCを試す‣ OSCをモニターする (dumpOSC)

//サウンド再生開始 s.sendMsg("/s_new", "test_osc", x = s.nextNodeID, 1, 1); !//再生終了 s.sendMsg("/n_free", x); !//サーバーの終了 s.quit;

SuperColliderでOSCを試す‣ OSCをモニターする (dumpOSC)

SuperColliderでOSCを試す‣ 様々な操作をしたタイミングで、Post Windowにメッセージが表示されているはず

‣ どのようなメッセージが出ていたのか確認する

//SuperCollider側プログラム s.dumpOSC;

SuperColliderでOSCを試す‣ OSCをモニターする (dumpOSC)

//表示されたOSCメッセージ [ "/dumpOSC", 1 ]

//楽器の定義 SynthDef("test_osc", { var out; out = SinOsc.ar([220, 221],0,0.5); Out.ar(0, out); }).store;

SuperColliderでOSCを試す‣ OSCをモニターする (dumpOSC)

//表示されたOSCメッセージ [ "/d_recv", DATA[244], 0 ]

//サウンド再生開始 s.sendMsg("/s_new", "test_osc", x = s.nextNodeID, 1, 1);

SuperColliderでOSCを試す‣ OSCをモニターする (dumpOSC)

//表示されたOSCメッセージ [ "/s_new", "test_osc", 1000, 1, 1 ]

//再生終了 s.sendMsg("/n_free", x);

SuperColliderでOSCを試す‣ OSCをモニターする (dumpOSC)

//表示されたOSCメッセージ [ "/n_free", 1000 ]

//サーバーの終了 s.quit;

SuperColliderでOSCを試す‣ OSCをモニターする (dumpOSC)

//表示されたOSCメッセージ [ "/quit", ]

外部アプリから、SuperColliderを操作する PdでSuperColliderを操作

PdでSuperColliderを操作‣ dumpOSCで表示されたOSCメッセージを、そのまま外部のプログラムから送信すると、同じようにコントロールできる

‣ 試しに、PdからOSCを送出して、SuperColliderを動かす !

‣ SuperColliderのOSCの受信ポート: 57120 ‣ sclangからscsynthが受信するポート: 57110

PdでSuperColliderを操作‣ 接続の詳細

SC lang

ip : 任意のものを port:57120

SC synth

ip : 127.0.0.1 port:57110

SC言語 SC音響合成

SuperCollider

Pd

PdでSuperColliderを操作‣ Pdテストパッチ ‣ 上から順番にクリック、音が再生されるはず

//別の楽器 SynthDef("perc", { arg freq, dur; var out, env; env = Env.perc(0.01, dur, 0.2); out = SinOsc.ar(freq,0,0.5) * EnvGen.kr(env, doneAction:2); out = Pan2.ar(out, Rand(-1.0, 1.0)); Out.ar(0, out); }).store;

PdでSuperColliderを操作‣ もう少し複雑な例

PdでSuperColliderを操作‣ Pd側パッチ ‣ metroを使用して、連続してs_newを送出

Recommended