void ofApplication::handleTouchPadMessage(ofxOscMessage &m) { string a = m.getAddress(); int a_len = a.length(); int r_len = string("/oF/multiPad/").length(); if (a_len > r_len) { string mRouteStr = a.substr(r_len, a_len-r_len); int touchIndex = atoi(&mRouteStr.at(0)); int delim_pos = mRouteStr.find("/"); if (delim_pos != string::npos) { // z-message if (mRouteStr.at(mRouteStr.length()-1) == 'z') { bool on = m.getArgAsFloat(0) != 0.0; if (!on){ touchMap.erase(touchIndex); } } } else { // x-y are swapped in touchOSC landscape touchMap[touchIndex] = ofVec2f(m.getArgAsFloat(1), m.getArgAsFloat(0)); } } }
//---------- 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))); } }
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; }
ofVec3f getOscMessageValue(const ofxOscMessage& message) { auto size = message.getNumArgs(); if (size == 3) { return ofVec3f(message.getArgAsFloat(0), message.getArgAsFloat(1), message.getArgAsFloat(2)); } else { logInvalidSize(message); return ofVec3f(0); } }
void DelaunayVisualization::handleOscMessage(ofxOscMessage m){ string address = m.getAddress(); const string delaunayColorHS = "/showrunner/delaunay/colorhs"; const string delaunayColorB = "/showrunner/delaunay/colorb"; if(address == delaunayColorHS){ colorH=m.getArgAsFloat(0)*255; colorS=m.getArgAsFloat(1)*255; }else if(address == delaunayColorB){ colorB= m.getArgAsFloat(0)*255; } }
void AbletonGui::parseMessage(ofxOscMessage & msg) { string address = msg.getAddress(); if (address == addressRoot) { for (int idx = 0; idx < min((int)sliders.size(), msg.getNumArgs()); idx++) { sliders[idx]->setValue(msg.getArgAsFloat(idx)); } } else if (activeAddresses.count(address) >0) { activeAddresses[address]->setValue(msg.getArgAsFloat(0)); } }
///-------------------------------------------------------------- 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); } }
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 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); } }
//-------------------------------------------------------------- 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 << "."; }
ofFloatColor getOscMessageValue(const ofxOscMessage& message) { auto size = message.getNumArgs(); if (size == 3) { return ofFloatColor(message.getArgAsFloat(0), message.getArgAsFloat(1), message.getArgAsFloat(2), 1); } else if (size == 4) { return ofFloatColor(message.getArgAsFloat(0), message.getArgAsFloat(1), message.getArgAsFloat(2), message.getArgAsFloat(3)); } else { logInvalidSize(message); return ofFloatColor(0, 0, 0, 1); } }
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.); } } }
float ofApp::getFromEarChannels(ofxOscMessage& msg) { float avg = 0; avg += msg.getArgAsFloat(0); avg += msg.getArgAsFloat(3); avg /= 2; return avg; }
float ofApp::getFromForeheadChannels(ofxOscMessage& msg) { float avg = 0; avg += msg.getArgAsFloat(1); avg += msg.getArgAsFloat(2); avg /= 2; return avg; }
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; }
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; }
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"; }
///-------------------------------------------------------------- void AbletonManager::onTempoChanged(ofxOscMessage &m) { /** * Response for tempo changes: * /live/tempo * (float) tempo */ float newTempo = m.getArgAsFloat(0); ofNotifyEvent(eventTempoChanged, newTempo, this); }
//-------------------------------------------------------------- float ofApp::getAverageFromChannels(ofxOscMessage& msg) { float avg = 0; int channels = msg.getNumArgs(); for(int i = 0; i < channels; i++) { avg += msg.getArgAsFloat(i); } avg /= channels; return avg; }
float ofApp::getHighestFromChannels(ofxOscMessage& msg) { float highest = 0; int channels = msg.getNumArgs(); for(int i = 0; i < channels; i++) { float channelValue = msg.getArgAsFloat(i); if(channelValue > highest) highest = channelValue; } return highest; }
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)); } }
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(); }
void FluidVisualization::handleOscMessage(ofxOscMessage m){ string address = m.getAddress(); const string fluidColorHS = "/showrunner/fluid/colorhs"; const string fluidColorB = "/showrunner/fluid/colorb"; const string fluidInk = "/showrunner/fluid/ink"; const string fluidFlame = "/showrunner/fluid/flame"; const string fluidForce = "/showrunner/fluid/force"; const string fluidReset = "/showrunner/fluid/reset"; if(address == fluidFlame){ flame=(m.getArgAsFloat(0) == 1); }else if(address == fluidInk){ ink=(m.getArgAsFloat(0) == 1); }else if(address == fluidForce){ force=(m.getArgAsFloat(0) == 1); }else if(address == fluidReset){ if (m.getArgAsFloat(0) == 1){ fluidSolver.reset(); } }else if(address == fluidColorHS){ colorH=m.getArgAsFloat(0)*255; colorS=m.getArgAsFloat(1)*255; }else if(address == fluidColorB){ colorB= m.getArgAsFloat(0)*255; } }
void AnimatedOSCLines::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]; // cout<<"osc points "<<cmd<<endl; if (cmd == "oscPoints"){ ofPolyline p; polylines.clear(); int nbPoints = m.getArgAsInt32(0); for (int i=0; i<nbPoints-1; i++) { p.addVertex(m.getArgAsFloat(1+i*2), m.getArgAsFloat(1+i*2+1)); } // p.addVertex(m.getArgAsFloat(1), m.getArgAsFloat(2)); polylines.push_back(p); } }
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; }
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 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; }
//---------- void OscManager::oscReceiveProcessTouchOscMessage(string address, ofxOscMessage &msg, int idx) { ParameterBase::Type type = inputTrackers[address]->getType(); float value = msg.getArgAsFloat(0); if (type == ParameterBase::VEC2F) { if (idx==1) { float newValue = ofLerp(((Parameter<ofVec2f> *) inputTrackers[address]->parameter)->getMin().x, ((Parameter<ofVec2f> *) inputTrackers[address]->parameter)->getMax().x, value); ((Parameter<ofVec2f> *) inputTrackers[address]->parameter)->getReference()->x = newValue; } else if (idx==2) { float newValue = ofLerp(((Parameter<ofVec2f> *) inputTrackers[address]->parameter)->getMin().y, ((Parameter<ofVec2f> *) inputTrackers[address]->parameter)->getMax().y, value); ((Parameter<ofVec2f> *) inputTrackers[address]->parameter)->getReference()->y = newValue; } } else if (type == ParameterBase::VEC3F) { if (idx==1) { float newValue = ofLerp(((Parameter<ofVec3f> *) inputTrackers[address]->parameter)->getMin().x, ((Parameter<ofVec3f> *) inputTrackers[address]->parameter)->getMax().x, value); ((Parameter<ofVec3f> *) inputTrackers[address]->parameter)->getReference()->x = newValue; } else if (idx==2) { float newValue = ofLerp(((Parameter<ofVec3f> *) inputTrackers[address]->parameter)->getMin().y, ((Parameter<ofVec3f> *) inputTrackers[address]->parameter)->getMax().y, value); ((Parameter<ofVec3f> *) inputTrackers[address]->parameter)->getReference()->y = newValue; } else if (idx==3) { float newValue = ofLerp(((Parameter<ofVec3f> *) inputTrackers[address]->parameter)->getMin().z, ((Parameter<ofVec3f> *) inputTrackers[address]->parameter)->getMax().z, value); ((Parameter<ofVec3f> *) inputTrackers[address]->parameter)->getReference()->z = newValue; } } else if (type == ParameterBase::VEC4F) { if (idx==1) { float newValue = ofLerp(((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getMin().x, ((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getMax().x, value); ((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getReference()->x = newValue; } else if (idx==2) { float newValue = ofLerp(((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getMin().y, ((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getMax().y, value); ((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getReference()->y = newValue; } else if (idx==3) { float newValue = ofLerp(((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getMin().z, ((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getMax().z, value); ((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getReference()->z = newValue; } else if (idx==4) { float newValue = ofLerp(((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getMin().w, ((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getMax().w, value); ((Parameter<ofVec4f> *) inputTrackers[address]->parameter)->getReference()->w = newValue; } } }
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 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; }