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.
This commit is contained in:
parent
6fbcf83779
commit
54bc1018d5
|
@ -91,6 +91,8 @@ public:
|
|||
|
||||
void set_audition_synth_info(PluginInfoPtr in) { audition_synth_info = in; }
|
||||
|
||||
samplecnt_t output_latency () const { return 0; }
|
||||
|
||||
private:
|
||||
|
||||
PluginInfoPtr audition_synth_info; //we will use this to create a new synth on-the-fly each time an audition is requested
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -695,6 +695,7 @@ Session::butler_completed_transport_work ()
|
|||
|
||||
if (ptw & PostTransportAudition) {
|
||||
if (auditioner && auditioner->auditioning()) {
|
||||
_remaining_latency_preroll = 0;
|
||||
process_function = &Session::process_audition;
|
||||
} else {
|
||||
process_function = &Session::process_with_events;
|
||||
|
|
Loading…
Reference in New Issue
Block a user