【AS3】tuioを使ってみた。【osc】

アバター
パコネコ
記事: 139
登録日時: 14年前
住所: 大阪

【AS3】tuioを使ってみた。【osc】

投稿記事 by パコネコ » 10年前

お久しぶりです。


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では、参考にしているサイトさんで使っているいくつかのソースが入っていなかったためです。

CODE:

		// ポート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のソースを見てみたところ、ですがまずこれ

CODE:

 new UDPConnector("127.0.0.1", 3333, true);
まず「"127.0.0.1"」はIPアドレスだと思います、「3333」はポート番号のようです。
次の「true」がよくわからなかったので見てみました。

CODE:

		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);
		}
あらら、そのまま「OSCDatagramSocket」というモノを作成しているようです。

CODE:

		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」を行うかどうかのフラグだったようですね。
受信と送信両方でbindするのがどうしてなのかわかりませんが、「ServerSocket」と言うものを使用していた時にServerの方で「bind」を行って、Socketの方で「connect」を行っていました。
呼び出してる説明文ではその時のものと同じものだったようなので、送信側(Socket)は「false」とします。
受信側(Server)は「true」で、使用してみました。
このへんの解釈がびみょいので反対かもですがw

このままマネージャーの作成まで読んでみます。

CODE:

		// マネージャー作成
		_oscManager = new OSCManager(connectorIn, connectorOut, autoStart);
この、マネージャーさんがこのosc通信する時に送信するために必要になるようです。

このマネージャーの宣言を確認してみると

CODE:

		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」さんなのでちょっとだけ動きを追ってみます。

CODE:

		
		/**
		 * 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;
			}
		}
ほぅ、この「running」は「acceptOSCPacket」のためのフラグで行うかどうかで通信を止めたりできるようですね。(通信かはまだ調べてないけどパケットって書いてるし・・・)
なんか追っかけてみたら、OSC_DATAイベントで呼び出すものみたいです。
このイベント自体は調べるのちょっと疲れたので、あれですが多分受信系のイベントでしょうか?
受信を行うかどうか?ということでしょうか。
取り敢えず、「autoStart」はその名の通り初期設定で開始するかどうかのようでした。
あぁ日本語のコメントアウトつけていきたい・・・oh



_

コメントはまだありません。