Your SlideShare is downloading. ×
Ssaw08 0617
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Ssaw08 0617

2,232
views

Published on


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

No Downloads
Views
Total Views
2,232
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
35
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. SSAW08 第8回OpenSoundControlの活用2008年6月17日
  • 2. 今日の内容• ネットワークを用いた作品を制作してみる• OSCについて• Max/MSP同士のコミュニケーション • OpenSoundControl • udpsend, udpreceive• Max/MSPとFlashのコミュニケーション • FlashのXMLSocket通信 • flashserver• 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 Identifier)と同様に / で区切ることで階層構 造を表現している • さっきのサンプルの場合 /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! • Max4.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; } }}