comparison data/fileio/MIDIFileReader.cpp @ 1363:39271c98cbdd 3.0-integration

Fix compiler warning, remove some debug out
author Chris Cannam
date Tue, 10 Jan 2017 16:56:48 +0000
parents 26cf6d5251ec
children 48e9f538e6e9
comparison
equal deleted inserted replaced
1362:1bf38a4b91c4 1363:39271c98cbdd
51 using std::map; 51 using std::map;
52 using std::set; 52 using std::set;
53 53
54 using namespace MIDIConstants; 54 using namespace MIDIConstants;
55 55
56 //#define MIDI_SVDEBUG 1 56 //#define MIDI_DEBUG 1
57 57
58 58
59 MIDIFileReader::MIDIFileReader(QString path, 59 MIDIFileReader::MIDIFileReader(QString path,
60 MIDIFileImportPreferenceAcquirer *acquirer, 60 MIDIFileImportPreferenceAcquirer *acquirer,
61 sv_samplerate_t mainModelSampleRate) : 61 sv_samplerate_t mainModelSampleRate) :
321 SVDEBUG << "Parsing Track " << j << endl; 321 SVDEBUG << "Parsing Track " << j << endl;
322 #endif 322 #endif
323 323
324 if (!skipToNextTrack()) { 324 if (!skipToNextTrack()) {
325 #ifdef MIDI_DEBUG 325 #ifdef MIDI_DEBUG
326 cerr << "Couldn't find Track " << j << endl; 326 SVDEBUG << "Couldn't find Track " << j << endl;
327 #endif 327 #endif
328 m_error = "File corrupted or in non-standard format?"; 328 m_error = "File corrupted or in non-standard format?";
329 m_format = MIDI_FILE_BAD_FORMAT; 329 m_format = MIDI_FILE_BAD_FORMAT;
330 goto done; 330 goto done;
331 } 331 }
332 332
333 #ifdef MIDI_DEBUG 333 #ifdef MIDI_DEBUG
334 cerr << "Track has " << m_trackByteCount << " bytes" << endl; 334 SVDEBUG << "Track has " << m_trackByteCount << " bytes" << endl;
335 #endif 335 #endif
336 336
337 // Run through the events taking them into our internal 337 // Run through the events taking them into our internal
338 // representation. 338 // representation.
339 if (!parseTrack(i)) { 339 if (!parseTrack(i)) {
340 #ifdef MIDI_DEBUG 340 #ifdef MIDI_DEBUG
341 cerr << "Track " << j << " parsing failed" << endl; 341 SVDEBUG << "Track " << j << " parsing failed" << endl;
342 #endif 342 #endif
343 m_error = "File corrupted or in non-standard format?"; 343 m_error = "File corrupted or in non-standard format?";
344 m_format = MIDI_FILE_BAD_FORMAT; 344 m_format = MIDI_FILE_BAD_FORMAT;
345 goto done; 345 goto done;
346 } 346 }
474 474
475 while (!m_midiFile->eof() && (m_trackByteCount > 0)) { 475 while (!m_midiFile->eof() && (m_trackByteCount > 0)) {
476 476
477 if (eventCode < 0x80) { 477 if (eventCode < 0x80) {
478 #ifdef MIDI_DEBUG 478 #ifdef MIDI_DEBUG
479 cerr << "WARNING: Invalid event code " << eventCode 479 SVDEBUG << "WARNING: Invalid event code " << eventCode
480 << " in MIDI file" << endl; 480 << " in MIDI file" << endl;
481 #endif 481 #endif
482 throw MIDIException(tr("Invalid event code %1 found").arg(int(eventCode))); 482 throw MIDIException(tr("Invalid event code %1 found").arg(int(eventCode)));
483 } 483 }
484 484
485 deltaTime = getNumberFromMIDIBytes(); 485 deltaTime = getNumberFromMIDIBytes();
486 486
487 #ifdef MIDI_DEBUG 487 #ifdef MIDI_DEBUG
488 cerr << "read delta time " << deltaTime << endl; 488 SVDEBUG << "read delta time " << deltaTime << endl;
489 #endif 489 #endif
490 490
491 // Get a single byte 491 // Get a single byte
492 midiByte = getMIDIByte(); 492 midiByte = getMIDIByte();
493 493
503 #ifdef MIDI_DEBUG 503 #ifdef MIDI_DEBUG
504 SVDEBUG << "using running status (byte " << int(midiByte) << " found)" << endl; 504 SVDEBUG << "using running status (byte " << int(midiByte) << " found)" << endl;
505 #endif 505 #endif
506 } else { 506 } else {
507 #ifdef MIDI_DEBUG 507 #ifdef MIDI_DEBUG
508 cerr << "have new event code " << int(midiByte) << endl; 508 SVDEBUG << "have new event code " << int(midiByte) << endl;
509 #endif 509 #endif
510 eventCode = midiByte; 510 eventCode = midiByte;
511 data1 = getMIDIByte(); 511 data1 = getMIDIByte();
512 } 512 }
513 513
515 515
516 metaEventCode = data1; 516 metaEventCode = data1;
517 messageLength = getNumberFromMIDIBytes(); 517 messageLength = getNumberFromMIDIBytes();
518 518
519 //#ifdef MIDI_DEBUG 519 //#ifdef MIDI_DEBUG
520 cerr << "Meta event of type " << int(metaEventCode) << " and " << messageLength << " bytes found, putting on track " << metaTrack << endl; 520 SVDEBUG << "Meta event of type " << int(metaEventCode) << " and " << messageLength << " bytes found, putting on track " << metaTrack << endl;
521 //#endif 521 //#endif
522 metaMessage = getMIDIBytes(messageLength); 522 metaMessage = getMIDIBytes(messageLength);
523 523
524 long gap = accumulatedTime - trackTimeMap[metaTrack]; 524 long gap = accumulatedTime - trackTimeMap[metaTrack];
525 accumulatedTime += deltaTime; 525 accumulatedTime += deltaTime;
570 570
571 // create and store our event 571 // create and store our event
572 midiEvent = new MIDIEvent(deltaTime, eventCode, data1, data2); 572 midiEvent = new MIDIEvent(deltaTime, eventCode, data1, data2);
573 573
574 /* 574 /*
575 cerr << "MIDI event for channel " << channel << " (track " 575 SVDEBUG << "MIDI event for channel " << channel << " (track "
576 << trackNum << ")" << endl; 576 << trackNum << ")" << endl;
577 midiEvent->print(); 577 midiEvent->print();
578 */ 578 */
579 579
580 580
603 603
604 case MIDI_SYSTEM_EXCLUSIVE: 604 case MIDI_SYSTEM_EXCLUSIVE:
605 messageLength = getNumberFromMIDIBytes(data1); 605 messageLength = getNumberFromMIDIBytes(data1);
606 606
607 #ifdef MIDI_DEBUG 607 #ifdef MIDI_DEBUG
608 cerr << "SysEx of " << messageLength << " bytes found" << endl; 608 SVDEBUG << "SysEx of " << messageLength << " bytes found" << endl;
609 #endif 609 #endif
610 610
611 metaMessage= getMIDIBytes(messageLength); 611 metaMessage= getMIDIBytes(messageLength);
612 612
613 if (MIDIByte(metaMessage[metaMessage.length() - 1]) != 613 if (MIDIByte(metaMessage[metaMessage.length() - 1]) !=
707 // Add any tempo events found in the given track to the global tempo map. 707 // Add any tempo events found in the given track to the global tempo map.
708 // 708 //
709 void 709 void
710 MIDIFileReader::updateTempoMap(unsigned int track) 710 MIDIFileReader::updateTempoMap(unsigned int track)
711 { 711 {
712 cerr << "updateTempoMap for track " << track << " (" << m_midiComposition[track].size() << " events)" << endl; 712 SVDEBUG << "updateTempoMap for track " << track << " (" << m_midiComposition[track].size() << " events)" << endl;
713 713
714 for (MIDITrack::iterator i = m_midiComposition[track].begin(); 714 for (MIDITrack::iterator i = m_midiComposition[track].begin();
715 i != m_midiComposition[track].end(); ++i) { 715 i != m_midiComposition[track].end(); ++i) {
716 716
717 if ((*i)->isMeta() && 717 if ((*i)->isMeta() &&
721 MIDIByte m1 = (*i)->getMetaMessage()[1]; 721 MIDIByte m1 = (*i)->getMetaMessage()[1];
722 MIDIByte m2 = (*i)->getMetaMessage()[2]; 722 MIDIByte m2 = (*i)->getMetaMessage()[2];
723 723
724 long tempo = (((m0 << 8) + m1) << 8) + m2; 724 long tempo = (((m0 << 8) + m1) << 8) + m2;
725 725
726 cerr << "updateTempoMap: have tempo, it's " << tempo << " at " << (*i)->getTime() << endl; 726 SVDEBUG << "updateTempoMap: have tempo, it's " << tempo << " at " << (*i)->getTime() << endl;
727 727
728 if (tempo != 0) { 728 if (tempo != 0) {
729 double qpm = 60000000.0 / double(tempo); 729 double qpm = 60000000.0 / double(tempo);
730 m_tempoMap[(*i)->getTime()] = 730 m_tempoMap[(*i)->getTime()] =
731 TempoChange(RealTime::zeroTime, qpm); 731 TempoChange(RealTime::zeroTime, qpm);
784 784
785 /* 785 /*
786 SVDEBUG << "MIDIFileReader::getTimeForMIDITime(" << midiTime << ")" 786 SVDEBUG << "MIDIFileReader::getTimeForMIDITime(" << midiTime << ")"
787 << endl; 787 << endl;
788 SVDEBUG << "timing division = " << td << endl; 788 SVDEBUG << "timing division = " << td << endl;
789 cerr << "nearest tempo event (of " << m_tempoMap.size() << ") is at " << tempoMIDITime << " (" 789 SVDEBUG << "nearest tempo event (of " << m_tempoMap.size() << ") is at " << tempoMIDITime << " ("
790 << tempoRealTime << ")" << endl; 790 << tempoRealTime << ")" << endl;
791 cerr << "quarters since then = " << quarters << endl; 791 SVDEBUG << "quarters since then = " << quarters << endl;
792 cerr << "tempo = " << tempo << " quarters per minute" << endl; 792 SVDEBUG << "tempo = " << tempo << " quarters per minute" << endl;
793 cerr << "seconds since then = " << seconds << endl; 793 SVDEBUG << "seconds since then = " << seconds << endl;
794 SVDEBUG << "resulting time = " << (tempoRealTime + RealTime::fromSeconds(seconds)) << endl; 794 SVDEBUG << "resulting time = " << (tempoRealTime + RealTime::fromSeconds(seconds)) << endl;
795 */ 795 */
796 796
797 return tempoRealTime + RealTime::fromSeconds(seconds); 797 return tempoRealTime + RealTime::fromSeconds(seconds);
798 } 798 }
926 NoteModel *model = 0; 926 NoteModel *model = 0;
927 927
928 if (existingModel) { 928 if (existingModel) {
929 model = dynamic_cast<NoteModel *>(existingModel); 929 model = dynamic_cast<NoteModel *>(existingModel);
930 if (!model) { 930 if (!model) {
931 cerr << "WARNING: MIDIFileReader::loadTrack: Existing model given, but it isn't a NoteModel -- ignoring it" << endl; 931 SVDEBUG << "WARNING: MIDIFileReader::loadTrack: Existing model given, but it isn't a NoteModel -- ignoring it" << endl;
932 } 932 }
933 } 933 }
934 934
935 if (!model) { 935 if (!model) {
936 model = new NoteModel(m_mainModelSampleRate, 1, 0.0, 0.0, false); 936 model = new NoteModel(m_mainModelSampleRate, 1, 0.0, 0.0, false);