狠狠撸
Submit Search
Ssaw08 0617
?
3 likes
?
1,726 views
Atsushi Tadokoro
Follow
1 of 37
Download now
Download to read offline
More Related Content
Ssaw08 0617
1.
SSAW08 第8回 OpenSoundControlの活用 2008年6月17日
2.
今日の内容 ? ネットワークを用いた作品を制作してみる ? OSCについて ?
Max/MSP同士のコミュニケーション ? OpenSoundControl ? udpsend, udpreceive ? Max/MSPとFlashのコミュニケーション ? FlashのXMLSocket通信 ? ?ashserver ? Max/MSPとProcessingのコミュニケーション ? P5osc
3.
OSCとは ? カルフォルニア州立大学バークレー校のCNMAT(Center for
New Music and Audio Technorogies)を中心に開発 ? コンピュータ音楽のための通信プロトコル(規則) ? ポストMIDI! ? 詳しくは、OSCのページを参照 ? http://opensoundcontrol.org/
4.
MIDIの限界 ? バンド幅の限界
? 複雑な音楽情報を制御するには、通信帯域が狭すぎる ? (31,250 bit/sec程度) ? データの遅延も無視できない程生じてしまう ? 相互接続の限界 ? 短方向の通信しかできないので通信の方向ごとにケーブルが必要(IN, OUT, THRU) ? チャンネル数にも制限がある ? 音楽記述の限界 ? 平均率の楽譜表現に偏ったプロトコル ? 音色を記述することができない ? 連続する値の変化を記述できない
5.
OSCの特徴 ? 開放的?動的なネーミング手法
? URL(= Uniform Resorce Locator)とよく似た考え方 ? 数値、記号双方を通信できる ? 高度なパターンマッチング ? 高解像度の時間制御 ? 帯域幅の制限はしていない ? 多くのソフトウェア、プログラミング言語に実装済み
6.
OSI参照モデル ? コンピュータの持つべき通信機能を階層構造に分割したモデル ? 通信機能を以下の7階層に分割する
? 第1層 - 物理層:電気信号の変換等 ? 第2層 - データリンク層:通信機器間の直接的な信号の受け渡し ? 第3層 - ネットワーク層:ネットワークにおいて通信経路の選択 ? 第4層 - トランスポート層:ネットワークにおける通信管理 ? 第5層 - セッション層:通信プログラム間の通信の開始から終了までの 手順 ? 第6層 - プレゼンテーション層:データの表現方法 ? 第7層 - アプリケーション層:ユーザーが操作するインターフェース
7.
OSI参照モデル 第7層 アプリケーション層 第6層
OSC http POP ssh ftp ftp プレゼンテーション層 第5層 セッション層 第4層 TCP UDP トランスポート層 第3層 IP ネットワーク層 第2層 データ?リンク層 Ethernet 第1層 物理層
8.
Max/MSPへOSCをインストール ? CNMATのダウンロードページからMax/MSPのバージョンにあわせて
OSCのバージョンが異るので注意! ? http://cnmat.berkeley.edu/downloads ? Max4.6以降 ? Mac OSX Mach-OバージョンのOpenSoundControlとOSC-routeを ダウンロードする ? Max4.5 ? Mac OSX CFMバージョンのOpenSoundControlとOSC-routeをダウ ンロードする ? Max4.3以前 ? 古いバージョンのOpenSoundControlとotudp (UDPの送受信環境)が 必要 ? http://archive.cnmat.berkeley.edu/MAX/OS9.html ? OpenSoundControl and UDP objects release 2.4をダウンロード
9.
OSCメッセージの送受信 ? OSCメッセージの送信
10.
OSCメッセージの送受信 ? OSCの送信
? Max/MSP4.3以前のバージョンを使用している場合には送信部分を以 下のように書き換える (これ以降のサンプルに関しても同様に)
11.
OSCメッセージの送受信 ? OSCメッセージの受信
12.
OSCメッセージの送受信 ? OSCの受信
? Max/MSP4.3以前のバージョンを使用している場合には受信部分を以 下のように書き換える (これ以降のサンプルに関しても同様に)
13.
OSCメッセージの送受信 ? 送受信2つのパッチを両方開いて、メッセージがやりとりされていることを
確認 ? うまくいったら、近所のマシーン同士でLANを介してOSCのメッセージを やりとりしてみる ? ネットワーク環境設定で、周囲のマシンのIPアドレスを調べる ? 任意のポート番号を設定して、先程調べたIPアドレスを指定して、OSC のメッセージをお互いに送受信してみる
14.
IPとポート番号 ? IPとは
? 127.0.0.1:自分自身のアドレス(localhost)のこと ? システム環境設定のネットワーク設定を参照して、近くのマシンのIPを 調べ、ネットワーク越しにメッセージをやりとりしてみる ? ポート番号とは ? 複数の相手と同時に接続を行なうためにIPアドレスの下に設けられたサ ブ(補助)アドレス ? 0から65535までの数字が使われる
15.
udpsendとudpreceive ? OSCメッセージの仕組み
? URI (Uniform Resource Identi?er)と同様に / で区切ることで階層構 造を表現している ? さっきのサンプルの場合 /message /control /number /level /bang
16.
Sinwave Quartetto! ?
OSCを用いてネットワーク越しに4人でアンサンブルするパッチを作って みる ? Sinwave Quartetto! ? それぞれのパートは、sin波のオシレータにテープディレイを付加したもの ? 操作できるパラメータ ? 周波数(freq)、音量(amp)、ディレイタイム(delay)、演奏のタイミング (bang)
17.
Sinwave Quartetto!
/osc1 /freq /amp /delay /bang /osc2 /freq /amp /delay /bang /osc3 /freq /amp /delay /bang /osc4 /freq /amp /delay /bang
18.
Sinwave Quartetto! ?
クライアント(4种类)
19.
Sinwave Quartetto! ?
惭补虫4.3以前の场合はこちら
20.
Sinwave Quartetto! ?
サーバー
21.
Sinwave Quartetto! ?
サーバー (Max4.3以前の場合)
22.
異なるアプリケーション間の接続 ? ネットワークを活用することで、異なるアプリケーション同士を接続する
ことが可能となる ? 例えば… ? Processingのモーショングライックに合わせて、Max/MSPで音響合 成する ? Processingでアルゴリズミックに形態を生成して、その形態に対応し た音響をMax/MSPで生成する ? 音響合成の部分はMax/MSPの代わりにSuperColliderやChucKにする ことも可能
23.
Max/MSPとProcessingの接続 ? oscP5を利用する
? http://www.sojamo.de/libraries/oscP5/ ? ProcessingにOSCを喋らせるためのライブラリー
24.
Max/MSPとProcessingの接続例 (1) ? Max/MSP
←→ P5 簡単なメッセージの送受信の実験 ? Max/MSP側
25.
Max/MSPとProcessingの接続例 (1) /* Processing側
*/ import oscP5.*; import netP5.*; OscP5 oscP5; NetAddress myRemoteLocation; void setup() { size(400,400); frameRate(25); /* OSCをスタートし、ポート12000のOSCメッセージの受信を監視 */ oscP5 = new OscP5(this,12000); /* OSC送信のために、ip:127.0.0.1 ポート:12000のネットワークアドレスを準備 */ myRemoteLocation = new NetAddress("127.0.0.1",12000); } void draw() { background(0); }
26.
Max/MSPとProcessingの接続例 (1) /* マウスクリックでOSC送信
*/ void mousePressed() { OscMessage myMessage = new OscMessage("/test"); myMessage.add(123); oscP5.send(myMessage, myRemoteLocation); } /* OSCの受信を監視するイベントリスナー */ void oscEvent(OscMessage theOscMessage) { if(theOscMessage.checkAddrPattern("/test")==true) { if(theOscMessage.checkTypetag("i")) { int value = theOscMessage.get(0).intValue(); println(" values: "+value); return; } } }
27.
Max/MSPとProcessingの接続例 (2) ? Max/MSPをProcessingへの情報入力用のインタフェイスとして用いる
? 指定したサイズで丸か四角形をランダムに描く ? 送信側:Max/MSP
28.
Max/MSPとProcessingの接続例 (2) /* 受信側:Processing
*/ import oscP5.*; import netP5.*; /* OscP5オブジェクト */ OscP5 oscP5; void setup() { // 画面の初期設定 size(400,400); background(0); noStroke(); smooth(); frameRate(30); // OscP5をインスタンス化 (初期化) oscP5 = new OscP5(this, 12000); } /* drawの処理が何もなくても記述する */ void draw(){ }
29.
Max/MSPとProcessingの接続例 (2) /* OSCのメッセージを受信された際に起動されるイベントハンドラ
*/ void oscEvent(OscMessage msg){ // msgにOSCのメッセージを格納 // もしOSCのアドレスパターンが "/maru" だったら if(msg.checkAddrPattern("/maru") == true){ // 値を取り出してサイズとする int value = msg.get(0).intValue(); // ランダムに色を塗る fill(random(255), random(255), random(255), 100); // 丸を描く ellipse(random(width), random(height), value, value); }
30.
Max/MSPとProcessingの接続例 (2)
// もしOSCのアドレスパターンが "/sikaku" だったら if(msg.checkAddrPattern("/sikaku") == true){ // 値を取り出してサイズとする int value = msg.get(0).intValue(); // ランダムに色を塗る fill(random(255), random(255), random(255), 100); // 四角形を描く rectMode(CENTER); rect(random(width), random(height), value, value); } }
31.
Max/MSPとProcessingの接続例 (2) ? 実行結果
32.
Max/MSPとProcessingの接続例 (3) ? Processing上での壁に跳ね返るボールの位置にあわせて
Max/MSPでSin 波を合成してみる
33.
Max/MSPとProcessingの接続例 (3) ? 壁に当ったときの位置によって周波数を決める
? ボールは8つ ? OSCのメッセージの構成 ? /osc0 ? /osc1 ? /osc2 ? /osc3 ? /osc4 ? /osc5 ? /osc6 ? /osc7
34.
Max/MSPとProcessingの接続例 (3) ? 受信:Max/MSP側
35.
Max/MSPとProcessingの接続例 (3) /* 送信側
*/ import oscP5.*; import netP5.*; OscP5 oscP5; NetAddress myRemoteLocation; int MAX = 8; Ball[] myBall = new Ball[MAX]; int sendToPort; String host; String oscP5event; void setup() { size(400,400); frameRate(30); oscP5 = new OscP5(this, 12000); myRemoteLocation = new NetAddress("127.0.0.1",12000); for (int i = 0; i < MAX; i++) { myBall[i] = new Ball(i, random(-10,10), random(-10, 10)); } smooth(); }
36.
Max/MSPとProcessingの接続例 (3)
void draw() { background(0); for (int i = 0; i < MAX; i++) { myBall[i].move(); } } class Ball { int num; float xspeed; float yspeed; float xpos; float ypos; Ball(int n, float xs, float ys){ num = n; xspeed = xs; yspeed = ys; xpos = random(width); ypos = random(height); ellipseMode(CENTER); noStroke(); fill(128); }
37.
Max/MSPとProcessingの接続例 (3)
void move(){ xpos += xspeed; ypos += yspeed; ellipse(xpos, ypos, 10, 10); if(xpos>width || xpos < 0){ OscMessage myMessage = new OscMessage("/ball"+num); myMessage.add(ypos); oscP5.send(myMessage, myRemoteLocation); xspeed *= -1; } if(ypos>height || ypos < 0){ OscMessage myMessage = new OscMessage("/ball"+num); myMessage.add(xpos); oscP5.send(myMessage, myRemoteLocation); yspeed *= -1; } } }
Download