From 6badce2d3a534c49415c09555f8449bbbbf261ae Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 27 Oct 2025 10:52:07 -0600 Subject: [PATCH] triggerbox: modify source-building API to include timeline position --- libs/ardour/ardour/triggerbox.h | 9 +++++---- libs/ardour/triggerbox.cc | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/libs/ardour/ardour/triggerbox.h b/libs/ardour/ardour/triggerbox.h index c41ab3ebf0..666322c513 100644 --- a/libs/ardour/ardour/triggerbox.h +++ b/libs/ardour/ardour/triggerbox.h @@ -748,7 +748,7 @@ class LIBARDOUR_API TriggerBoxThread void set_region (TriggerBox&, uint32_t slot, std::shared_ptr); void request_delete_trigger (Trigger* t); - void request_build_source (Trigger* t, Temporal::timecnt_t const & duration); + void request_build_source (Trigger* t, Temporal::timecnt_t const & duration, Temporal::timepos_t const &); void summon(); void stop(); @@ -777,6 +777,7 @@ class LIBARDOUR_API TriggerBoxThread /* for DeleteTrigger and BuildSourceAndRegion */ Trigger* trigger; Temporal::timecnt_t duration; + Temporal::timepos_t position; void* operator new (size_t); void operator delete (void* ptr, size_t); @@ -791,9 +792,9 @@ class LIBARDOUR_API TriggerBoxThread CrossThreadChannel _xthread; void queue_request (Request*); void delete_trigger (Trigger*); - void build_source (Trigger*, Temporal::timecnt_t const & duration); - void build_midi_source (MIDITrigger*, Temporal::timecnt_t const &); - void build_audio_source (AudioTrigger*, Temporal::timecnt_t const &); + void build_source (Trigger*, Temporal::timecnt_t const & duration, Temporal::timepos_t const &); + void build_midi_source (MIDITrigger*, Temporal::timecnt_t const &, Temporal::timepos_t const &); + void build_audio_source (AudioTrigger*, Temporal::timecnt_t const &, Temporal::timepos_t const &); }; struct CueRecord { diff --git a/libs/ardour/triggerbox.cc b/libs/ardour/triggerbox.cc index c88ee015ff..6256a98021 100644 --- a/libs/ardour/triggerbox.cc +++ b/libs/ardour/triggerbox.cc @@ -1910,7 +1910,7 @@ AudioTrigger::captured (SlotArmInfo& ai, BufferSet&) _box.queue_explict (index()); - TriggerBox::worker->request_build_source (this, timecnt_t (data.length)); + TriggerBox::worker->request_build_source (this, timecnt_t (data.length), timepos_t (ai.start_beats)); disarm (); } @@ -2471,7 +2471,7 @@ MIDITrigger::captured (SlotArmInfo& ai, BufferSet& bufs) /* Meanwhile, build a new source and region from the data now in rt_midibuffer */ // std::cerr << "capture done, ask for a source of length " << dur.beats().str() << std::endl; - TriggerBox::worker->request_build_source (this, timecnt_t (dur.beats())); + TriggerBox::worker->request_build_source (this, timecnt_t (dur.beats()), timepos_t (ai.start_beats)); disarm (); } @@ -5656,7 +5656,7 @@ TriggerBoxThread::thread_work () delete_trigger (req->trigger); break; case BuildSourceAndRegion: - build_source (req->trigger, req->duration); + build_source (req->trigger, req->duration, req->position); break; default: break; @@ -5726,11 +5726,12 @@ TriggerBoxThread::request_delete_trigger (Trigger* t) } void -TriggerBoxThread::request_build_source (Trigger* t, Temporal::timecnt_t const & len) +TriggerBoxThread::request_build_source (Trigger* t, Temporal::timecnt_t const & len, Temporal::timepos_t const & timeline_pos) { TriggerBoxThread::Request* req = new TriggerBoxThread::Request (BuildSourceAndRegion); req->trigger = t; req->duration = len; + req->position = timeline_pos; queue_request (req); } @@ -5741,20 +5742,20 @@ TriggerBoxThread::delete_trigger (Trigger* t) } void -TriggerBoxThread::build_source (Trigger* t, Temporal::timecnt_t const & duration) +TriggerBoxThread::build_source (Trigger* t, Temporal::timecnt_t const & duration, Temporal::timepos_t const & pos) { MIDITrigger* mt = dynamic_cast (t); AudioTrigger* at; if (mt) { - build_midi_source (mt, duration); + build_midi_source (mt, duration, pos); } else if ((at = dynamic_cast (t))) { - build_audio_source (at, duration); + build_audio_source (at, duration, pos); } } void -TriggerBoxThread::build_audio_source (AudioTrigger* t, Temporal::timecnt_t const & duration) +TriggerBoxThread::build_audio_source (AudioTrigger* t, Temporal::timecnt_t const & duration, Temporal::timepos_t const & pos) { Track* trk = static_cast (t->box().owner()); SourceList sources; @@ -5806,7 +5807,7 @@ TriggerBoxThread::build_audio_source (AudioTrigger* t, Temporal::timecnt_t const } void -TriggerBoxThread::build_midi_source (MIDITrigger* t, Temporal::timecnt_t const & duration) +TriggerBoxThread::build_midi_source (MIDITrigger* t, Temporal::timecnt_t const & duration, Temporal::timepos_t const & pos) { Track* trk = static_cast (t->box().owner()); std::shared_ptr ms = t->box().session().create_midi_source_for_session (trk->name());