diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-05-30 21:37:58 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-05-30 21:37:58 +0000 |
commit | de9e216cb5fcc08b6c39071d7cef031673aa67da (patch) | |
tree | 696922c23551b5609277be3dbbc4b1d378ad6fc2 /libs/ardour/midi_track.cc | |
parent | 14a80c091d850045bd35c56d5d378bfdd2fbe4f9 (diff) |
(1) push a locate all the way through the processing heirarchy so that MIDI output ports can resolve any notes currently playing (2) remove MidiStateTracker from MidiPort and use a fixed set of MIDI messages (sustain-off and all-notes-off, per channel) to do note resolution (3) move note resolution caused by a LoopEvent psuedo-event to within the main MidiPort::flush_output() loop, so that we resolve (turn off) Notes that come before the loop point, rather than send them out after the note resolution messages
git-svn-id: svn://localhost/ardour2/branches/3.0@9635 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_track.cc')
-rw-r--r-- | libs/ardour/midi_track.cc | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index 07b6d2ac6d..8ff9c3e0c5 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -399,6 +399,19 @@ MidiTrack::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_fr } void +MidiTrack::realtime_locate () +{ + Glib::RWLock::ReaderLock lm (_processor_lock, Glib::TRY_LOCK); + if (!lm.locked ()) { + return; + } + + for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) { + (*i)->realtime_locate (); + } +} + +void MidiTrack::realtime_handle_transport_stopped () { Glib::RWLock::ReaderLock lm (_processor_lock, Glib::TRY_LOCK); |