- if (mr) {
-
- NoteTrackers::iterator t = _note_trackers.find (mr.get());
- MidiStateTracker* tracker;
- bool new_tracker = false;
-
- if (t == _note_trackers.end()) {
- tracker = new MidiStateTracker;
- new_tracker = true;
- DEBUG_TRACE (DEBUG::MidiPlaylistIO, "\tBEFORE: new tracker\n");
- } else {
- tracker = t->second;
- DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("\tBEFORE: tracker says there are %1 on notes", tracker->on()));
- }
-
- mr->read_at (dst, start, dur, chan_n, _note_mode, tracker);
- DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("\tAFTER: tracker says there are %1 on notes", tracker->on()));
-
- if (new_tracker) {
- pair<Region*,MidiStateTracker*> newpair;
- newpair.first = mr.get();
- newpair.second = tracker;
- _note_trackers.insert (newpair);
- DEBUG_TRACE (DEBUG::MidiPlaylistIO, "\tadded tracker to trackers\n");
- }
-
- _read_data_count += mr->read_data_count();
- }
-
- } else {
-
- /* multiple regions and/or note resolution: sort by layer, read into a temporary non-monotonically
- sorted EventSink, sort and then insert into dst.
- */
-
- DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("%1 regions to read, plus %2 trackers\n", regs.size(), tracker_info.size()));
-
- Evoral::EventList<nframes_t> evlist;
-
- for (vector<TrackerInfo>::iterator t = tracker_info.begin(); t != tracker_info.end(); ++t) {
- DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("Resolve %1 notes\n", (*t).first->on()));
- (*t).first->resolve_notes (evlist, (*t).second);
- delete (*t).first;