oscで通信を行うプログラムをAS3で行わないといけなくなり・・・調べてみました。
まずはここを見てほしい。
http://asus4.hatenablog.com/entry/20101029/1288334274
調べてみたところ上のサイトに行き着いたのですが・・・
そこによればTuioっというものを使えばAS3でもoscが使えるとのことでした。
まだ使ってみてるさいちゅうですが・・・あれ?なぜ動かん・・・何のerrorだ・・・というのをちょこちょこあったので、メモ代わりに書かせていただきやす。
(勘違いはすいません)
まず・・・リンクにある場所からDLしに行ったらバージョン0.5でした・・・
探し方が悪かったのですね。
こちらのサイト(http://bubblebird.at/tuioflash/)からDLしに行ったらバージョン0.8がありました。
DLは、(https://code.google.com/p/tuio-as3/downloads/list)の tuio_as3_v_0_8.zip というものをDLすることで出来ました。
出来ましたというのも0.5では、参考にしているサイトさんで使っているいくつかのソースが入っていなかったためです。
// ポート3333で、OSCを受信
var connectorIn:UDPConnector = new UDPConnector("127.0.0.1", 3333, true);
// ポート3334から、OSC送信
var connectorOut:UDPConnector = new UDPConnector("127.0.0.1", 3334, true);
var autoStart:Boolean = true;
// マネージャー作成
_oscManager = new OSCManager(connectorIn, connectorOut, autoStart);
// OSCのリスナーを設定
_oscManager.addMsgListener(this);
tuioのソースを見てみたところ、ですがまずこれ まず「"127.0.0.1"」はIPアドレスだと思います、「3333」はポート番号のようです。
次の「true」がよくわからなかったので見てみました。
public function UDPConnector(host:String = "127.0.0.1", port:int = 3333, bind:Boolean = true)
{
this.listeners = new Array();
this.connection = new OSCDatagramSocket(host, port, bind);
this.connection.addEventListener(OSCEvent.OSC_DATA,receiveOscData);
}
public function OSCDatagramSocket(host:String = "127.0.0.1", port:int = 3333, bind:Boolean = true)
{
configureListeners();
if(bind) this.bind(port, host);
else this.connect(host, port);
receive();
}
受信と送信両方でbindするのがどうしてなのかわかりませんが、「ServerSocket」と言うものを使用していた時にServerの方で「bind」を行って、Socketの方で「connect」を行っていました。
呼び出してる説明文ではその時のものと同じものだったようなので、送信側(Socket)は「false」とします。
受信側(Server)は「true」で、使用してみました。
このへんの解釈がびみょいので反対かもですがw
このままマネージャーの作成まで読んでみます。 この、マネージャーさんがこのosc通信する時に送信するために必要になるようです。
このマネージャーの宣言を確認してみると
public function OSCManager(connectorIn:IOSCConnector = null, connectorOut:IOSCConnector = null, autoStart:Boolean = true) {
this.msgListener = new Array();
this.oscMethods = new Array();
this._connectorIn = connectorIn;
if(this._connectorIn != null) this._connectorIn.addListener(this);
this._connectorOut = connectorOut;
this.running = autoStart;
}
最初のArray達はMessageを残しておくためのものでしょうか?また必要な関数で出てきたら詳しく見てみますが・・・
何より気になるのは「autoStart」さんなのでちょっとだけ動きを追ってみます。
/**
* If called the OSCManager will start to process incoming OSCPackets.
*/
public function start():void {
this.running = true;
}
/**
* If called the OSCManager will stop to process incoming OSCPackets.
*/
public function stop():void {
this.running = false;
}
public function acceptOSCPacket(oscPacket:OSCPacket):void {
if (running) {
this._currentPacket = oscPacket;
this.distributeOSCPacket(this._currentPacket);
oscPacket = null;
}
}
なんか追っかけてみたら、OSC_DATAイベントで呼び出すものみたいです。
このイベント自体は調べるのちょっと疲れたので、あれですが多分受信系のイベントでしょうか?
受信を行うかどうか?ということでしょうか。
取り敢えず、「autoStart」はその名の通り初期設定で開始するかどうかのようでした。
あぁ日本語のコメントアウトつけていきたい・・・oh
_