diff options
-rw-r--r-- | libs/ardour/auditioner.cc | 12 | ||||
-rw-r--r-- | libs/ardour/session_transport.cc | 3 |
2 files changed, 15 insertions, 0 deletions
diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc index 71129ccd11..ba51922a8f 100644 --- a/libs/ardour/auditioner.cc +++ b/libs/ardour/auditioner.cc @@ -397,6 +397,18 @@ Auditioner::audition_region (boost::shared_ptr<Region> region) } _disk_reader->seek (offset, true); + + if (_midi_audition) { + /* Fill MIDI buffers. + * This is safe to call from here. ::::audition_region() + * is called by the butler thread. Also the session is not + * yet auditioning. So Session::non_realtime_overwrite() + * does call the auditioner's DR. + */ + set_pending_overwrite (PlaylistModified); + _disk_reader->overwrite_existing_buffers (); + } + current_sample = offset; g_atomic_int_set (&_auditioning, 1); diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 2924629d88..afd26d0373 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -1222,6 +1222,9 @@ void Session::non_realtime_overwrite (int on_entry, bool& finished) { boost::shared_ptr<RouteList> rl = routes.reader(); + if (is_auditioning ()) { + rl->push_back (auditioner); + } for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i); if (tr && tr->pending_overwrite ()) { |