diff options
author | David Robillard <drobilla@leibniz.local> | 2014-12-19 18:09:36 -0500 |
---|---|---|
committer | David Robillard <drobilla@leibniz.local> | 2014-12-20 01:13:25 -0500 |
commit | 5d8021bf44c066ad9b5ee4e8ab824267824be738 (patch) | |
tree | b2ebd105b0057f23fb5d59e7504c2fbd8e026621 /libs/ardour/midi_playlist.cc | |
parent | db92d62c95773d78282e752df7589cc6b8b721c3 (diff) |
Maintain correct tracker state on MIDI overwrite.
This is a little hard-edged in that edits while rolling will prematurely chop
off any playing notes, but at least the state of things actually reflects
reality. More sophisticated solution hopefully to come...
Diffstat (limited to 'libs/ardour/midi_playlist.cc')
-rw-r--r-- | libs/ardour/midi_playlist.cc | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/libs/ardour/midi_playlist.cc b/libs/ardour/midi_playlist.cc index 36b6fce75f..63c3b49858 100644 --- a/libs/ardour/midi_playlist.cc +++ b/libs/ardour/midi_playlist.cc @@ -288,14 +288,27 @@ MidiPlaylist::read (Evoral::EventSink<framepos_t>& dst, framepos_t start, framec } void -MidiPlaylist::clear_note_trackers () +MidiPlaylist::reset_note_trackers () { Playlist::RegionWriteLock rl (this, false); for (NoteTrackers::iterator n = _note_trackers.begin(); n != _note_trackers.end(); ++n) { delete n->second; } - DEBUG_TRACE (DEBUG::MidiTrackers, string_compose ("%1 clears all note trackers\n", name())); + DEBUG_TRACE (DEBUG::MidiTrackers, string_compose ("%1 reset all note trackers\n", name())); + _note_trackers.clear (); +} + +void +MidiPlaylist::resolve_note_trackers (Evoral::EventSink<framepos_t>& dst, framepos_t time) +{ + Playlist::RegionWriteLock rl (this, false); + + for (NoteTrackers::iterator n = _note_trackers.begin(); n != _note_trackers.end(); ++n) { + n->second->resolve_notes(dst, time); + delete n->second; + } + DEBUG_TRACE (DEBUG::MidiTrackers, string_compose ("%1 resolve all note trackers\n", name())); _note_trackers.clear (); } |