iOSでVVOSC

OSC (Open Sound Control) は伝統的(笑)にOSC-Kitを使ってたけど、これは本家でも古いと言われるコードなので、最近はVVOSCを使うことが多い。このVVOSCは、vvopensourceなるオープン・ソース・フレームワークの一部で、Objective-Cインターフェースでキレイにデザインされてて、機能も申し分ない。サンプルとして提供されているOSCTestAppを見れば、何をサポートしているか一目瞭然。デベロッパでなくてもOSCの送受信チェックに便利だから、Downloadsからビルド済みのアプリをダウンロードね。

ただし、VVOSCはOS Xがメイン・ターゲットらしく、サポートされているとは言え、iOSではイマイチ。これまで何とか修正していたけど、iOS 5 & Xcode 4.2になって再びビルドが通らない。そこで、本来推奨されているスタティック・ライブラリではなく、ソースをプロジェクトに取り込んだのが以下の手順。

(1) ターミナルを開き、ソースをsvnで入手。Xcodeのレポジトリに登録してチェックアウトしてもOK。

(2) ソースからVVOSCとVVBasicのフォルダをプロジェクトのフォルダにコピー
 
(以下、コピーしたフォルダでの作業で、OS X関連などのファイルを削除する)

(3) VVOSCフォルダからAppSrcとDoxyfileを削除

(4) VVBasicsフォルダからDoxyfileとInfo.plistを削除

(5) VVBasicsフォルダのsrcフォルダから VVCrashReporter〜.〜 VVCURLDL.〜 VVSprite〜.〜 を削除

(ここからはXcodeでの作業)

(6) VVOSCフォルダとVVBasicフォルダをプロジェクトに追加

(7) プロジェクトのBuild SettingsのApple LLVM compiler 3.0 – LanguageのOther C Flagsに -DIPHONE を追加

(8) ビルドしてエラーの出る箇所を修正
 #import <VVBasics/〜.h> を #import “〜.h” に修正
 OSCStringAdditions.h に #import “MutLockDict.h” を追加

ビルドが通れば、VVOSCを利用してOSC通信を行うのは簡単。

まずはヘッダをインポート。

#import "VVOSC.h"

そしてOSCマネージャを作って、デリゲートを指定。

OSCManager *manager = [[OSCManager alloc] init];
manager.delegate = self;

出力ポートを作って送信。

OSCOutPort *outPort = [manager createNewOutputToAddress:@"127.0.0.1" atPort:1234];
	
OSCMessage *message = [OSCMessage createWithAddress:@"/test"];
[message addInt:100];
[outPort sendThisPacket:[OSCPacket createWithContent:message]];

入力ポートは作るだけ。

OSCInPort *inPort = [manager createNewInputForPort:1234];

実際に受信するとデリゲートが呼ばれる。

- (void) receivedOSCMessage:(OSCMessage *)m
{	
    NSString *address = m.address;
    OSCValue *value = m.value;
	
    if ([address isEqualToString:@"/test"])
        NSLog(@"%d", value.intValue);
}

はい、おしまい。

【追記】以前に比較したように、VVOSCは処理速度がやや劣っている。これは現在のバージョンでは改善された様子だけど、タイミングがシビアな用途には向かない場合があるかも。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA