-
- if (regs.size() == 1 && tracker_info.empty()) {
-
- /* just a single region - read directly into dst */
-
- DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("Single region (%1) read, no out-of-bound region tracking info\n", regs.front()->name()));
-
- boost::shared_ptr<MidiRegion> mr = boost::dynamic_pointer_cast<MidiRegion>(regs.front());
-
- 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");
- }