From 54bc1018d51eedab16da6b2148a145b445af0b03 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 23 Apr 2020 05:19:01 +0200 Subject: Fix MIDI auditioning The Auditioner is not part of the session route-list and the auditioner route's I/O latency is never updated. Session::process_audition() does not handle pre-roll either, so it need to be zeroed, otherwise Route::roll skips samples. This has lead to initial samples being skipped, IFF the auditioner's output-port had non-zero latency. Since private port-latencies are usually only set for routes in the route-list, and _remaining_latency_preroll is reset at transport-stop, this *usually* worked... Last but not least, MIDI notes need to be resolved when seeking. --- libs/ardour/auditioner.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'libs/ardour/auditioner.cc') diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc index 079677ae4c..6b1921a2f8 100644 --- a/libs/ardour/auditioner.cc +++ b/libs/ardour/auditioner.cc @@ -440,7 +440,12 @@ Auditioner::play_audition (samplecnt_t nframes) _seek_complete = false; _seeking = false; _seek_sample = -1; - _disk_reader->reset_tracker(); + if (_midi_audition) { + /* Force MIDI note tracker to resolve any notes that are + * still playing -> set DR::run_must_resolve */ + _disk_reader->set_pending_overwrite (PlaylistModified); + _disk_reader->overwrite_existing_buffers (); + } } if(!_seeking) { -- cgit v1.2.3