void Loop::cleanZeroLengthNotes() { Array<int> matchedNoteOffs; for (int i=0;i<getNumEvents();i++) { if (getEventPointer(i)->message.isNoteOn()) { if (getEventTime(i) == getTimeOfMatchingKeyUp(i) || getTimeOfMatchingKeyUp(i)==0.0) { //zero length note deleteEvent(i,(getTimeOfMatchingKeyUp(i)!=0.0)); updateMatchedPairs(); } } } for (int i=0;i<getNumEvents();i++) { if (getEventPointer(i)->message.isNoteOn() && getIndexOfMatchingKeyUp(i)!=-1) matchedNoteOffs.add(getIndexOfMatchingKeyUp(i)); } for (int i=0;i<getNumEvents();i++) { if (getEventPointer(i)->message.isNoteOff() && !matchedNoteOffs.contains(i)) { //unmatched note-off deleteEvent(i,false); updateMatchedPairs(); break; } } //updateMatchedPairs(); }
void MidiMessageSequence::deleteEvent (const int index, const bool deleteMatchingNoteUp) { if (isPositiveAndBelow (index, list.size())) { if (deleteMatchingNoteUp) deleteEvent (getIndexOfMatchingKeyUp (index), false); list.remove (index); } }