private static void handleTrack( Track outputTrack, Track inputTrack, long startTick, long endTick) { // handle all other events for (int eventI = 0; eventI < inputTrack.size(); eventI++) { MidiEvent midEvent = inputTrack.get(eventI); if (!Note.isNoteOnEvent(midEvent)) { if (!Note.isNoteOffEvent(midEvent)) { outputTrack.add(midEvent); } } } // handle all note events NoteTrack noteTrack = new NoteTrack(inputTrack); for (int i = 0; i < noteTrack.size(); i++) { Note thisNote = noteTrack.get(i); List<Note> followingNotes = findFollowingNotes(noteTrack, i); Note newNote = handleNote(thisNote, followingNotes, startTick, endTick); outputTrack.add(newNote.getNoteOnEvent()); outputTrack.add(newNote.getNoteOffEvent()); } }