iPhoneとopenFrameworksをOSCで接続する

夏 夏です。バイトの片山です。最近ブリグリ(the brilliant green)にハマってます。 今回はopenFrameworksとiPhoneとをOSCで繋いでみたいと思います。 導入篇 必要なもの ・openFrameworks ・Mrmr すること ・openFrameworksを使えるようにする ・MrmrをiPhoneにインストールする 以上です。どちらも導入はとても簡単なので今回は割愛します。 ちなみに今回は無料という理由だけでとりあえずMrmrを使っていますが、その他にもスマホをOSCコントローラーにするためのアプリはTouchOSC等色々あります。 実践編 Mrmrの設定 iPhoneにMrmrのインストールが終わったらとりあえずMrmrを立ち上げます こんな感じになるはずなので赤枠内のAdd a Serverをタップします。 すると になりますのでAdd server manuallyをタップします。 サーバー側のipアドレス(この場合は連携するPCのipアドレス)を入力します。 ipアドレスはifconfigとかで適当に調べます。 からConnectします。 次にPrefsからPort番号を確認します。私の場合はデフォルトで1337番ポートに設定されていたのでそのまま使うことにしました。 Mrmr側の設定はひとまずここで一旦区切ります。 openFrameworksでOSCを受信する準備をする openFrameworksの細かい使い方については(面倒くさいので)割愛しますが、プロジェクトを作成するときに必ずAddonsにてofxOscをインポートするように気をつけましょう。これがないとOSCが使えません。 あとはコードを書くだけです。やっつけ仕事なので適当なのは見逃して下さい。今回は加速度センサーを使う体で書きました。 ofApp.h #pragma once #include “ofMain.h” #include “ofxOsc.h” // うっかりここを忘れてOSCが使えないことが多々あるので気をつける #define SERVER_PORT 1337 // OSCを受信するポート番号を設定 class ofApp : public ofBaseApp{ public: void setup(); void update(); void draw(); void keyPressed(int key); void keyReleased(int key); void mouseMoved(int x, int y ); void mouseDragged(int x, int y, int button); void mousePressed(int x, int y, int button); void mouseReleased(int x, int y, int button); void mouseEntered(int x, int y); void mouseExited(int x, int y); void windowResized(int w, int h); void dragEvent(ofDragInfo dragInfo); void gotMessage(ofMessage msg); void dumpOSC(ofxOscMessage m); float acc_x; float acc_y; float acc_z; private: ofxOscReceiver receiver; }; ofApp.cpp #include “ofApp.h” //————————————————————– void ofApp::setup(){ ofSetFrameRate(30);  ofSetCircleResolution(32); ofSetBackgroundAuto(false); ofEnableAlphaBlending(); receiver.setup(SERVER_PORT); ofBackground(0); //背景色を黒に設定 acc_x = 0; //初期化 acc_y = 0; acc_z = 0; } //————————————————————– void ofApp::update(){ while (receiver.hasWaitingMessages()) { ofxOscMessage m; receiver.getNextMessage(m); if(m.getAddress() == “/mrmr/accelerometerX/0/YKiPhone”){ // OSCのアドレス部はメッセージの種類やデバイスによって変わるので気をつける。事前にPuredataやMax/MSP等でOSCメッセージの中身を確認しておくと良いかも acc_x = m.getArgAsInt(0); //加速度センサー(X軸)の値を取得 } if (m.getAddress() == “/mrmr/accelerometerY/0/YKiPhone”) { acc_y = m.getArgAsInt(0); //加速度センサー(Y軸)の値を取得 } if (m.getAddress() == “/mrmr/accelerometerZ/0/YKiPhone”) { … Continue reading iPhoneとopenFrameworksをOSCで接続する