从Processing接收AS3中的OSC消息

问题描述 投票:0回答:1

基本上,我在处理中有代码,它使用 OSC 从从 xbee 模块接收的心率浮动发送消息。代码如下:

 OscMessage myMessage = new OscMessage("/straps");
 myMessage.add(oscHeart[0]); 
 oscP5.send(myMessage, myRemoteLocation); 

现在我已经使用以下代码测试了在处理本身中接收消息:

void oscEvent(OscMessage theOscMessage) {
println("### received an osc message /test with typetag ifs.");
if(theOscMessage.checkAddrPattern("/straps")==true) {
if(theOscMessage.checkTypetag("f")) {
 
float firstValue = theOscMessage.get(0).floatValue();
  
println(" values: "+firstValue);

而且它有效。它接收值并将其显示在处理终端窗口中。然而,我试图将相同的消息发送到在 ActionScript 3.0 上运行的 Flash 文件,但我很难弄清楚它。我研究过 TUIO 和 FLOSC,但不知道它们是如何工作的。有谁知道我如何接收上面的消息,但在 ActionScript 3.0 中。

actionscript-3 flash processing osc
1个回答
1
投票

我在一些项目中使用了TUIO-AS3的UDPConnector与as3进行了一些最小的OSC交互,并且没有任何问题。 这是一个最小的片段来说明我所做的事情:

package
{
    import flash.display.Sprite;
    import flash.utils.getDefinitionByName;

    import org.tuio.connectors.UDPConnector;
    import org.tuio.osc.*;

    public class BasicOSC extends Sprite implements IOSCConnectorListener
    {
        private var oscSocket:UDPConnector;
        private const OSCSERVER:String = "127.0.0.1";
        private const PORT:int = 8082;

        public function BasicOSC()
        {
            try{    
                oscSocket = new UDPConnector(OSCSERVER,PORT);
                oscSocket.addListener(this);
                trace(this,"OSC ready");
            }catch(e:Error){    trace(e.getStackTrace());   }   
        }
        public function acceptOSCPacket(oscPacket:OSCPacket):void{
            //handle OSC here
            var message:OSCMessage = oscPacket as OSCMessage;
            trace("message from :",message.address,"at",new Date());
            for(var i:int = 0; i < message.arguments.length; i++)
                trace("\targs["+i+"]",message.arguments[i]);
        }
    }
}

更新: 请注意,我将 OSCPacket 转换为 OSCMessage,它在幕后处理解析并轻松使地址和参数可用,这就是您所追求的。

作为参考,这里是我用来模拟您的设置的最小处理草图:

import oscP5.*;
import netP5.*;

OscP5 osc;
NetAddress where;

void setup() {
  frameRate(25);text("click to send\nOSC",5,50);

  osc = new OscP5(this,12000);
  where = new NetAddress("127.0.0.1",8082);
}
void draw() {}
void mousePressed() {
  OscMessage what = new OscMessage("/straps");
  what.add(193.4509887695313);
  osc.send(what, where); 
}

HTH

PreventFires

City Monitor

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.