コード例 #1
0
bool ofxOscReceiver::getParameter(ofAbstractParameter & parameter){
	ofxOscMessage msg;
	if ( messages.size() == 0 ) return false;
	while(hasWaitingMessages()){
		ofAbstractParameter * p = &parameter;
		getNextMessage(&msg);
		vector<string> address = ofSplitString(msg.getAddress(),"/",true);
		for(int i=0;i<address.size();i++){
			if(address[i]==p->getEscapedName()){
				if(p->type()==typeid(ofParameterGroup).name()){
					if(address.size()>i+1 && static_cast<ofParameterGroup*>(p)->contains(address[i+1])){
						p = &static_cast<ofParameterGroup*>(p)->get(address[i+1]);
					}
				}else if(p->type()==typeid(ofParameter<int>).name() && msg.getArgType(0)==OFXOSC_TYPE_INT32){
					p->cast<int>() = msg.getArgAsInt32(0);
				}else if(p->type()==typeid(ofParameter<float>).name() && msg.getArgType(0)==OFXOSC_TYPE_FLOAT){
					
                    ofParameter<float> * param = dynamic_cast<ofParameter<float>* >(p);
                    float length = param->getMax() - param->getMin();
                    p->cast<float>() = ( msg.getArgAsFloat(0) * length ) + param->getMin();
                    
                    
				}else if(p->type()==typeid(ofParameter<bool>).name() && msg.getArgType(0)==OFXOSC_TYPE_INT32){
					p->cast<bool>() = msg.getArgAsInt32(0);
				}else if(msg.getArgType(0)==OFXOSC_TYPE_STRING){
					p->fromString(msg.getArgAsString(0));
				}
			}
		}
	}
	return true;
}
コード例 #2
0
void ofxDuration::update(ofEventArgs& args){
	while(hasWaitingMessages()){
		ofxOscMessage m;
		getNextMessage(&m);
		
		//duration will send an info package whenever play begins
		//we use this to set up all the track info
		if(m.getAddress() == "/duration/info"){
			parseInfoMessage(m);
		}
		else {
			parseTrackMessage(m);
		}
	}
}
コード例 #3
0
ファイル: oscReceiver.cpp プロジェクト: NORMALS/A_P_P_A_R_E_L
//--------------------------------------------------------------
void oscReceiver::update()
{
    if (hasWaitingMessages())
    {
		while(getNextMessage(&m_oscMessage))
		{
            // int indexArg = 0;
			ofLog() << "oscReceiver::update() - received " << m_oscMessage.getAddress();


			if (m_oscMessage.getAddress() == OSC_MOD_SET_WEIGHT)
			{
				apparelModManager* pModManager = GLOBALS->getModManager();
				if (pModManager)
				{
					// Name of the mod
					string instanceName = m_oscMessage.getArgAsString(0);

					// Get Mod instance
					apparelMod* pMod = pModManager->getMod(instanceName);

					// Exists ??
					if (pMod && pMod->m_isWeightManual)
					{
						pMod->setWeight( m_oscMessage.getArgAsFloat(1) );
					}
				}
			}
			else if (m_oscMessage.getAddress() == OSC_MOD_SET_PARAMETER)
			{
				apparelModManager* pModManager = GLOBALS->getModManager();
				if (pModManager)
				{
					// Name of the mod
					string instanceName = m_oscMessage.getArgAsString(0);

					// Get Mod instance
					apparelMod* pMod = pModManager->getMod(instanceName);

					// Exists ??
					if (pMod)
					{
					  if (m_oscMessage.getNumArgs() == 3)
					  {
						 string parameterName = m_oscMessage.getArgAsString(1);
					  
						 ofAbstractParameter& modParam = pMod->getParameter(parameterName);
						 setParameterValue(modParam, m_oscMessage, 2);
					 
						  //OFAPPLOG->println("instanceName="+instanceName+"/parameterName="+parameterName);
						 // OFAPPLOG->println("value for "+instanceName+"/"+parameterName+"="+modParam.toString());
					  }
					 
					  //
					  else if (m_oscMessage.getNumArgs() == 4)
					  {
						  string groupName = m_oscMessage.getArgAsString(1);
						  string parameterName = m_oscMessage.getArgAsString(2);
						  ofAbstractParameter& modGroupParam = pMod->getParameter(groupName);
						  if (modGroupParam.type()==typeid(ofParameterGroup).name())
						  {
							  setParameterValue(modGroupParam, m_oscMessage, 3);
						  }
					  }
					}
				}
	   		}

		}
	}
}
コード例 #4
0
void ofxTSPSReceiver::update( ofEventArgs &e ){
	
	if(hasWaitingMessages()){
		// check for waiting messages
		while( hasWaitingMessages() ){
			// get the next message
			ofxOscMessage m;
			getNextMessage( &m );
			
			if(m.getAddress() == "TSPS/scene/") {
				scene.idleTime = m.getArgAsFloat(0);
				scene.percentCovered = m.getArgAsFloat(1);
			}
			
			
			if (m.getAddress() == "TSPS/personEntered/" || 
				m.getAddress() == "TSPS/personMoved/" || 
				m.getAddress() == "TSPS/personUpdated/" || 
				m.getAddress() == "TSPS/personWillLeave/"){
				
				int id = m.getArgAsInt32(0);
				bool personIsNew = false;
				ofxTSPSPerson* person = personWithID( id );
				if(person == NULL){
					person = new ofxTSPSPerson(id, trackedPeople.size());
					trackedPeople.push_back(person);
					personIsNew = true;
				}
				person->update( &m );
				
				if(eventListener != NULL){
					if (m.getAddress() == "TSPS/personEntered/" || personIsNew){
						eventListener->personEntered(person, &scene);
					}
					else if (m.getAddress() == "TSPS/personMoved/"){
						eventListener->personMoved(person, &scene);
					}
					else if (m.getAddress() == "TSPS/personUpdated/"){
						eventListener->personUpdated(person, &scene);
						
					}
					else if (m.getAddress() == "TSPS/personWillLeave/"){
						eventListener->personWillLeave(person, &scene);					
					}
				}
				
				if(m.getAddress() == "TSPS/personWillLeave/"){
					for (int i = trackedPeople.size() - 1; i >= 0; i--){
						if (trackedPeople[i]->pid == person->pid){
							trackedPeople.erase(trackedPeople.begin() + i);
							break;
						}
					}
					delete person;				
				}
			}		
		}
	}

	
	//clear orphaned blobs
	for(int i = trackedPeople.size()-1; i >= 0; i--) {
		if(ofGetElapsedTimeMillis()-trackedPeople[i]->updatedAt > personTimeout) {
			trackedPeople.erase(trackedPeople.begin() + i);
			eventListener->personWillLeave(trackedPeople[i], &scene);
		}
	}	
}
コード例 #5
0
ファイル: oscReceiver.cpp プロジェクト: valereA/murmur
//--------------------------------------------------------------
void oscReceiver::update()
{
    DeviceManager* pDeviceManager = Globals::instance()->mp_deviceManager;
	
    if (hasWaitingMessages())
    {
		while(getNextMessage(&m_oscMessage))
		{
            int indexArg = 0;

            if (m_oscMessage.getAddress() == OSC_ADDRESS_SET_DEVICE_PROP)
            {
                Device* pDevice = pDeviceManager->getDeviceById( m_oscMessage.getArgAsString(indexArg++) );
                if (pDevice)
				{
                    // Property
                    string propName = m_oscMessage.getArgAsString(indexArg++);
                 
					if (propName == "volMax")
                    {
                        pDevice->setSoundInputVolumeMaxOSC( m_oscMessage.getArgAsFloat(indexArg) );
                    }
                    else
                    if (propName == "volHistorySize")
                    {
                        pDevice->setSoundInputVolHistorySizeOSC( m_oscMessage.getArgAsInt32(indexArg) );
                    }
                    else
                    if (propName == "volHistoryTh")
                    {
                        pDevice->setSoundInputVolHistoryThOSC( m_oscMessage.getArgAsFloat(indexArg) );
                    }
                    else
                    if (propName == "enableStandbyMode")
                    {
                        pDevice->setEnableStandbyModeOSC( m_oscMessage.getArgAsInt32(indexArg)==1 ? true : false );
                    }
                    else
                    if (propName == "timeStandby")
                    {
                        //printf("timeStandby = %.3f - ", m_oscMessage.getArgAsFloat(indexArg));
                        pDevice->setTimeStandbyOSC( m_oscMessage.getArgAsFloat(indexArg) );
                    }
                    else
                    if (propName == "sampleVolStandby")
					{
                        pDevice->setSampleVolumeStandbyOSC( m_oscMessage.getArgAsFloat(indexArg) );
					}
                    else
                    if (propName == "nbLEDsStandby")
                    {
                        // pDevice->setNbLEDsStandbyOSC( m_oscMessage.getArgAsInt32(indexArg) );
                    }
                    else
                    if (propName == "speedStandby")
                    {
                        // pDevice->setSpeedStandbyOSC( m_oscMessage.getArgAsFloat(indexArg) );
                    }
                    
                }
            }
            else
            if (m_oscMessage.getAddress() == OSC_ADDRESS_SEND_PACKETS)
            {
                if (pDeviceManager)
                {
                    string deviceId = m_oscMessage.getArgAsString(indexArg++);
                    Device* pDevice = pDeviceManager->getDeviceById( deviceId );

                    // Not found, create the device now
                    if (pDevice == 0)
                    {
                        // TODO : type ? -> factory
                        if (Globals::instance()->mp_app->isSimulation == false)
                        {
                            int nbLEDs = m_oscMessage.getNumArgs() - indexArg; // WARNING with this
                            printf("> New Device found ! id=%s, nbLEDs=%d\n", deviceId.c_str(), nbLEDs);

                            
                            DeviceEcho* pDeviceEcho = new DeviceEcho(deviceId, nbLEDs, 4.0f/float(nbLEDs-1));
                            pDeviceEcho->setupSenderOSC(m_oscMessage.getRemoteIp(), 1235);
                            pDeviceEcho->loadXML("Config/devices/");

                            // Add device to list
                            pDeviceManager->addDevice(pDeviceEcho);
                            
                            // TEMP / TODO : attach to surface main
                            if (Globals::instance()->mp_app->mp_surfaceMain)
                                Globals::instance()->mp_app->mp_surfaceMain->addDevice(pDeviceEcho);

                            // Create a node in visualisation scene
                            Globals::instance()->mp_app->createDeviceNodeInScene(pDeviceEcho);

                            // Update interface
                         
							//Globals::instance()->mp_app->guiMarkUpdateLayout();
                            Globals::instance()->mp_app->guiUpdateListDevices();
                            Globals::instance()->mp_app->selectDevice(pDeviceEcho->m_id);
                        
                            // TODO : Send configuration parameters to it (if any)
                        }
                    }
                    
                    // Decode new message
                    if (pDevice)
                    {
                        pDevice->onReceivePacketBegin();
                        
                        int nbPackets = m_oscMessage.getNumArgs() - indexArg; // TODO : Be careful with this
                        for (int i=0;i<nbPackets;i++)
                        {
                            m_packetTemp.m_volume = m_oscMessage.getArgAsFloat(indexArg++);
                            // TODO : Other arguments to decode here
                            
                            // Send to device
                            pDevice->onReceivePacket(&m_packetTemp);

                        }

                        pDevice->onReceivePacketEnd();

                        // Get the surface of device and update animation
                        Surface* pSurface = Globals::instance()->mp_app->getSurfaceForDevice(pDevice);
                        
                        if (pSurface){
                            pSurface->onNewPacket( pDevice->getLastPacket(), pDevice->m_id );
                        }
                    
                    }
                }
            }
            
            
            
            // New Device plugged
            // printf("osc %s - %d arguments\n", m_oscMessage.getAddress().c_str(), m_oscMessage.getNumArgs());
            
            // New Device event
        }
    }
}