| 279 | } |
| 280 | |
| 281 | void 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; |
nothing calls this directly
no test coverage detected