MCPcopy Create free account
hub / github.com/YCAMInterlab/Duration / handleOscIn

Method handleOscIn

Duration/src/DurationController.cpp:281–712  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

279}
280
281void DurationController::handleOscIn(){
282 if(!settings.oscInEnabled){
283 return;
284 }
285
286 //TODO: move parsing and receing to separate different threads?
287 long timelineStartTime = timeline.getCurrentTimeMillis();
288 while(receiver.hasWaitingMessages()){
289
290 ofxOscMessage m;
291 receiver.getNextMessage(&m);
292 bool handled = false;
293 long startTime = recordTimer.getAppTimeMicros();
294 vector<ofxTLPage*>& pages = timeline.getPages();
295 for(int i = 0; i < pages.size(); i++){
296 vector<ofxTLTrack*>& tracks = pages[i]->getTracks();
297 for(int t = 0; t < tracks.size(); t++){
298// cout << " testing against " << "/"+tracks[t]->getDisplayName() << endl;
299 ofxTLTrack* track = tracks[t];
300 ofPtr<ofxTLUIHeader> header = headers[track->getName()];
301 if(header->receiveOSC() && m.getAddress() == ofFilePath::addLeadingSlash(track->getDisplayName()) ){
302
303 if(timeline.getIsPlaying() ){ //TODO: change to isPlaying() && isRecording()
304 if(track->getTrackType() == "Curves"){
305 ofxTLCurves* curves = (ofxTLCurves*)track;
306// cout << "adding value " << m.getArgAsFloat(0) << endl;
307 if(m.getArgType(0) == OFXOSC_TYPE_FLOAT){
308 float value = m.getArgAsFloat(0);
309 if(value != header->lastValueReceived || !header->hasReceivedValue){
310 curves->addKeyframeAtMillis(value, timelineStartTime);
311 header->lastValueReceived = value;
312 header->hasReceivedValue = true;
313 }
314 }
315 }
316 else if(track->getTrackType() == "Bangs"){
317 ofxTLBangs* bangs = (ofxTLBangs*)track;
318 bangs->addKeyframeAtMillis(0,timelineStartTime);
319 }
320 }
321
322 header->lastInputReceivedTime = recordTimer.getAppTimeSeconds();
323 handled = true;
324 }
325 }
326 }
327
328 long endTime = recordTimer.getAppTimeMicros();
329// cout << "receiving message took " << (endTime - startTime) << " micros " << endl;
330 if(handled){
331 return;
332 }
333
334 //check for playback messages
335 if(m.getAddress() == "/duration/open"){
336 if(m.getNumArgs() == 1 && m.getArgType(0) == OFXOSC_TYPE_STRING){
337 string projectPath = m.getArgAsString(0);
338 shouldLoadProject = true;

Callers

nothing calls this directly

Calls 9

receiveOSCMethod · 0.80
getTrackTypeMethod · 0.80
getTrackMethod · 0.80
setSendOSCMethod · 0.80
setReceiveOSCMethod · 0.80
setShouldDeleteMethod · 0.80
setValueRangeMethod · 0.80
setValueMinMethod · 0.80
setValueMaxMethod · 0.80

Tested by

no test coverage detected