void ofxRemoteUIClient::fillPresetListFromMessage(ofxOscMessage m){

	int n = m.getNumArgs();

	//check if server has no presets at all
	if (m.getNumArgs() == 1){
		if(m.getArgAsString(0) == OFXREMOTEUI_NO_PRESETS){ //if no prests, server sends only one with this value
			//we know there's no presets
		}
	}
	presetNames.clear();
	for(int i = 0; i < n; i++){
		presetNames.push_back( m.getArgAsString(i));
	}
}
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();
}
Beispiel #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);
    }
}
Beispiel #4
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();
}
//----------
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)));
    }
}
Beispiel #6
0
string ofApp::getMsgContent(ofxOscMessage m){
    bool DISPLAY_ALL = false;
    string msg_string = "";
    int iTotalArg = m.getNumArgs(), i = -1;
    
    if (DISPLAY_ALL){
        msg_string += ", port: " + m.getAddress();
    }
    if (++i < iTotalArg && DISPLAY_ALL) msg_string += "NAME: " + m.getArgAsString(i);
    if (++i < iTotalArg)                msg_string += " " + m.getArgAsString(i);    //STATUS
    if (++i < iTotalArg)                msg_string += " " + m.getArgAsString(i);    //FILE
    if (++i < iTotalArg && DISPLAY_ALL) msg_string += ", POSITION: " + ofToString(m.getArgAsInt(i));
    if (++i < iTotalArg && DISPLAY_ALL) msg_string += ", DURATION: " + ofToString(m.getArgAsInt(i));
    if (++i < iTotalArg)                msg_string += ", LOOPING: " + ofToString(m.getArgAsInt(i));
    if (++i < iTotalArg && DISPLAY_ALL) msg_string += ", VOLUME: " + ofToString(m.getArgAsInt(i));
    if (++i < iTotalArg && DISPLAY_ALL) msg_string += ", MUTE: " + m.getArgAsString(i);
    if (++i < iTotalArg && DISPLAY_ALL) msg_string += ", ZOOM: " + ofToString(m.getArgAsInt(i));
    if (++i < iTotalArg && DISPLAY_ALL) msg_string += ", BLUR: " + ofToString(m.getArgAsInt(i));
    
    return msg_string;
}
Beispiel #7
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;
}
Beispiel #8
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;
 }
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;
}
Beispiel #10
0
void ofApp::confirmMessage(ofxOscMessage m){
    //figure out which pi
    string sIp = m.getRemoteIp();
    string msgContent = getMsgContent(m);
    int iCurPi = -1;
    if (hasEnding(sIp, pi1_ip)){
        iCurPi = 0;
        m_bOscConfirmations[0] = true;
        logMsg("got msg from 1: " + msgContent);
    }
    else if (hasEnding(sIp, pi2_ip)){
        iCurPi = 1;
        m_bOscConfirmations[1] = true;
        logMsg("got msg from 2: " + msgContent);
    }
    else if (hasEnding(sIp, pi3_ip)){
        iCurPi = 2;
        m_bOscConfirmations[2] = true;
        logMsg("got msg from 3: " + msgContent);
    }
    else if (hasEnding(sIp, pi4_ip)){
        iCurPi = 3;
        m_bOscConfirmations[3] = true;
        logMsg("got msg from 4: " + msgContent);
    } else {
        logMsg("got msg from UNKNOWN " + sIp + ": " + msgContent);
    }
    
    //update corresponding status
    string sCurStatus = "";
    int iCurArg = 1;
    string sStatus  = m.getArgAsString(iCurArg++);
    string sFile    = m.getArgAsString(iCurArg++);
    iCurArg += 2;
    bool bLoop      = m.getArgAsInt(iCurArg++);
    if (hasEnding(sStatus, "stoped")){
        sCurStatus += "Stopped";
    } else {
        if (bLoop){
            sCurStatus += "Loop\t";
        } else {
            sCurStatus += "Play\t";
        }
        sCurStatus += sFile;
    }
    m_sRpiStatuses[iCurPi] = sCurStatus;
}
void ramActorManager::updateWithOscMessage(const ofxOscMessage &m)
{
	if (isFreezed()) return;

	const std::string addr = m.getAddress();
	const std::string name = m.getArgAsString(0);

	if (addr == RAM_OSC_ADDR_ACTOR)
	{
		if (!nodearrays.hasKey(name))
		{
			ramActor o;
			o.setType(RAM_NODEARRAY_TYPE_ACTOR);
			o.setName(name);
			o.updateWithOscMessage(m);
			nodearrays.set(name, o);

			ofNotifyEvent(actorSetup, o);
		}
		else
		{
			ramActor &o = (ramActor &)nodearrays[name];
			o.updateWithOscMessage(m);
		}
	}
	else if (addr == RAM_OSC_ADDR_RIGID_BODY)
	{
		if (!nodearrays.hasKey(name))
		{
			ramRigidBody o;
			o.setType(RAM_NODEARRAY_TYPE_RIGIDBODY);
			o.setName(name);
			o.updateWithOscMessage(m);
			nodearrays.set(name, o);

			ofNotifyEvent(rigidSetup, o);
		}
		else
		{
			ramRigidBody &o = (ramRigidBody &)nodearrays[name];
			o.updateWithOscMessage(m);
		}
	}
    else assert(false);
}
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;
}
void ofxDuration::parseInfoMessage(const ofxOscMessage& m){
	
	ofLogVerbose("ofxDuration::parseInfoMessage") << "Received track information from Duration, #args " << m.getNumArgs();
	
	tracks.clear();
	trackNames.clear();
	//pairs of two strings per track, name and type
	for(int i = 0; i < m.getNumArgs()-1; i+=2){
		if(m.getArgType(i  ) == OFXOSC_TYPE_STRING &&
		   m.getArgType(i+1) == OFXOSC_TYPE_STRING)
		{
			string trackType = m.getArgAsString(i  );
			string trackName = m.getArgAsString(i+1);
			ofxDurationTrack t;
			t.type = trackType;
			t.name = trackName;
			t.lastUpdatedTime = ofGetElapsedTimef();
			ofLogVerbose("ofxDuration::parseInfoMessage") << "Adding track " << t.type << " : " << t.name;

			if(trackType == "Curves" || trackType == "LFO"){
				//consume two more args for min and max
				if(i+3 < m.getNumArgs() &&
				   m.getArgType(i+2) == OFXOSC_TYPE_FLOAT &&
				   m.getArgType(i+3) == OFXOSC_TYPE_FLOAT)
				{
					t.range = ofRange(m.getArgAsFloat(i+2), m.getArgAsFloat(i+3));
					ofLogVerbose("ofxDuration::parseInfoMessage") << " track range is " << t.range;

					i+=2;
				}
			}
			
			//only add unique names
			if(tracks.find(t.name) == tracks.end()){
				trackNames.push_back(t.name);
				tracks[t.name] = t;
			}
			else{
				ofLogNotice("ofxDuration::parseInfoMessage") << "Duplicate track name received: " << t.name;
			}
		}
	}
	ofLogVerbose("ofxDuration::parseInfoMessage") << "Created " << tracks.size() << " tracks";
}
Beispiel #15
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));
   }

}
Beispiel #16
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;
}
//--------------------------------------------------------------
// 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;
}
Beispiel #18
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;
}
Beispiel #19
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;
        }
    }
}
Beispiel #20
0
//--------------------------------------------------------------
string ofApp::getOscMsgAsString(ofxOscMessage m){
    string msg_string;
    msg_string = m.getAddress();
    msg_string += ":";
    for(int i = 0; i < m.getNumArgs(); i++){
        // get the argument type
        msg_string += " " + m.getArgTypeName(i);
        msg_string += ":";
        // display the argument - make sure we get the right 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);
        }
        else{
            msg_string += "unknown";
        }
    }
    return msg_string;
}
Beispiel #21
0
static CommandArg messageArgToCommandArg(const ofxOscMessage& message,
                                         int i) {
  auto type = message.getArgType(i);
  switch (type) {
    case OFXOSC_TYPE_INT32:
      return message.getArgAsInt32(i);
      break;
    case OFXOSC_TYPE_INT64:
      return message.getArgAsInt64(i);
    case OFXOSC_TYPE_FLOAT:
      return message.getArgAsFloat(i);
    case OFXOSC_TYPE_DOUBLE:
      return message.getArgAsDouble(i);
    case OFXOSC_TYPE_STRING:
    case OFXOSC_TYPE_SYMBOL:
      return message.getArgAsString(i);
    case OFXOSC_TYPE_TRUE:
      return true;
    case OFXOSC_TYPE_FALSE:
      return false;
    default:
      break;
  }
}
string OscManager::getMessageAsString(const ofxOscMessage& m) const
{
    string msg_string;
    msg_string = m.getAddress();
    for(int i = 0; i < m.getNumArgs(); i++){
        // get the argument type
        msg_string += " ";
        // display the argument - make sure we get the right 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);
        }
        else{
            msg_string += "unknown";
        }
    }

    return msg_string;
}
void ramCommunicationManager::updateWithOscMessage(const ofxOscMessage &m) {
    if (!dynamic_cast<ofxUIToggle*>(mainPanel.getWidget("Enable"))->getValue()) return;

    const std::string addr = m.getAddress();
    const std::string name = m.getArgAsString(0);

    int index = 0;
    int assIdx = -1;

    bool isExist = false;
    for (int i = 0; i < Instruments.size(); i++) {
        if (name == Instruments[i]->getName())
        {
            index   = i;
            isExist = true;
        }
    }

    if (!isExist) index = addInstrument(name);


    if (addr == RAM_OSC_ADDR_COMMUNICATE_NOTEON) {
        bVisible = true;
        Instruments[index]->getFloat("velocity") = m.getArgAsFloat(1);
        velocities[index]->setValue(m.getArgAsFloat(1));
        assIdx = 0;

        for (int j = 0; j < assigns.size(); j++) {
            if (assigns[j].Found &&
                    assigns[j].Pindex == index &&
                    assigns[j].Pposition == assIdx)
                assigns[j].Changed = true;
        }
    }

    else if (addr == RAM_OSC_ADDR_COMMUNICATE_NOTEOFF) {
        bVisible = true;
        Instruments[index]->getFloat("velocity") = 0.0;
        velocities[index]->setValue(0.0);
        assIdx = 0;

        for (int j = 0; j < assigns.size(); j++) {
            if (assigns[j].Found &&
                    assigns[j].Pindex == index &&
                    assigns[j].Pposition == assIdx)
                assigns[j].Changed = true;
        }
    }

    else if (addr == RAM_OSC_ADDR_COMMUNICATE_CC) {
        bVisible = true;
        int ccNum = m.getNumArgs();
        for (int i = 0; i < ccNum - 1; i++) {
            string ccLabel = "cc" + ofToString(i);

            if (Instruments[index]->contains(ccLabel))
            {

                Instruments[index]->getFloat(ccLabel) = m.getArgAsFloat(i+1);
                ccs[index][i]->setValue(m.getArgAsFloat(i+1));
                assIdx = i;

                for (int j = 0; j < assigns.size(); j++) {
                    if (assigns[j].Found &&
                            assigns[j].Pindex == index &&
                            assigns[j].Pposition == assIdx)
                        assigns[j].Changed = true;
                }
            }
            else
            {
                Instruments[index]->add((*new ofParameter<float>).set(ccLabel,
                                        m.getArgAsFloat(i+1),0.0,1.0));
                refleshInstruments();
            }

        }

    }

}
Beispiel #24
0
void ofxTidalISF::oscReceiveEvent(ofxOscMessage &m){
    //ISF
    if(m.getAddress() == "/ofplay"){
        //get layer num
        int l = 0;
        for (int i = 0; i < m.getNumArgs(); i+=2) {
            string argName = m.getArgAsString(i);
            if (argName == "l") {
                l = m.getArgAsInt(i+1);
            }
        }
        //set current inst
        for (int i = 0; i < m.getNumArgs(); i+=2) {
            string argName = m.getArgAsString(i);
            if (argName == "s") {
                isfLayers[l]->currentISF = m.getArgAsString(i+1);
            }
        }
        //send params
        for (int i = 0; i < m.getNumArgs(); i+=2) {
            string argName = m.getArgAsString(i);
            //find argName in floatArgs
            vector<string>::iterator cIter = find(floatArgs.begin(),floatArgs.end() , argName);
            if (cIter != floatArgs.end()) {
                float argValue = m.getArgAsFloat(i+1);
                for(int j = 0; j < isfLayers[l]->isfs.size(); j++){
                    if(isfLayers[l]->isfs[j]->getName() == isfLayers[l]->currentISF){
                        isfLayers[l]->isfs[j]->setUniform<float>(argName, argValue);
                    }
                }
            }
        }
    }
    
    //PostProcess
    if(m.getAddress() == "/post"){
        //reset postprocess
        restPostProcess();
        //set postProcess name
        for (int i = 0; i < m.getNumArgs(); i+=2) {
            string argName = m.getArgAsString(i);
            string postName;
            if (argName == "s") {
                postName = m.getArgAsString(i+1);
                if (postName == "bloom") bloom->setEnabled(true);
                if (postName == "kaleido") kaleido->setEnabled(true);
                if (postName == "noise") noise->setEnabled(true);
                if (postName == "rgb") rgb->setEnabled(true);
                if (postName == "edge") edge->setEnabled(true);
                if (postName == "pixel") pixel->setEnabled(true);
                if (postName == "darken") darken->setEnabled(true);
                if (postName == "contrast") contrast->setEnabled(true);
                if (postName == "conv") conv->setEnabled(true);
                if (postName == "dof") dof->setEnabled(true);
                if (postName == "sss") sss->setEnabled(true);
                if (postName == "fxaa") fxaa->setEnabled(true);
                if (postName == "vtilt") vtilt->setEnabled(true);
                if (postName == "htilt") htilt->setEnabled(true);
                if (postName == "god") god->setEnabled(true);
                if (postName == "bleach") bleach->setEnabled(true);
                if (postName == "lut") lut->setEnabled(true);
                if (postName == "toon") toon->setEnabled(true);
            }
        }
    }
}
void ofxDuration::parseTrackMessage(const ofxOscMessage& m){
	for(int i = 0; i < trackNames.size(); i++){
		if(trackNames[i] == m.getAddress()){
			ofxDurationTrack& track = tracks[trackNames[i]];
			bool updated = false;
			
			if(track.type == "Bangs"){
				updated = true;
			}
			else if(track.type == "Curves" || track.type == "LFO"){
				if(m.getNumArgs() == 1 && m.getArgType(0) == OFXOSC_TYPE_FLOAT){
					track.value = m.getArgAsFloat(0);
					updated = true;
				}
				else {
					ofLogError("ofxDuration::parseTrackMessage") << "Incorrect arguments sent to Curves track " << track.name;
				}
			}
			else if(track.type == "Colors"){
				if(m.getNumArgs() == 3 &&
				   m.getArgType(0) == OFXOSC_TYPE_INT32 &&
				   m.getArgType(1) == OFXOSC_TYPE_INT32 &&
				   m.getArgType(2) == OFXOSC_TYPE_INT32)
				{
					track.color = ofColor(m.getArgAsInt32(0),
										  m.getArgAsInt32(1),
										  m.getArgAsInt32(2));
					updated = true;
				}
				else {
					ofLogError("ofxDuration::parseTrackMessage") << "Incorrect arguments sent to Colors track " << track.name;
				}
			}
			else if(track.type == "Switches"){
				if(m.getNumArgs() == 1 && m.getArgType(0) == OFXOSC_TYPE_INT32){
					track.on = m.getArgAsInt32(0) != 0;
					updated = true;
				}
				else{
					ofLogError("ofxDuration::parseTrackMessage") << "Incorrect arguments sent to Switches track " << track.name;
				}
			}
			else if(track.type == "Flags"){
				if(m.getNumArgs() == 1 && m.getArgType(0) == OFXOSC_TYPE_STRING){
					track.flag = m.getArgAsString(0);
					updated = true;
				}
				else{
					ofLogError("ofxDuration::parseTrackMessage") << "Incorrect arguments sent to Flags track " << track.name;
				}
			}
			else if(track.type == "Audio"){
				track.fft.clear();
				for(int i = 0; i < m.getNumArgs(); i++){
					if(m.getArgType(i) == OFXOSC_TYPE_FLOAT){
						float fftdata = m.getArgAsFloat(i);
						track.fft.push_back(m.getArgAsFloat(i));
						track.maxBinReceived = MAX(fftdata, track.maxBinReceived);
					}
				}
			}
			
			if(updated){
				track.lastUpdatedTime = ofGetElapsedTimef();
				ofxDurationEventArgs trackEventArgs;
				trackEventArgs.duration = this;
				trackEventArgs.track = &track;
				ofNotifyEvent(events.trackUpdated, trackEventArgs, this);
			}
			
			return;
		}
	}	
}
// proceed the message
bool durationReceiver::handle(const ofxOscMessage &_msg) {
	if( !isEnabled() ) return false;
	
	// lock mutex
	ofScopedLock myLock(oscMutex);
	
	// get incoming track info
	if( _msg.getAddress().compare("/dt/info") == 0 ){
		
		// todo: register incomming variable types // tracks and let them be synchronised automatically with inter variables + getters
		
		return true; // we're done
	}
	
	// incoming track data
	if( canHandle(_msg) ){
		string track=_msg.getAddress().substr(DT_PREFIX_LEN,_msg.getAddress().npos);
		
		ofxOscArgType type = OFXOSC_TYPE_NONE;
		if( _msg.getNumArgs() > 0 ) type = _msg.getArgType(0);
		
		if(_msg.getNumArgs()>0 && (type == OFXOSC_TYPE_INT32 || type == OFXOSC_TYPE_FLOAT) ){
			// /dt/cmd/effect-*
			#define cmpEffectCmd "cmd/effect-"
			if( track.compare(0, sizeof(cmpEffectCmd)-1, cmpEffectCmd) == 0  ) {
				
				track=track.substr(sizeof(cmpEffectCmd)-1,track.npos);
				
				// enable / disable an effect
				// /dt/cmd/effect-enable-effectName
				#define cmpEffectCmdEnable "enable-"
				if( track.compare(0, sizeof(cmpEffectCmdEnable)-1, cmpEffectCmdEnable) == 0  ) {
					
					effectCmdEventArgs args;
					args.command = "enable";
					args.targetEffectName = track.substr(sizeof(cmpEffectCmdEnable)-1, track.npos);
					args.boolValue = _msg.getArgAsInt32(0);
					
					ofNotifyEvent(basicEffect::effectCommandEvent, args);
				}
				#define cmpEffectCmdAlpha "alpha-"
				else if( track.compare(0, sizeof(cmpEffectCmdAlpha)-1, cmpEffectCmdAlpha) == 0  ) {
					
					effectCmdEventArgs args;
					args.command = "alpha";
					args.targetEffectName = track.substr(sizeof(cmpEffectCmdAlpha)-1, track.npos);
					args.floatValue = _msg.getArgAsFloat(0);
					
					ofNotifyEvent(basicEffect::effectCommandEvent, args);
				}
			}
		}
        
        else if( type == OFXOSC_TYPE_FLOAT){
            float value = 0;
            if(_msg.getNumArgs()>0) value=_msg.getArgAsFloat(0);
            durationFloatEventArgs args;
            args.track=track;
            //args.type="curve";
            args.value=value;
            ofNotifyEvent(durationFloatEvent, args);
        }
        else if(type == OFXOSC_TYPE_INT32){
            
        }
        else if(type == OFXOSC_TYPE_STRING){
            durationFlagEventArgs args;
            args.track=track;
            args.flag = _msg.getArgAsString(0);
            ofNotifyEvent(durationFlagEvent, args);
        }
        // handle bangs
        else if(type == OFXOSC_TYPE_NONE){
            durationBangEventArgs args;
            args.track=track;
            ofNotifyEvent(durationBangEvent, args);
        }
        
		
		//	- - - - - - - - - -
		//	Notice:
		//	The following message handling are temporary and static.
		//	A system needs to be made for synchronising any track by automatically parsing it. #ofxOscVariable
		//	Hence you can dynamically create new variables and bind them to effect variables
		//	- - - - - - - - - -
		
		if( track.compare("bang") == 0 && type == OFXOSC_TYPE_NONE ){
			{ // send bangEvent
				durationBangEventArgs args;
				args.track=track;
				ofNotifyEvent(durationBangEvent, args);
			}
		}
		else if( track.compare("test") == 0 ){
			{ // send flagEvent
				string flag = "";
				if(_msg.getNumArgs()>0 && type == OFXOSC_TYPE_STRING){
					flag=_msg.getArgAsString(0);
				}
				durationFlagEventArgs args;
				args.track=track;
				args.flag="";
				
				ofNotifyEvent(durationFlagEvent, args);
			}
		}
		else if( track.compare("lineEffectIntensity") == 0 ){
			{ // curve
				float value = 0;
				if(_msg.getNumArgs()>0)
					value=_msg.getArgAsFloat(0);
				durationFloatEventArgs args;
				args.track=track;
				args.type="curve";
				args.value=value;
				ofNotifyEvent(durationFloatEvent, args);
			}
		}
		// tmp
		else if( track.compare("bgVendomeOpacity") == 0 ){
			{ // curve
				float value = 0;
				if(_msg.getNumArgs()>0)
					value=_msg.getArgAsFloat(0);
				durationFloatEventArgs args;
				args.track=track;
				args.type="curve";
				args.value=value;
				ofNotifyEvent(durationFloatEvent, args);
			}
		}
		
		else if( track.compare("imageBeatEffectIntensity") == 0 ){
			{ // curve
				float value = 0;
				if(_msg.getNumArgs()>0) value=_msg.getArgAsFloat(0);
				durationFloatEventArgs args;
				args.track=track;
				args.type="curve";
				args.value=value;
				ofNotifyEvent(durationFloatEvent, args);
			}
		}
		/*{
			// send bangEvent
			durationBangEventArgs args;
			args.what="aubioTempo";
			ofNotifyEvent(durationBangEvent, args);
		}
		{
			// send bangEvent
			durationTempoEventArgs args;
			args.bpm = mirCache.bpm;
			args.isTempoBis=false;
			ofNotifyEvent(durationTempoEventArgs, args);
		}
		 */
		// unknown track, could not get information
		else {
			// todo: try to add the signal here
			//ofLogNotice();
		}
		return true;
	}/*
	else if( addr.compare("/aubioTempoBis") == 0 ){
		{
			// send bangEvent
			durationBangEventArgs args;
			args.what="aubioTempoBis";
			ofNotifyEvent(durationBangEvent, args);
		}
		{
			// send bangEvent
			durationTempoEventArgs args;
			args.bpm = mirCache.bpm;
			args.isTempoBis=true;
			ofNotifyEvent(durationTempoEventArgs, args);
		}
		return true;
	}
	else if( addr.compare("/aubioBpm") == 0 ){
		if(_msg.getNumArgs()>0) mirCache.bpm = _msg.getArgTypeName(0)=="int32"?_msg.getArgAsInt32(0):_msg.getArgAsFloat(0);
		return true;
	}
	else if( addr.compare("/aubioPitch") == 0 ){
		if(_msg.getNumArgs()>0)	mirCache.pitch = _msg.getArgTypeName(0)=="int32"?_msg.getArgAsInt32(0):_msg.getArgAsFloat(0);
		return true;
	}
	else if( addr.compare("/aubioQuiet") == 0 ){
		if(_msg.getNumArgs()>0) mirCache.silence = (_msg.getArgAsInt32(0)==0)?true:false;
		return true;
	}
	else if( addr.compare("/aubioIsPlaying") == 0 ){
		if(_msg.getNumArgs()>0) mirCache.isPlaying = (_msg.getArgAsInt32(0)==0)?true:false;
		return true;
	}
	else if( addr.compare("/aubioZcr") == 0 ){
		if(_msg.getNumArgs()>0) mirCache.zcr = _msg.getArgTypeName(0)=="int32"?_msg.getArgAsInt32(0):_msg.getArgAsFloat(0);
		return true;
	}
	else if( addr.compare("/balance") == 0 ){
		if(_msg.getNumArgs()>0) mirCache.balance = _msg.getArgTypeName(0)=="int32"?_msg.getArgAsInt32(0):_msg.getArgAsFloat(0);
		return true;
	}
	// Fiddle FFT Equaliser
	else if( addr.compare(0, 16, "/fiddle_fft/band") == 0 ){ // 16 first chars
		int band = ofToInt(addr.substr(16));
		
		if(addr.compare(17, 20, "rms")==0) // rms (volume)
			mirCache.fiddleFFT[band][0]=_msg.getArgTypeName(0)=="int32"?_msg.getArgAsInt32(0):_msg.getArgAsFloat(0);
		else // pitch
			mirCache.fiddleFFT[band][1]=_msg.getArgTypeName(0)=="int32"?_msg.getArgAsInt32(0):_msg.getArgAsFloat(0);
		
		return true;
	}
	else if( addr.compare("") == 0 ){
		
		return true;
	}*/
	else {
		//cout << "Not recognized OSC = " << _msg.getAddress() << endl;
	}
	
	// unrecognized messge
	return false;
}
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;
}
Beispiel #28
0
void ofxRemoteUI::updateParamFromDecodedMessage(ofxOscMessage m, DecodedMessage dm){

	string paramName = dm.paramName;
	RemoteUIParam original;
	bool newParam = true;
	unordered_map<string, RemoteUIParam>::iterator it = params.find(paramName);
	if ( it != params.end() ){	//found the param, we already had it
		original = params[paramName];
		newParam = false;
	}

	RemoteUIParam p = original;
	int arg = 0;

	switch (dm.argument) {
		case FLT_ARG:
			p.type = REMOTEUI_PARAM_FLOAT;
 			p.floatVal = m.getArgAsFloat(arg); arg++;
			if(m.getNumArgs() > 1){
				p.minFloat = m.getArgAsFloat(arg); arg++;
				p.maxFloat = m.getArgAsFloat(arg); arg++;
			}
			if (p.floatValAddr){
				*p.floatValAddr = p.floatVal;
			}break;

		case INT_ARG:
			p.type = REMOTEUI_PARAM_INT;
			p.intVal = m.getArgAsInt32(arg); arg++;
			p.minInt = m.getArgAsInt32(arg); arg++;
			p.maxInt = m.getArgAsInt32(arg); arg++;
			if (p.intValAddr){
				*p.intValAddr = p.intVal;
			}break;

		case COLOR_ARG:
			p.type = REMOTEUI_PARAM_COLOR;
			p.redVal = (int)m.getArgAsInt32(arg); arg++;
			p.greenVal = (int)m.getArgAsInt32(arg); arg++;
			p.blueVal = (int)m.getArgAsInt32(arg); arg++;
			p.alphaVal = (int)m.getArgAsInt32(arg); arg++;
			if (p.redValAddr){
				*p.redValAddr = p.redVal;
				*(p.redValAddr+1) = p.greenVal;
				*(p.redValAddr+2) = p.blueVal;
				*(p.redValAddr+3) = p.alphaVal;
			}break;

		case ENUM_ARG:{
			p.type = REMOTEUI_PARAM_ENUM;
			p.intVal = m.getArgAsInt32(arg); arg++;
			p.minInt = m.getArgAsInt32(arg); arg++;
			p.maxInt = m.getArgAsInt32(arg); arg++;
			if (p.intValAddr){
				*p.intValAddr = p.intVal;
			}
			int n = m.getNumArgs() - 5 - 3; // 3 >> the int vals, 5 >> 4 colors + 1 group
			int i = 0;
			p.enumList.clear();
			for (i = 0; i < n; i++) {
				p.enumList.push_back( m.getArgAsString(arg + i) );
			}
			arg = arg + i;
		}break;

		case BOL_ARG:
			p.type = REMOTEUI_PARAM_BOOL;
			p.boolVal = m.getArgAsInt32(arg) == 0 ? false : true; arg++;
			if (p.boolValAddr){
				*p.boolValAddr = p.boolVal;
			}break;

		case STR_ARG:
			p.type = REMOTEUI_PARAM_STRING;
			p.stringVal = m.getArgAsString(arg); arg++;
			if (p.stringValAddr){
				*p.stringValAddr = p.stringVal;
			}break;

		case SPACER_ARG:
			p.type = REMOTEUI_PARAM_SPACER;
			p.stringVal = m.getArgAsString(arg); arg++;
			break;


		case NULL_ARG: RUI_LOG_ERROR << "updateParamFromDecodedMessage NULL type!"; break;
		default: RUI_LOG_ERROR << "updateParamFromDecodedMessage unknown type!"; break;
	}

	if(m.getNumArgs() > 1){
		p.r = m.getArgAsInt32(arg); arg++;
		p.g = m.getArgAsInt32(arg); arg++;
		p.b = m.getArgAsInt32(arg); arg++;
		p.a = m.getArgAsInt32(arg); arg++;
		p.group = m.getArgAsString(arg); arg++;
	}

	if ( !p.isEqualTo(original)  || newParam ){ // if the udpdate changed the param, keep track of it
		paramsChangedSinceLastCheck.insert(paramName);
	}

	//here we update our param db
	//params[paramName] = p;
	if(newParam)
		addParamToDB(p, paramName);
	else
		params[paramName] = p;
}