annotate hackday/testApp.cpp @ 30:be2e779d76b5

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