annotate jnmr/testApp.cpp @ 36:5a1b0c6fa1fb

Added class to read in the csv Annotation file, then write out the respective difference between the performed piece as followed here, and the annotation of RWC by Ewert and Muller
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Thu, 15 Dec 2011 02:28:49 +0000
parents 6cd3e0075adf
children 795a99987875
rev   line source
andrew@33 1 #include "testApp.h"
andrew@33 2
andrew@33 3
andrew@33 4 testApp::testApp(ofxArgs* args){
andrew@33 5 this->args = args;
andrew@33 6 }
andrew@33 7
andrew@33 8 //--------------------------------------------------------------
andrew@33 9 void testApp::setup(){
andrew@36 10
andrew@33 11
andrew@35 12 midiEvents.fileOutput = &myfile;
andrew@34 13
andrew@35 14 string root = "../../../data/FilesOut/exampletest.txt";
andrew@34 15 myfile.open("../../../data/FilesOut/exampletest.txt");
andrew@34 16 if (myfile.is_open())
andrew@34 17 {
andrew@35 18 // myfile << "This is a line.\n";
andrew@35 19 // myfile << "This is another line.\n";
andrew@35 20 // myfile.close();
andrew@34 21 printf("WRITING TO TEXT FILE\n");
andrew@34 22 }
andrew@34 23 else cout << "Unable to open file";
andrew@34 24
andrew@34 25
andrew@33 26 this->args->printArgs();
andrew@33 27 this->args->printOpts();
andrew@33 28 midiFileName = "../../../data/frerejacques.mid";
andrew@33 29
andrew@33 30 if (this->args->getCount() > 0){
andrew@33 31 museScoreFilename = this->args->getString(1);
andrew@33 32 //printf("MUSESCORE FILENAME IS %s\n", museScoreFilename);
andrew@33 33 cout << "running!! " << museScoreFilename << endl;
andrew@33 34 midiFileName = museScoreFilename;
andrew@33 35 }
andrew@33 36
andrew@33 37 int retVal = cannamMainFunction();
andrew@33 38
andrew@33 39 ofSetVerticalSync(true);
andrew@33 40 //ofBackground(255,255,255);
andrew@33 41 midiPort = 2;
andrew@33 42 midiIn.listPorts();
andrew@33 43 midiIn.openPort(midiPort);
andrew@33 44 midiPortName = "";
andrew@33 45 //midiPortName = midiIn.portNames(midiPort);
andrew@33 46
andrew@33 47 transpose = 0;
andrew@33 48 noteInStream.transposeVal = &transpose;
andrew@33 49
andrew@34 50 noteInStream.startTime = &midiEvents.startPlayingTime;//point start time of note in stream to the same time in MIDI events
andrew@33 51
andrew@33 52 noteInStream.factor = &midiEvents.ticksFactor;
andrew@33 53 printf("TICKS FACTOR %f \n", midiEvents.ticksFactor);//noteInStream->factor)
andrew@33 54
andrew@33 55 // portName = "hello";//midiIn.portNames[2];
andrew@33 56 // printf("MIDI PORT %c\n", portName);
andrew@33 57 cout << "MIDI PORT " << endl;//portName << endl;
andrew@33 58
andrew@33 59
andrew@33 60 //midiIn.addListener(this);
andrew@33 61 ofAddListener(midiIn.newMessageEvent, this, &testApp::newMessage);
andrew@33 62
andrew@33 63
andrew@33 64 verdana30.loadFont("verdana.ttf", 50, true, true);
andrew@33 65 verdana30.setLineHeight(48.0f);
andrew@33 66 verdana30.setLetterSpacing(1.035);
andrew@33 67
andrew@33 68 playing = false;
andrew@33 69 readyToStart = true;
andrew@33 70
andrew@33 71 receiver.setup( PORT );
andrew@33 72
andrew@33 73 sender.setup( HOST, SEND_PORT );
andrew@33 74
andrew@33 75 screenWidth = ofGetWidth();
andrew@33 76 screenHeight = ofGetHeight();
andrew@33 77 midiEvents.screenWidth = &screenWidth;
andrew@33 78 midiEvents.screenHeight = &screenHeight;
andrew@33 79 midiEvents.drawTempoMode = true;
andrew@33 80 ofSetFrameRate(30);
andrew@33 81
andrew@33 82 midiEvents.ticksPerScreen += 4000;
andrew@33 83 lastScoreIndexSent = 0;
andrew@33 84 performanceRating = 0.0;
andrew@33 85
andrew@33 86 liveInputPlaying = false;
andrew@33 87 lastScoreIndexSent = 0;
andrew@33 88 midiEvents.bestMatchIndex = 0;
andrew@33 89
andrew@33 90 }
andrew@33 91
andrew@33 92 //--------------------------------------------------------------
andrew@33 93 void testApp::update(){
andrew@33 94 if (playing){
andrew@33 95 midiEvents.updatePlayPosition();//this fn calls midiEvents.bayesStruct.updateBestEstimate();
andrew@33 96 }
andrew@33 97 // drawer.tickLocation+=20;
andrew@33 98
andrew@33 99 // check for waiting messages
andrew@33 100 while( receiver.hasWaitingMessages() )
andrew@33 101 {
andrew@33 102 ofxOscMessage m;
andrew@33 103 receiver.getNextMessage( &m );
andrew@33 104
andrew@33 105 if ( m.getAddress() == "/midinoteon" )
andrew@33 106 {
andrew@33 107 int newMidiOnPitch = m.getArgAsInt32(0) + transpose;
andrew@33 108 int velocity = m.getArgAsInt32(1);
andrew@33 109 double time = m.getArgAsFloat(2);
andrew@33 110
andrew@33 111 if (velocity != 0){
andrew@33 112 if (readyToStart){
andrew@33 113 startPlaying();
andrew@33 114 printf("starting to PLAY!!!");
andrew@33 115 }
andrew@34 116 // printf("MIDI NOTE %i \n", newMidiOnPitch);
andrew@33 117 midiEvents.newNoteOnEvent(newMidiOnPitch, velocity, time);
andrew@33 118 noteInStream.newNoteCounted(newMidiOnPitch);
andrew@33 119 }
andrew@33 120
andrew@33 121 }
andrew@33 122
andrew@33 123 if ( m.getAddress() == "/setSpeedPrior" )
andrew@33 124 {
andrew@33 125 float speedPrior = m.getArgAsFloat(0);
andrew@33 126 printf("speed prior set to %f\n", speedPrior);
andrew@33 127 midiEvents.speedPriorValue = speedPrior;
andrew@34 128 //midiEvents.bayesStruct.speedPriorValue = speedPrior;
andrew@33 129 }
andrew@33 130
andrew@33 131 if ( m.getAddress() == "/startplaying" )
andrew@33 132 {
andrew@35 133 // prepareToStartOnNextNote();
andrew@35 134 startPlaying();
andrew@33 135 }
andrew@33 136
andrew@33 137 if ( m.getAddress() == "/stopplaying" )
andrew@33 138 {
andrew@33 139 stopPlaying();
andrew@35 140 myfile.close();
andrew@33 141 }
andrew@33 142
andrew@33 143
andrew@33 144 if ( m.getAddress() == "/integratedEstimate" )
andrew@33 145 {
andrew@33 146 midiEvents.bayesStruct.usingIntegratedTempoEstimate = true;
andrew@33 147 }
andrew@33 148
andrew@33 149 if ( m.getAddress() == "/MAPestimate" )
andrew@33 150 {
andrew@33 151 midiEvents.bayesStruct.usingIntegratedTempoEstimate = false;
andrew@33 152 }
andrew@33 153
andrew@33 154
andrew@33 155 if ( m.getAddress() == "/realtime" )
andrew@33 156 {
andrew@33 157 midiEvents.runningInRealTime = true;
andrew@33 158 }
andrew@33 159
andrew@33 160
andrew@33 161 if ( m.getAddress() == "/offline" )
andrew@33 162 {
andrew@33 163 midiEvents.runningInRealTime = false;
andrew@33 164 }
andrew@33 165
andrew@33 166 if ( m.getAddress() == "/minimumSpeedRatio" )
andrew@33 167 {
andrew@33 168
andrew@33 169 float minSpeed = m.getArgAsFloat(0);
andrew@33 170 //printf("minimum speed received is %f and max is %f\n", minSpeed, midiEvents.bayesStruct.relativeSpeedLikelihood.getIndexInRealTerms(midiEvents.bayesStruct.relativeSpeedLikelihood.length-1));
andrew@33 171 if (minSpeed > 0 && minSpeed < midiEvents.bayesStruct.relativeSpeedLikelihood.getIndexInRealTerms(midiEvents.bayesStruct.relativeSpeedLikelihood.length-1)){
andrew@33 172 printf("minimum speed accepted is %f\n", minSpeed);
andrew@33 173 midiEvents.minimumMatchSpeed = minSpeed;
andrew@33 174 }
andrew@33 175 }
andrew@33 176
andrew@33 177 if ( m.getAddress() == "/maximumSpeedRatio" )
andrew@33 178 {
andrew@33 179
andrew@33 180 float maxSpeed = m.getArgAsFloat(0);
andrew@33 181 //printf("minimum speed received is %f and max is %f\n", minSpeed, midiEvents.bayesStruct.relativeSpeedLikelihood.getIndexInRealTerms(midiEvents.bayesStruct.relativeSpeedLikelihood.length-1));
andrew@33 182 if (maxSpeed > midiEvents.minimumMatchSpeed && maxSpeed <= midiEvents.bayesStruct.relativeSpeedLikelihood.getIndexInRealTerms(midiEvents.bayesStruct.relativeSpeedLikelihood.length-1)){
andrew@33 183 printf("maximum speed accepted is %f\n", maxSpeed);
andrew@33 184 midiEvents.maximumMatchSpeed = maxSpeed;
andrew@33 185 }
andrew@33 186 }
andrew@33 187
andrew@33 188 if ( m.getAddress() == "/likelihoodToNoiseRatio" )
andrew@33 189 {
andrew@33 190
andrew@33 191 float ratio = m.getArgAsFloat(0);
andrew@33 192
andrew@33 193 if (ratio > 0.001 && ratio < 0.6){
andrew@33 194 midiEvents.likelihoodToNoiseRatio = ratio;
andrew@33 195 printf("likelihood for events relative to noise uses ratio %f\n", ratio);
andrew@33 196 }
andrew@33 197
andrew@33 198 }
andrew@33 199
andrew@34 200 if ( m.getAddress() == "/duration" )
andrew@34 201 {
andrew@34 202
andrew@34 203 float playedDuration = m.getArgAsFloat(0);
andrew@34 204 double recordedDuration = midiEvents.recordedEventTimes[midiEvents.recordedEventTimes.size()-1];
andrew@34 205 midiEvents.speedPriorValue = recordedDuration/playedDuration;
andrew@34 206 printf("played duration %f, recorded %f\n", playedDuration, recordedDuration);
andrew@34 207 printf("speed prior set to %f\n", midiEvents.bayesStruct.speedPriorValue);
andrew@34 208
andrew@34 209 }
andrew@34 210
andrew@34 211
andrew@33 212 }//end while osc
andrew@33 213 if (midiEvents.recordedEventTimes.size() > 0)
andrew@33 214 checkNewScoreNote();
andrew@33 215
andrew@33 216 }
andrew@33 217
andrew@33 218
andrew@33 219 void testApp::checkNewScoreNote(){
andrew@33 220 if (lastScoreIndexSent != midiEvents.bestMatchIndex){
andrew@33 221 //then we send out new note
andrew@33 222 sendNoteToMuseScore();
andrew@33 223 lastScoreIndexSent = midiEvents.bestMatchIndex;
andrew@33 224 findMeasure();
andrew@33 225 }
andrew@33 226 }
andrew@33 227
andrew@33 228 void testApp::findMeasure(){
andrew@33 229 int ticks = midiEvents.recordedNoteOnMatrix[midiEvents.bestMatchIndex][0];
andrew@33 230 int tmpMeasure = lastMeasureSent;
andrew@33 231
andrew@33 232 while (lastMeasureSent > 0 && midiEvents.measureVector[lastMeasureSent] > ticks) {
andrew@33 233 lastMeasureSent--;
andrew@33 234 }
andrew@33 235
andrew@33 236 while (lastMeasureSent < midiEvents.measureVector.size() && midiEvents.measureVector[lastMeasureSent] < ticks) {
andrew@33 237 lastMeasureSent++;
andrew@33 238 }
andrew@33 239 if (lastMeasureSent != tmpMeasure){
andrew@33 240 //sendMeasureToMuseScore();
andrew@33 241 performanceRating = noteInStream.calculateTotalScore(midiEvents);
andrew@33 242 }
andrew@33 243
andrew@33 244
andrew@33 245 }
andrew@33 246
andrew@33 247 void testApp::sendBlackNotes(){
andrew@33 248 ofxOscMessage m;
andrew@33 249 m.setAddress( "/plugin" );
andrew@33 250 string noteString;
andrew@33 251 noteString = "blacknotes.js";
andrew@33 252 m.addStringArg( noteString);
andrew@33 253 sender.sendMessage( m );
andrew@33 254 }
andrew@33 255
andrew@33 256 void testApp::sendNoteToMuseScore(){
andrew@33 257 if (midiEvents.recordedNoteOnMatrix.size() > 0){
andrew@33 258 int ticks = midiEvents.recordedNoteOnMatrix[midiEvents.bestMatchIndex][0];
andrew@33 259 int pitch = midiEvents.recordedNoteOnMatrix[midiEvents.bestMatchIndex][1];
andrew@33 260 // printf("sending to muse score %i, %i \n", ticks, pitch);
andrew@33 261 sendNoteDataByOsc(pitch, ticks);
andrew@33 262 }
andrew@33 263 /*
andrew@33 264 ofxOscMessage m;
andrew@33 265 m.setAddress( "/plugin" );
andrew@33 266 string noteString;
andrew@33 267 noteString = "blackNotes.js";
andrew@33 268 m.addStringArg( noteString);
andrew@33 269 sender.sendMessage( m );
andrew@33 270 */
andrew@33 271
andrew@33 272
andrew@33 273 // /color-note 60,3440
andrew@33 274
andrew@33 275 //crappy javascript message
andrew@33 276 /*
andrew@33 277 ofxOscMessage m;
andrew@33 278 m.setAddress( "/plugin" );
andrew@33 279 string noteString;
andrew@33 280 noteString = "coloronenote.js";
andrew@33 281 noteString += ",myTick,"+ofToString(ticks)+",myPitch,"+ofToString(pitch);
andrew@33 282 // printf("%s\n", noteString);
andrew@33 283 m.addStringArg( noteString);
andrew@33 284 sender.sendMessage( m ); */
andrew@33 285
andrew@33 286
andrew@33 287 // /plugin coloronenote.js mytick 100 mypitch 56;
andrew@33 288 }
andrew@33 289
andrew@33 290 void testApp::sendNoteDataByOsc(const int& pitch, const int& ticks){
andrew@33 291 ofxOscMessage m;
andrew@33 292 m.setAddress( "/color-note" );
andrew@33 293 string noteString;
andrew@33 294 noteString = ofToString(ticks);
andrew@33 295 noteString += ","+ofToString(pitch);
andrew@33 296 m.addStringArg( noteString);
andrew@33 297 sender.sendMessage( m );
andrew@33 298 }
andrew@33 299
andrew@33 300 void testApp::sendMeasureToMuseScore(){
andrew@33 301
andrew@33 302 printf("sending measure to muse score %i \n", lastMeasureSent);
andrew@33 303
andrew@33 304 ofxOscMessage m;
andrew@33 305 m.setAddress( "/select-measure" );
andrew@33 306 m.addIntArg(lastMeasureSent);
andrew@33 307 sender.sendMessage( m );
andrew@33 308
andrew@33 309 // /select-measure 6
andrew@33 310 // /plugin coloronenote.js mytick 100 mypitch 56;
andrew@33 311 }
andrew@33 312
andrew@33 313
andrew@33 314 void testApp::newMessage(ofxMidiEventArgs &args){
andrew@33 315
andrew@33 316 int pitch;
andrew@33 317 if (noteInStream.noteInReceived(args)){
andrew@33 318 double timeNow = ofGetElapsedTimeMillis();
andrew@33 319
andrew@33 320 if (!liveInputPlaying){
andrew@33 321 firstNoteTime = timeNow;
andrew@33 322 liveInputPlaying = true;
andrew@33 323 startPlaying();
andrew@33 324 printf("FIRST LIVE NOTE IS NOW AT TIME %f\n", timeNow);
andrew@33 325 }
andrew@33 326
andrew@33 327 pitch = args.byteOne + transpose;
andrew@33 328
andrew@33 329 midiEvents.newNoteOnEvent(pitch, args.byteTwo, timeNow - firstNoteTime);
andrew@33 330
andrew@33 331
andrew@33 332 int tickTime = midiEvents.getEventTimeTicks(timeNow-firstNoteTime);
andrew@33 333 IntVector v;
andrew@33 334 v.push_back(tickTime);
andrew@33 335 v.push_back(pitch);
andrew@33 336 v.push_back(args.byteTwo);
andrew@33 337 v.push_back(200);//tmp time til note off happens
andrew@33 338 noteInStream.midiInputEvents.push_back(v);
andrew@33 339 noteInStream.midiInputTimes.push_back(timeNow - firstNoteTime);
andrew@33 340 //printf("NOTE %i at time %f at tick time %i\n", pitch, (timeNow - firstNoteTime), tickTime);
andrew@33 341 }
andrew@33 342
andrew@33 343 // cout << "MIDI message [port: " << args.port << ", channel: " << args.channel << ", status: " << args.status << ", byteOne: " << pitch << ", byteTwo: " << args.byteTwo << ", timestamp: " << args.timestamp << "]" << endl;
andrew@33 344 }
andrew@33 345
andrew@33 346 //--------------------------------------------------------------
andrew@33 347 void testApp::draw(){
andrew@33 348
andrew@33 349 midiEvents.drawFile();
andrew@33 350
andrew@33 351 string info = "Measure ";
andrew@33 352 info += ofToString(lastMeasureSent);
andrew@33 353 info += " Last note ";
andrew@33 354 info += ofToString(lastScoreIndexSent);
andrew@33 355
andrew@33 356 ofSetHexColor(0xFF0000);
andrew@33 357 // ofDrawBitmapString(info, 20, 20);
andrew@34 358
andrew@33 359 midiEvents.drawMidiFile(noteInStream.midiInputEvents);
andrew@33 360
andrew@34 361 drawMuseScoreText();
andrew@33 362
andrew@33 363 ofSetHexColor(0x000000);
andrew@33 364 ofDrawBitmapString(midiPortName, 20, ofGetHeight() - 20);
andrew@33 365
andrew@33 366 }
andrew@33 367
andrew@34 368 void testApp::drawMuseScoreText(){
andrew@34 369 string ratingString = ofToString(performanceRating*100,0)+"%";
andrew@34 370 if (performanceRating > 0.84)
andrew@34 371 ratingString += "!* *";
andrew@34 372 string extraText = "";
andrew@34 373 if (performanceRating > 0.9){
andrew@34 374 extraText += " pretty good, huh?";
andrew@34 375 }
andrew@34 376 if (performanceRating > 0.95)
andrew@34 377 extraText = " blimey! ";
andrew@34 378 if (performanceRating > 0.97)
andrew@34 379 extraText = " maestro!";
andrew@34 380
andrew@34 381 ratingString += extraText;
andrew@34 382 verdana30.drawString(ratingString, 20, 60);
andrew@34 383 }
andrew@34 384
andrew@33 385 //--------------------------------------------------------------
andrew@33 386 void testApp::keyPressed(int key){
andrew@33 387
andrew@33 388 if (key == '.'){
andrew@33 389 midiPort++;
andrew@33 390 midiIn.openPort(midiPort);
andrew@33 391 }
andrew@33 392
andrew@33 393 if (key == ',' && midiPort > 0){
andrew@33 394 midiPort--;
andrew@33 395 midiIn.openPort(midiPort);
andrew@33 396 }
andrew@33 397
andrew@33 398 if (key == '-')
andrew@33 399 transpose -= 12;
andrew@33 400
andrew@33 401 if (key == '=')
andrew@33 402 transpose += 12;
andrew@33 403
andrew@33 404 if (key == 'c'){
andrew@33 405 double timenow = ofGetElapsedTimeMillis();
andrew@33 406 midiEvents.exampleCrossUpdate();
andrew@33 407 timenow *= -1;
andrew@33 408 timenow += ofGetElapsedTimeMillis();
andrew@33 409 printf("CROSS UPDATE TOOK %f", timenow);
andrew@33 410 }
andrew@33 411
andrew@33 412 if (key == 'x')
andrew@33 413 sendNoteDataByOsc(60, 0);
andrew@33 414
andrew@33 415 if (key == OF_KEY_LEFT){
andrew@33 416
andrew@33 417 }
andrew@33 418
andrew@33 419 if (key == OF_KEY_RIGHT)
andrew@33 420
andrew@33 421 if (key == OF_KEY_RETURN)
andrew@33 422 stopPlaying();
andrew@33 423
andrew@33 424 if (key == OF_KEY_UP){
andrew@33 425 if (midiEvents.ticksPerScreen >= 4000)
andrew@33 426 midiEvents.ticksPerScreen += 2000;
andrew@33 427 else
andrew@33 428 midiEvents.ticksPerScreen += 500;
andrew@33 429 }
andrew@33 430
andrew@33 431 if (key == 'm'){
andrew@33 432 // midiEvents.findMatch(84, 0, 10000);
andrew@33 433 }
andrew@33 434
andrew@33 435 if (key == 'b'){
andrew@33 436 sendBlackNotes();
andrew@33 437 }
andrew@33 438
andrew@33 439
andrew@33 440 if (key == 'n'){
andrew@33 441 midiEvents.printInterNoteIntervals();
andrew@33 442 }
andrew@33 443
andrew@33 444 if (key == OF_KEY_DOWN){
andrew@33 445 if (midiEvents.ticksPerScreen >= 4000)
andrew@33 446 midiEvents.ticksPerScreen -= 2000;
andrew@33 447 else if (midiEvents.ticksPerScreen > 500)
andrew@33 448 midiEvents.ticksPerScreen -= 500;
andrew@33 449 }
andrew@33 450
andrew@33 451 if (key == 'w')
andrew@33 452 midiEvents.printMatchMatrix();
andrew@33 453
andrew@33 454 if (key == 'k'){
andrew@33 455 noteInStream.printNotes();
andrew@33 456 }
andrew@33 457
andrew@33 458 if (key == 'p'){
andrew@33 459 midiEvents.printNotes();
andrew@33 460 }
andrew@33 461
andrew@33 462 if (key == 'l')
andrew@33 463
andrew@33 464
andrew@33 465 //midiEvents.bayesStruct.decaySpeedDistribution(100);
andrew@33 466
andrew@33 467 if (key == 't')
andrew@33 468 midiEvents.drawTempoMode = !midiEvents.drawTempoMode;
andrew@33 469
andrew@33 470 if (key == 'y')
andrew@33 471 midiEvents.drawPhaseMode = !midiEvents.drawPhaseMode;
andrew@33 472
andrew@33 473 if (key == 'r'){
andrew@33 474 noteInStream.reset();
andrew@33 475 liveInputPlaying = false;
andrew@33 476 stopPlaying();
andrew@33 477 lastMeasureSent = 0;
andrew@33 478 sendMeasureToMuseScore();
andrew@33 479 sendBlackNotes();
andrew@33 480 lastScoreIndexSent = 0;
andrew@33 481 performanceRating = 0;
andrew@33 482
andrew@33 483 }
andrew@33 484
andrew@33 485 if (key == 'o' || key == 'O'){
andrew@33 486 loadRecordedMidiFile();
andrew@33 487 }
andrew@33 488
andrew@33 489
andrew@33 490
andrew@33 491 }
andrew@33 492
andrew@33 493 void testApp::loadRecordedMidiFile(){
andrew@33 494 //open audio file
andrew@33 495 string *filePtr;
andrew@33 496 filePtr = &midiFileName;
andrew@33 497
andrew@33 498 if (getFilenameFromDialogBox(filePtr)){
andrew@33 499 printf("Midifile: Loaded name okay :\n'%s' \n", midiFileName.c_str());
andrew@33 500 cannamMainFunction();
andrew@33 501 }
andrew@33 502 }
andrew@33 503
andrew@33 504 //--------------------------------------------------------------
andrew@33 505 void testApp::keyReleased(int key){
andrew@33 506
andrew@33 507 }
andrew@33 508
andrew@33 509 //--------------------------------------------------------------
andrew@33 510 void testApp::mouseMoved(int x, int y ){
andrew@33 511 midiEvents.mouseX = midiEvents.getEventTimeMillis((x * midiEvents.ticksPerScreen)/ screenWidth);
andrew@33 512 }
andrew@33 513
andrew@33 514 //--------------------------------------------------------------
andrew@33 515 void testApp::mouseDragged(int x, int y, int button){
andrew@33 516
andrew@33 517 }
andrew@33 518
andrew@33 519 //--------------------------------------------------------------
andrew@33 520 void testApp::mousePressed(int x, int y, int button){
andrew@33 521
andrew@33 522 }
andrew@33 523
andrew@33 524 //--------------------------------------------------------------
andrew@33 525 void testApp::mouseReleased(int x, int y, int button){
andrew@33 526
andrew@33 527 }
andrew@33 528
andrew@33 529 //--------------------------------------------------------------
andrew@33 530 void testApp::windowResized(int w, int h){
andrew@33 531 screenWidth = w;
andrew@33 532 screenHeight = h;
andrew@33 533 midiEvents.noteHeight = screenHeight / (float)(midiEvents.noteMaximum - midiEvents.noteMinimum);
andrew@33 534
andrew@33 535 }
andrew@33 536
andrew@33 537 void testApp::prepareToStartOnNextNote(){
andrew@33 538 readyToStart = true;
andrew@33 539 }
andrew@33 540
andrew@33 541
andrew@33 542 void testApp::startPlaying(){
andrew@33 543 playing = !playing;
andrew@33 544 midiEvents.reset();
andrew@33 545 noteInStream.reset();
andrew@33 546 midiEvents.setStartPlayingTimes();
andrew@33 547 sendBlackNotes();
andrew@33 548 readyToStart = false;
andrew@33 549 //this is where we stop and start playing
andrew@33 550 }
andrew@33 551
andrew@33 552 void testApp::stopPlaying(){
andrew@33 553 //midiEvents.printNoteCounter();
andrew@33 554 //noteInStream.printTotalCount();
andrew@33 555
andrew@33 556 noteInStream.calculateTotalScore(midiEvents);
andrew@33 557
andrew@33 558
andrew@33 559 playing = false;
andrew@33 560 liveInputPlaying = false;
andrew@33 561 lastScoreIndexSent = 0;
andrew@33 562 midiEvents.bestMatchIndex = 0;
andrew@33 563 sendNoteToMuseScore();
andrew@33 564
andrew@33 565 }
andrew@33 566
andrew@33 567 bool testApp::getFilenameFromDialogBox(string* fileNameToSave){
andrew@33 568 //this uses a pointer structure within the loader and returns true if the dialogue box was used successfully
andrew@33 569 // first, create a string that will hold the URL
andrew@33 570 string URL;
andrew@33 571
andrew@33 572 // openFile(string& URL) returns 1 if a file was picked
andrew@33 573 // returns 0 when something went wrong or the user pressed 'cancel'
andrew@33 574 int response = ofxFileDialogOSX::openFile(URL);
andrew@33 575 if(response){
andrew@33 576 // now you can use the URL
andrew@33 577 *fileNameToSave = URL;
andrew@33 578 //printf("\n filename is %s \n", soundFileName.c_str());
andrew@33 579 return true;
andrew@33 580 }
andrew@33 581 else {
andrew@33 582 // soundFileName = "OPEN canceled. ";
andrew@33 583 printf("\n open file cancelled \n");
andrew@33 584 return false;
andrew@33 585 }
andrew@33 586
andrew@33 587
andrew@33 588
andrew@33 589 }
andrew@33 590
andrew@33 591
andrew@33 592
andrew@33 593
andrew@33 594 int testApp::cannamMainFunction(){
andrew@33 595
andrew@33 596
andrew@33 597 midiEvents.clearAllEvents();
andrew@33 598
andrew@33 599 //int main(int argc, char **argv)
andrew@33 600 //{
andrew@33 601 // if (argc != 2) {
andrew@33 602 // cerr << "Usage: midifile <file.mid>" << endl;
andrew@33 603 // return 1;
andrew@33 604 // }
andrew@33 605
andrew@33 606 std::string filename = midiFileName;//argv[1];
andrew@33 607
andrew@33 608 // fileLoader.chopBeginning = true;
andrew@33 609 fileLoader.loadFile(filename, midiEvents);
andrew@33 610
andrew@33 611 }//new end of load function
andrew@33 612
andrew@36 613 /*
andrew@36 614 void testApp::readInSomeValues(){
andrew@36 615
andrew@33 616
andrew@36 617 printf("READ FILE\n");
andrew@36 618 ifstream file ( "/Users/andrew/Documents/work/MuseScore/RWC/ANNOTATION/RM-C002_annotation+WavPos.csv" ); // declare file stream: http://www.cplusplus.com/reference/iostream/ifstream/
andrew@36 619 string value;
andrew@36 620 int count = 0;
andrew@36 621 while ( file.good() )
andrew@36 622 {
andrew@36 623 getline ( file, value, ',' ); // read a string until next comma: http://www.cplusplus.com/reference/string/getline/
andrew@36 624 cout << string( value, 1, value.length()-2 ); // display value removing the first and the last character from it
andrew@36 625
andrew@36 626 string::size_type start = value.find_first_not_of(" \t\v");
andrew@36 627 string part = value.substr(start, string::npos);
andrew@36 628 //printf("%s (%i)\n", part.c_str(), count);
andrew@36 629 float my_float;
andrew@36 630 int my_int;
andrew@36 631 switch (count%6) {
andrew@36 632 case 1:
andrew@36 633 printf("reading %s\n", part.c_str());
andrew@36 634 my_float = atof(part.c_str());
andrew@36 635 printf("float is %f\n", my_float);
andrew@36 636 break;
andrew@36 637 case 2:
andrew@36 638 printf("reading %s\n", part.c_str());
andrew@36 639 my_int = atoi(part.c_str());
andrew@36 640 printf("float is %i\n", i);
andrew@36 641 break;
andrew@36 642
andrew@36 643 default:
andrew@36 644 break;
andrew@36 645 }
andrew@36 646 count++;
andrew@36 647 }
andrew@36 648
andrew@36 649 }
andrew@33 650
andrew@36 651 */
andrew@33 652
andrew@36 653