Esempio n. 1
0
//--------------------------------------------------------------
void DonutCop::handleControlMessage(const ofxOscMessage &m) {
     
  ofBuffer data   = m.getArgAsBlob(0);     
  _maxSprinkles    = m.getArgAsInt32(1);     
  _minSprinkles    = m.getArgAsInt32(2);
  _maxNewSprinkles = m.getArgAsInt32(3);
  _maxVelocity     = m.getArgAsFloat(4);
  _maxAcceleration = m.getArgAsFloat(5);

  // Calculate left and right IDs
  int val;
  int maxId = 0;
  leftId = 256;
  rightId = -1;
  for (int i = 0; i < data.size(); ++i) {
    val = (int)(data.getData()[i]);
    if (val > id && val < leftId) {
      leftId = val;
    }
    if (val < id && val > rightId) {
      rightId = val;
    }
    if (val > maxId) {
      maxId = val;
    }
  }
  if (leftId == 256) {
    leftId = 0;
  }
  if (rightId == -1) {
    rightId = maxId;
  }

  ofLogVerbose() << "My left ID is " << leftId << " and my right ID is " << rightId << ".";
}
bool tuioVisBase::handleMessage(ofxOscMessage m) {
	string address = m.getAddress();
	
	// special cases first:
	if (address=="/tuio/2dcur" && m.getNumArgs()==7 && m.getArgType(0)==OFXOSC_TYPE_STRING && m.getArgAsString(0)=="set") {
		tuioCursor tc;
		
		tc.s = m.getArgAsInt32(1);
		tc.x = m.getArgAsFloat(2);
		tc.y = m.getArgAsFloat(3);
		tc.dx = m.getArgAsFloat(4);
		tc.dy = m.getArgAsFloat(5);
		tc.m = m.getArgAsFloat(6);
		tc.age = 0;
		
		return cursorCallback(tc);
	}
	
	else if (address=="/tuio/2Dcur" && m.getNumArgs()==2 && m.getArgType(0)==OFXOSC_TYPE_STRING && m.getArgAsString(0)=="fseq") {
		return frameCallback(m.getArgAsInt32(1));
	}
	
	else if (linearCallbacks.find(address) != linearCallbacks.end() && m.getNumArgs()==1) {
		return linearCallback(address, m.getArgAsFloat(0));
	}
	
	else if (colorCallbacks.find(address) != colorCallbacks.end() && m.getNumArgs()==3) {
		return colorCallback(address, m.getArgAsFloat(0), m.getArgAsFloat(1), m.getArgAsFloat(2));
	}
	
	// message not handled:
	else return false;
}
Esempio n. 3
0
void Ableton::getDeviceList(ofxOscMessage &m)
{
    int numArgs = m.getNumArgs();
    int track = m.getArgAsInt32(0);
    
    if (tracks.count(track) == 0)
    {
        AbletonTrack *newTrack = new AbletonTrack("track "+ofToString(track), track, numScenes, &sender);
        tracks[track] = newTrack;
        newTrack->getControl()->setCollapsible(true);
        
        if (track == 0) {
            control.attachWidget(newTrack->getControl());
        }
        else {
            tracks[track-1]->getControl()->attachWidget(newTrack->getControl());
        }
    }
    
    for (int i = 1; i < numArgs; i+=2)
    {
        int device = m.getArgAsInt32(i);
        string name = m.getArgAsString(i+1);
        if (tracks[track]->getDevices().count(device) == 0)
        {
            AbletonDevice *newDevice = new AbletonDevice(name, track, device, &sender);
            tracks[track]->addDevice(device, newDevice);
        }
        requestDeviceParameters(track, device);
        requestDeviceParametersRange(track, device);
    }
}
///--------------------------------------------------------------
void AbletonManager::onTracksVolumeChanged(ofxOscMessage &m)
{
    /**
     * Response for track volume (amplitude) changes:
     * /live/track/meterblock
     * N triplets with:
     *   (int) track number
     *   (int) channel (0=left, 1=right)
     *   (float) volume (0..1)
     */

    int track, channel;
    float volume;

    int numArgs = m.getNumArgs();
    for (int i=0; i<numArgs; i+=3)
    {
        track = m.getArgAsInt32(i);
        channel = m.getArgAsInt32(i+1);
        volume = m.getArgAsFloat(i+2);

        if (channel == 1) continue; // Skip right channel messages
        if (track >= sceneNumObjects) continue; // Skip if this track index is larger than the number of objects in scene

        ofNotifyEvent(eventsVolumeChanged[track], volume, this);
    }
}
Esempio n. 5
0
void Ableton::getDeviceParametersRange(ofxOscMessage &m)
{
    int track = m.getArgAsInt32(0);
    int device = m.getArgAsInt32(1);
    if (tracks.count(track) != 0 && tracks[track]->getDevices().count(device) != 0) {
        tracks[track]->getDevices()[device]->getParameterRanges(m);
    }
}
static ofMultiTaction::Marker makeMarkerFromOSC(const ofxOscMessage &m)
{
    ofMultiTaction::Marker marker;
    marker.id = m.getArgAsInt32(0);
    marker.code = m.getArgAsInt32(1);
    marker.x = m.getArgAsFloat(2);
    marker.y = m.getArgAsFloat(3);
    marker.rotation = m.getArgAsFloat(3);
    return marker;
}
Esempio n. 7
0
void Ableton::getParameterUpdate(ofxOscMessage &m)
{
    int track = m.getArgAsInt32(0);
    int device = m.getArgAsInt32(1);
    int parameter = m.getArgAsInt32(2);
    if (tracks.count(track) != 0 &&
        tracks[track]->getDevices().count(device) != 0 &&
        tracks[track]->getDevices()[device]->getParameters().count(parameter))
    {
        tracks[track]->getDevices()[device]->getParameters()[parameter]->setValue(m.getArgAsFloat(3));
    }
}
Esempio n. 8
0
void Ableton::getNumTracks(ofxOscMessage &m)
{
    numTracks = m.getArgAsInt32(0);
    for (int t = 0; t < numTracks; t++) {
        requestDeviceList(t);
    }
}
//----------
void OscManager::oscReceiveProcessMessage(string address, ofxOscMessage &msg) {
    ParameterBase::Type type = inputTrackers[address]->getType();
    
    if      (type == ParameterBase::BOOL) {
        ((Parameter<bool> *) inputTrackers[address]->parameter)->set(msg.getArgAsInt32(0)==1);
    }
    else if (type == ParameterBase::STRING) {
        ((Parameter<string> *) inputTrackers[address]->parameter)->set(msg.getArgAsString(0));
    }
    else if (type == ParameterBase::INT) {
        ((Parameter<int> *) inputTrackers[address]->parameter)->set((int) msg.getArgAsFloat(0));
    }
    else if (type == ParameterBase::FLOAT) {
        ((Parameter<float> *) inputTrackers[address]->parameter)->set(msg.getArgAsFloat(0));
    }
    else if (type == ParameterBase::VEC2F) {
        ((Parameter<ofVec2f> *) inputTrackers[address]->parameter)->set(ofVec2f(msg.getArgAsFloat(0), msg.getArgAsFloat(1)));
    }
    else if (type == ParameterBase::VEC3F) {
        ((Parameter<ofVec3f> *) inputTrackers[address]->parameter)->set(ofVec3f(msg.getArgAsFloat(0), msg.getArgAsFloat(1), msg.getArgAsFloat(2)));
    }
    else if (type == ParameterBase::VEC4F) {
        ((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->set(ofVec4f(msg.getArgAsFloat(0), msg.getArgAsFloat(1), msg.getArgAsFloat(2), msg.getArgAsFloat(3)));
    }
}
Esempio n. 10
0
void testApp::setOscDebugMessage(ofxOscMessage message)
{
	std::stringstream stream;
	stream << "OSC messages";
	if (!showOscDebugPosition)
	{
		stream << " (Not showing position messages)";
	}
	stream << " :\n";
	stream << "[address]: " << message.getAddress() << ", ";
	for (int i = 0; i < message.getNumArgs(); ++i) {
		stream << "[" << (i+1) << "]: ";
		if (message.getArgType(i) == OFXOSC_TYPE_INT32) {
			stream << message.getArgAsInt32(i);
		}
		else if (message.getArgType(i) == OFXOSC_TYPE_STRING) {
			stream << message.getArgAsString(i);
		}
		else if (message.getArgType(i) == OFXOSC_TYPE_FLOAT) {
			stream << message.getArgAsFloat(i);
		}
		if (i != message.getNumArgs()-1) {stream << ", ";};
	}
	stream << ", time: ";
	stream << ofGetElapsedTimef();
	m_debugMessage = stream.str();
}
Esempio n. 11
0
void ramNodeArray::updateWithOscMessage(const ofxOscMessage &m)
{
	const int nNodes = m.getArgAsInt32(1);
	
	for (int i = 0; i < nNodes; i++)
	{
		const string name = m.getArgAsString(i * 8 + 0 + 2);
		const float vx = m.getArgAsFloat(i * 8 + 1 + 2);
		const float vy = m.getArgAsFloat(i * 8 + 2 + 2);
		const float vz = m.getArgAsFloat(i * 8 + 3 + 2);
		const float angle = m.getArgAsFloat(i * 8 + 4 + 2);
		const float ax = m.getArgAsFloat(i * 8 + 5 + 2);
		const float ay = m.getArgAsFloat(i * 8 + 6 + 2);
		const float az = m.getArgAsFloat(i * 8 + 7 + 2);
		const ofVec3f axis(ax, ay, az);
		const ofVec3f vec(vx, vy, vz);
		const ofQuaternion quat(angle, axis);

		ramNode &node = getNode(i);
		node.node_id = i;
		node.name = isActor() ? getJointName(i) : "Node " + ofToString(i);
		node.setGlobalPosition(vec);
		node.setGlobalOrientation(quat);
		node.accelerometer.update(vec, quat);
	}

	last_timestamp = current_timestamp;
	current_timestamp = m.getArgAsFloat(2 + nNodes * 8);
	last_update_client_time = ofGetElapsedTimef();
}
Esempio n. 12
0
///--------------------------------------------------------------
void AbletonManager::onClipPlayingPositionChanged(ofxOscMessage &m)
{
    /**
    * Response for clip position changes:
    * /clip/playing_position
    * N triplets with:
    *   (int) track
    *   (int) clip
    *   (float) track position (0..1)
    */

    int track;
    float position;

    int numArgs = m.getNumArgs();
    for (int i=0; i<numArgs; i+=3)
    {
        track = m.getArgAsInt32(i);
//        clip = m.getArgAsInt32(i+1);
        position = m.getArgAsFloat(i+2);

        if (track >= sceneNumObjects) continue;
        ofNotifyEvent(eventsClipPositionChanged[track], position, this);
    }
}
Esempio n. 13
0
void Ableton::getNumScenes(ofxOscMessage &m)
{
    numScenes = m.getArgAsInt32(0);
    //    sceneSelector = control.addMenu("Select scene", this, &Ableton::eventSelectScene);
    for (int i=0; i<numScenes; i++) {
        //sceneSelector->addToggle("Scene "+ofToString(i));
    }
}
Esempio n. 14
0
//--------------------------------------------------------------
void ofApp::getMessage22(ofxOscMessage m){
    int msgnum;
    msgnum = m.getNumArgs();
    if(msgnum==2){
        velx_ave = m.getArgAsInt32(0);
        vely_ave = m.getArgAsInt32(1);
    }
}
static ofMultiTaction::Finger makeFingerFromOSC(const ofxOscMessage &m)
{
    ofMultiTaction::Finger finger;
    finger.id = m.getArgAsInt32(0);
    finger.x = m.getArgAsFloat(1);
    finger.y = m.getArgAsFloat(2);
    return finger;
}
Esempio n. 16
0
void ramRigidBody::updateWithOscMessage(const ofxOscMessage &m)
{
	const int nNodes = m.getArgAsInt32(1);

	if (nNodes != getNumNode())
		reserveNodes(nNodes);

	ramNodeArray::updateWithOscMessage(m);
}
Esempio n. 17
0
void OscThread::executeMessage(ofxOscMessage& m)
{
    Action b;

    map<string, Action::Type> actions
    {
        {"/record", Action::Type::RECORD},
        {"/enter",  Action::Type::ENTER},
        {"/bump",  Action::Type::BUMP},
        {"/leave", Action::Type::LEAVE}
    };

    b.action = actions[m.getAddress()];

    unsigned int i = 0;
    b.instrument = m.getArgAsInt32(i++);
    b.bird = m.getArgAsInt32(i++);

    if(b.action == Action::Type::RECORD || b.action == Action::Type::BUMP)
    {
        b.delta_x = m.getArgAsFloat(i++);
        b.delta_y = m.getArgAsFloat(i++);
        b.delta_z = m.getArgAsFloat(i++);
        b.angle_x = m.getArgAsFloat(i++);
        b.angle_y = m.getArgAsFloat(i++);
        b.angle_z = m.getArgAsFloat(i++);

        if(b.action != Action::Type::BUMP)
        {
            b.speed_x = m.getArgAsFloat(i++);
            b.speed_y = m.getArgAsFloat(i++);
            b.speed_z = m.getArgAsFloat(i++);
            b.accel_x = m.getArgAsFloat(i++);
            b.accel_y = m.getArgAsFloat(i++);
            b.accel_z = m.getArgAsFloat(i++);
        }
        else // BUMP
        {
            b.velo_city = m.getArgAsFloat(i++);
        }
    }

    parent->executeAction(b);
}
Esempio n. 18
0
//--------------------------------------------------------------
void oscReceiver::setParameterValue(ofAbstractParameter& param, ofxOscMessage& msg, int oscArgIndex)
{
	ofAbstractParameter* p = &param;
   if(p->type()==typeid(ofParameter<int>).name() && msg.getArgType(oscArgIndex)==OFXOSC_TYPE_INT32)
   {
	   p->cast<int>() = msg.getArgAsInt32(oscArgIndex);
   }
   else if(p->type()==typeid(ofParameter<float>).name() && msg.getArgType(oscArgIndex)==OFXOSC_TYPE_FLOAT)
   {
	   p->cast<float>() = msg.getArgAsFloat(oscArgIndex);
   }else if(p->type()==typeid(ofParameter<bool>).name() && msg.getArgType(oscArgIndex)==OFXOSC_TYPE_INT32)
   {
	   p->cast<bool>() = msg.getArgAsInt32(oscArgIndex);
   }else if(msg.getArgType(oscArgIndex)==OFXOSC_TYPE_STRING)
   {
	   p->fromString(msg.getArgAsString(oscArgIndex));
   }

}
Esempio n. 19
0
//--------------------------------------------------------------
void ofApp::getMessage2(ofxOscMessage m){
    ObjHumans.clear();
    int mousenum;
    mousenum = m.getNumArgs();
    for (int j=0 ; j < mousenum/4 ; j++){
        //叩かれた座標
        mouseX = m.getArgAsInt32(0+j*3);
        mouseY = m.getArgAsInt32(1+j*3);
        //物体検出id
        int mouseID;
        mouseID = m.getArgAsInt32(2+j*3);
        //平均動きからのズレ
        int mouseStd;
        mouseStd = m.getArgAsInt32(j+mousenum/4*3);
        ObjHuman o;
        o.setup(mouseX,mouseY,0,5,mouseID,mouseStd,missThr);
        ObjHumans.push_back(o);
    }
}
Esempio n. 20
0
//--------------------------------------------------------------
void ofApp::getMessage4(ofxOscMessage m){
    ObjHumans.clear();
    int mousenum;
    mousenum = m.getNumArgs();
    for (int j=0 ; j < mousenum/5 ; j++){
        //叩かれた座標
        mouseX = m.getArgAsInt32(0+j*5);
        mouseY = m.getArgAsInt32(1+j*5);
        //物体検出id
        int mouseZ;
        mouseZ = m.getArgAsInt32(2+j*5);
        int mouseSpeed;
        mouseSpeed = m.getArgAsInt32(3+j*5);
        //平均動きからのズレ
        int mouseStd;
        mouseStd = m.getArgAsInt32(4+j*5);
        //cout << ofToString(mouseStd) << endl;
        ObjHuman o;
        o.setup(mouseX,mouseY,mouseZ,mouseSpeed,0,mouseStd,missThr);
        ObjHumans.push_back(o);
    }
}
Esempio n. 21
0
string ofApp::oscMsgToString(int num, string adr, ofxOscMessage msg) {
    string res= adr;
    for(int i= 0; i<num; i++) {
        res= res+" ";
        if(msg.getArgType(i)==OFXOSC_TYPE_INT32) {
            res= res+ofToString(msg.getArgAsInt32(i));
        } else if(msg.getArgType(i)==OFXOSC_TYPE_FLOAT) {
            res= res+ofToString(msg.getArgAsFloat(i));
        } else if(msg.getArgType(i)==OFXOSC_TYPE_STRING) {
            res= res+msg.getArgAsString(i);
        }
    }
    return res;
}
Esempio n. 22
0
void ofApp::dumpOSC(ofxOscMessage m) {
    string msgString;
    msgString = m.getAddress();
    for (int i=0; i<m.getNumArgs(); i++){
        msgString += " ";
        if(m.getArgType(i) == OFXOSC_TYPE_INT32)
            msgString += ofToString(m.getArgAsInt32(i));
        else if(m.getArgType(i) == OFXOSC_TYPE_FLOAT)
            msgString += ofToString(m.getArgAsFloat(i));
        else if(m.getArgType(i) == OFXOSC_TYPE_STRING)
            msgString += m.getArgAsString(i);
    }
    cout << msgString << endl;
 }
Esempio n. 23
0
string messenger::dumpOSC(ofxOscMessage m) {
    string msg_string;
    msg_string = m.getAddress();
    for (int i=0; i<m.getNumArgs(); i++ ) {
        msg_string += " ";
        if(m.getArgType(i) == OFXOSC_TYPE_INT32)
            msg_string += ofToString( m.getArgAsInt32(i));
        else if(m.getArgType(i) == OFXOSC_TYPE_FLOAT)
            msg_string += ofToString( m.getArgAsFloat(i));
        else if(m.getArgType(i) == OFXOSC_TYPE_STRING)
            msg_string += m.getArgAsString(i);
    }
    return msg_string;
}
Esempio n. 24
0
void AnimatedSinus::parseOSC(ofxOscMessage &m){
//    string msg = m.getAddress();
//    string cmd ;
//    
//    int ces = msg.find_first_of("/");
//    
//    if (ces != -1) {
//        if (ces == 0){
//            msg = msg.substr(ces+1);
//            cmd = msg;
//            ces = msg.find_first_of("/");
//            if (ces != -1) {
//                cmd = msg.substr(0, ces);
//                msg = msg.substr(ces);
//            }
//        }
//        else{
//            cmd = msg.substr(0, ces);
//            msg = msg.substr(ces);
//        }
//    }
    vector<string> osc = getOSCcmd(m.getAddress());
    string cmd = osc[0];
    string msg = osc[1];
    if (cmd == "sin"){
        osc = getOSCcmd(msg);
        string cmd = osc[0];
        string msg = osc[1];
        
        if (cmd == "freq"){
            freq = ofMap(m.getArgAsFloat(0), 0., 1., 0., 500.);
        }
        else if (cmd == "nbPoint"){
            nbPoint = m.getArgAsInt32(0);
        }
        else if (cmd == "speed"){
            speed = ofMap(m.getArgAsFloat(0), 0., 1., 0., 50.);
        }
        else if (cmd == "height"){
            height = m.getArgAsFloat(0);
        }
        else if (cmd == "posY"){
            posY = ofMap(m.getArgAsFloat(0), 0., 1., -1., 1.);
        }
    }
}
Esempio n. 25
0
void ofxOscSender::appendMessage( ofxOscMessage& message, osc::OutboundPacketStream& p )
{
    p << osc::BeginMessage( message.getAddress().c_str() );
	for ( int i=0; i< message.getNumArgs(); ++i )
	{
		if ( message.getArgType(i) == OFXOSC_TYPE_INT32 )
			p << message.getArgAsInt32( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_FLOAT )
			p << message.getArgAsFloat( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_STRING )
			p << message.getArgAsString( i ).c_str();
		else
		{
			assert( false && "bad argument type" );
		}
	}
	p << osc::EndMessage;
}
string ofApp::getOscMsgAsString(ofxOscMessage m){	
	// method from the client server ofxOsc example !
	string msg_string;
	msg_string ="";
	for(int i = 0; i < m.getNumArgs(); i++){
		// get the argument type
		if(m.getArgType(i) == OFXOSC_TYPE_INT32){
			msg_string += ofToString(m.getArgAsInt32(i));
		}
		else if(m.getArgType(i) == OFXOSC_TYPE_FLOAT){
			msg_string += ofToString(m.getArgAsFloat(i));
		}
		else if(m.getArgType(i) == OFXOSC_TYPE_STRING){
			msg_string += m.getArgAsString(i);
		}
	}
	return msg_string;
}
Esempio n. 27
0
//--------------------------------------------------------------
// OSCメッセージをコンソールに出力する関数
//
string ofApp::dumpOSC(ofxOscMessage m) {
	string str = m.getAddress();
	for (int i=0; i<m.getNumArgs(); i++ ) {
		str += " ";
		switch (m.getArgType(i)) {
			case OFXOSC_TYPE_INT32:
				str += ofToString( m.getArgAsInt32(i));
				break;
			case OFXOSC_TYPE_FLOAT:
				str += ofToString( m.getArgAsFloat(i));
				break;
			case OFXOSC_TYPE_STRING:
				str += m.getArgAsString(i);
				break;
			default:
				break;
		}
	}
	cout << str << endl;
	return str;
}
Esempio n. 28
0
void ofxGstRTPServer::appendMessage( ofxOscMessage& message, osc::OutboundPacketStream& p )
{
    p << osc::BeginMessage( message.getAddress().c_str() );
	for ( int i=0; i< message.getNumArgs(); ++i )
	{
		if ( message.getArgType(i) == OFXOSC_TYPE_INT32 )
			p << message.getArgAsInt32( i );
		else if ( message.getArgType(i) == OFXOSC_TYPE_INT64 )
			p << (osc::int64)message.getArgAsInt64( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_FLOAT )
			p << message.getArgAsFloat( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_STRING )
			p << message.getArgAsString( i ).c_str();
		else
		{
			ofLogError("ofxOscSender") << "appendMessage(): bad argument type " << message.getArgType( i );
		}
		//cout << i << ": " << p.Size() << endl;
	}
	p << osc::EndMessage;
}
Esempio n. 29
0
void Ableton::displayOscMessage(ofxOscMessage &m)
{
    cout << "address : "<< m.getAddress() << endl;
    for (int i = 0; i < m.getNumArgs(); i++)
    {
        if      (m.getArgType(i) == OFXOSC_TYPE_INT32) {
            cout << " i--> "<<m.getArgAsInt32(i)<<endl;
        }
        else if (m.getArgType(i) == OFXOSC_TYPE_INT64) {
            cout << " j--> "<<m.getArgAsInt64(i)<<endl;
        }
        else if (m.getArgType(i) == OFXOSC_TYPE_FLOAT) {
            cout << " f--> "<<m.getArgAsFloat(i)<<endl;
        }
        else if (m.getArgType(i) == OFXOSC_TYPE_STRING) {
            cout << " s--> "<<m.getArgAsString(i)<<endl;
        }
        else if (m.getArgType(i) == OFXOSC_TYPE_BLOB) {
            cout << " b--> "<<m.getArgAsBlob(i)<<endl;
        }
    }
}
Esempio n. 30
0
void ofApp::appendMessage( ofxOscMessage& message, osc::OutboundPacketStream& p )
{
    p << osc::BeginMessage( message.getAddress().c_str() );
	for ( int i=0; i< message.getNumArgs(); ++i )
	{
		if ( message.getArgType(i) == OFXOSC_TYPE_INT32 )
			p << message.getArgAsInt32( i );
		else if ( message.getArgType(i) == OFXOSC_TYPE_INT64 )
			p << (osc::int64)message.getArgAsInt64( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_FLOAT )
			p << message.getArgAsFloat( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_DOUBLE )
			p << message.getArgAsDouble( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_STRING || message.getArgType( i ) == OFXOSC_TYPE_SYMBOL)
			p << message.getArgAsString( i ).c_str();
		else if ( message.getArgType( i ) == OFXOSC_TYPE_CHAR )
			p << message.getArgAsChar( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_MIDI_MESSAGE )
			p << message.getArgAsMidiMessage( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_TRUE || message.getArgType( i ) == OFXOSC_TYPE_FALSE )
			p << message.getArgAsBool( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_TRIGGER )
			p << message.getArgAsTrigger( i );
		else if ( message.getArgType( i ) == OFXOSC_TYPE_TIMETAG )
			p << (osc::int64)message.getArgAsTimetag( i );
		//else if ( message.getArgType( i ) == OFXOSC_TYPE_RGBA_COLOR )
		//	p << message.getArgAsRgbaColor( i );
        else if ( message.getArgType( i ) == OFXOSC_TYPE_BLOB ){
            ofBuffer buff = message.getArgAsBlob(i);
            osc::Blob b(buff.getData(), (unsigned long)buff.size());
            p << b; 
		}else
		{
			ofLogError("ofxOscSender") << "appendMessage(): bad argument type " << message.getArgType( i );
			assert( false );
		}
	}
	p << osc::EndMessage;
}