From e97d1d3d3f073c0229e2457028e1cd9057452ad1 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 12 Nov 2025 14:24:21 -0700 Subject: [PATCH] (maybe) fix MIDI consolidation issues Stay in BeatTime, not audio time. --- libs/ardour/session.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 3b95788940..99e6ed1854 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -6399,20 +6399,25 @@ Session::write_one_track (Track& track, samplepos_t start, samplepos_t end, } } - /* XXX NUTEMPO fix this to not use samples */ + Temporal::Beats bpos (timepos_t (position).beats()); + Temporal::Beats bout_pos (timepos_t (out_pos).beats()); for (vector::iterator m = midi_source_locks.begin(); m != midi_source_locks.end(); ++m) { const MidiBuffer& buf = buffers.get_midi(0); for (MidiBuffer::const_iterator i = buf.begin(); i != buf.end(); ++i) { - Evoral::Event ev = *i; + Evoral::Event sev (*i); + Evoral::Event bev (sev.event_type(), timepos_t (sev.time()).beats(), sev.size(), sev.buffer()); + if (!endpoint || for_export) { - ev.set_time(ev.time() - position); + bev.set_time (bev.time() - bpos); } else { /* MidiTrack::export_stuff moves event to the current cycle */ - ev.set_time(ev.time() + out_pos - position); + bev.set_time(bev.time() + bout_pos - bpos); } - (*m)->src->append_event_samples ((*m)->lock, ev, (*m)->src->natural_position().samples()); + + (*m)->src->append_event_beats ((*m)->lock, bev, false); } + } out_pos += current_chunk; latency_skip = 0;