oscによるソフトウェア連携
DESCRIPTION
OSCの基本的な使い方。openFrameworksワークショップ at 八王子セミナーハウスTRANSCRIPT
OSCによるソフトウェア連携
2つ以上のソフトウェアが連携
連携の利点
• 得意なところを分ける
→ openFrameworkが映像/解析
→ Maxが音
• コントローラーと受け手側
→ クライアントとサーバー
→ 便利な方法でパラメータを動的に
どうやるの
OSCを使おう!
OSC
• Open Sound Control
• CNMATが開発した通信プロトコル
→ http://cnmat.berkeley.edu/
• MIDIに変わる方式
→ 電子楽器のコントロール
→ 便利過ぎてウケる
→ ソフトウェア連携のド定番に
色々な環境で
• openFrameworks
• Max6
• Processing
• Pure data
• VDMX
• vvvv
• node.js
無線でももちろん
• iPhoneとかでも使えます
→ ネイティブだとvvosc
→ iOS版のopenFrameworksでも
→ アプリではTouch OSCなど
OSC=通信プロトコル
• ネットワーク通信のルール
• TCP/IPとかUDP
TCP/IP
• 相手に届いたか確かめる
→ 相手から届いたよ、って返事が来る
→ 届かなかったら再送
• データが欠けない
• 遅い
→ ネトゲ等で使われる
UDP
• 一方的に送りつける
→ 相手に確認しない
• 速い
• データが欠けるかも
→ リアルタイムで何かするのに有効
→ OSCもUDP利用が多い
openFrameworksでの利用
• ofxOscを使う
ofxOscの注意点
• Project Generatorで入れるのを忘れる
→ 辛みの時間がやってくる
ofxOscの注意点
• そのままaddonsに突っ込むとパスでエラー
ofxOscの注意点
• そのままaddonsに突っ込むとパスでエラー
ofxOscの注意点
• 手で通すの辛み
楽な方法
• OFPluginを使う (Xcode専用)
• https://github.com/admsyn/OFPlugin
→ oFのaddonをサクッと追加
→ 詳しくはリンク先で
書いてみましょう
通信先を指定
• IPアドレスとPort番号
• IPアドレス
→ ネットワーク上での番地
→ 外線番号
• Port番号
→ ソフトウェアの番地
→ 内線番号
→ 基本的に被っちゃダメ!
localhost
• コンピュータ内部で通信しますよ
• localhost
• 127.0.0.1
→ 同じ意味
他のPCに送る場合• 相手のIPアドレスを確認
OSCのプロトコル
• URLライクな記述
• /sound/param 440 0.1 “mod”
• 2つのパート
→ OSCメッセージ
→ OSC引数
OSCメッセージ
• OSCの情報をラベリング
• 階層構造
• /sound/a/freq
• /sound/b/freq
• わかりやすいように自分でデザイン
OSC引数(arg)
• 実際の値
• int32, float, stringなど様々な型
• 一度に複数送信可
• /sound/param 440 0.1 “mod”
型を間違えない
• 例 : m.getArgAsInt32(0)にfloatを突っ込む
→ 警告が出る
→ 凄い数突っ込むと警告でフリーズ
• m.getArgType()を使って型チェックする
• IDEから走らせない
ネットワーク越しでの注意点
• 複数のOSCメッセージを同時に送ると危険
→ 欠けることがある
• 一つにまとめる
• ちょっとズラす
他のソフトウェアと連携させる
Pure Data
• フリー!
• ビジュアルプログラミング環境
• 音楽用ソフト
• GUIを作りやすい
Pure Data超速入門
• オブジェクトと呼ばれる箱
→ 色々な機能
• 結線 = パッチング
• ビジュアルプログラミング環境
• 作ったプログラムをパッチと呼ぶ
新規パッチ
配置して繋ぐ
オブジェクト
• ~がついているのはオーディオ関係
• osc~はオシレータ(oscとややこしい)
• dac~は音の出力
打ち間違えると
• 赤の点線に
• pdウィンドウにエラーメッセージ
音を出してみる
• DSPオンかDSPのチェックボックス
• 音量注意
ナンバーボックス
• マウスでグリグリ
• Shiftを押しながらで小数点単位で動く
編集モード
• パッチング時とプレイ時で切り替え
ナンバーボックス
• マウスでグリグリ
• Shiftを押しながらで小数点単位で動く
メッセージ
• 文字列を扱う
• $1と書くと変数になる
printオブジェクト
• メッセージの内容をデバッグ
• ~がついてないので音のオブジェクトではない
2つ以上の変数
• $1,$2…と変数の数は増やせる
• bondoで2つのナンバーを同期
• packでまとめてからメッセージに繋ぐ
まとめ
• ~系オブジェクトで音
• ナンバーボックスで数字をグリグリ
• メッセージ + $1
→ OSCメッセージの形式に
→ OSCのオブジェクトに突っ込む
Pure DataでOSCを受ける
• dumpOSC = ofxOscReceiver
• ポート番号を指定
OSCメッセージを処理
• OSCRoute → m.getAddress()
• unpack → m.getArgAsFloat(0)
→ このケースの対応関係
Pure DataでOSCを送る
• sendOSC → ofxOscSender
• メッセージでipアドレスとポート番号を指定
Pure DataでOSCを送る
• loadbang
→ パッチ読み込み時に実行
→ 読み込み時に処理したいものに繋ぐ
オーディオと連動
• adc~でマイク入力を取得
• peakamp~で音量を数字に
• * は乗算
簡単なオーディオビジュアル
• pdでoFのパラメータをいじる
• oFで映像生成と解析
• 結果でpdの音を変える