openFrameworks で OSC (Open Sound Control) を使うためのアドオン、ofxOsc を使用してアプリ間連携を行う方法のメモ。
送信側の実装
ホストアドレスとポートの定義
ローカルにあるアプリ同士連携させる場合はlocalhostでOK。
#define HOST "localhost" #define PORT 12345
ネットワーク上にあるアプリ同士であれば、IPアドレスを指定する。
#define HOST "192.168.x.x" #define PORT 8000
メンバ変数
ofxOscSender sender;
セットアップ
sender.setup( HOST, PORT );
メッセージ送信
ofxOscMessage m; m.setAddress( "/mouse/button" ); m.addStringArg( "down" ); sender.sendMessage( m );
受信側の実装
ポートの定義
送信側の定義と合わせる
#define PORT 12345
メンバ変数
ofxOscReceiver receiver;
セットアップ
receiver.setup(PORT);
メッセージ受信
while(receiver.hasWaitingMessages()) { ofxOscMessage m; receiver.getNextMessage(&m); if(m.getAddress() == "/mouse/button"){ mouseButtonState = m.getArgAsString(0); } }
サンプルを試す
oFに付属しているサンプルを使用してみる。ごちゃごちゃ書いてるけど、要は Sender側にReceiver側のIPアドレスを定義するだけ。
Macアプリ同士
localhostでうまく通信できた。
iOSアプリ(Sender)、Macアプリ(Receiver)
- Sender(iOS)側でMacのIPアドレスとポート8000指定
- Receiver(Mac)側でポート8000指定
Macアプリ(Sender)、iOSアプリ(Receiver)
- iOSデバイス(iPhone)の設定アプリから、 [Wi-Fi] -> iボタンタップでIPアドレス確認
- Sender(Mac)側でiOSデバイスのIPアドレスとポート8000指定
- Receiver(iOS)側でポート8000指定
iOSアプリ同士
- Receiver側のiOSデバイス(iPhone)の設定アプリから、 [Wi-Fi] -> iボタンタップでIPアドレス確認
- Sender(iOS)側でiOSデバイスのIPアドレスとポート8000指定
- Receiver(iOS)側でポート8000指定
(oscSenderExample)
(oscReceiverExample)