From 8f9c1df1838847c85fc774e3a899bb00264954fe Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 7 Apr 2019 19:18:28 +0200 Subject: [PATCH] Prepare midi-export for midi-to-audio bouncing. * shift event time into process cycle before calling processors * reset note-trackers when exporting, don't allow any pending events into the queue --- libs/ardour/midi_track.cc | 11 ++++++++++- libs/ardour/session.cc | 4 +++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index 9f7291c6e7..c7547816a4 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -478,13 +478,22 @@ MidiTrack::export_stuff (BufferSet& buffers, if (!mpl) { return -2; } + mpl->reset_note_trackers (); // TODO once at start and end ? buffers.get_midi(0).clear(); if (mpl->read(buffers.get_midi(0), start, nframes, 0) != nframes) { return -1; } - //bounce_process (buffers, start, nframes, endpoint, include_endpoint, for_export, for_freeze); + if (endpoint && !for_export) { + MidiBuffer& buf = buffers.get_midi(0); + for (MidiBuffer::iterator i = buf.begin(); i != buf.end(); ++i) { + MidiBuffer::TimeType *t = i.timeptr (); + *t -= start; + } + bounce_process (buffers, start, nframes, endpoint, include_endpoint, for_export, for_freeze); + } + mpl->reset_note_trackers (); return 0; } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index de5d804cf5..660339d6bb 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -6238,7 +6238,9 @@ Session::write_one_track (Track& track, samplepos_t start, samplepos_t end, const MidiBuffer& buf = buffers.get_midi(0); for (MidiBuffer::const_iterator i = buf.begin(); i != buf.end(); ++i) { Evoral::Event ev = *i; - ev.set_time(ev.time() - position); + if (!endpoint || for_export) { + ev.set_time(ev.time() - position); + } ms->append_event_samples(lock, ev, ms->timeline_position()); } }