triggerbox: modify source-building API to include timeline position

This commit is contained in:
Paul Davis 2025-10-27 10:52:07 -06:00
parent 9194d93213
commit 6badce2d3a
2 changed files with 15 additions and 13 deletions

View file

@ -748,7 +748,7 @@ class LIBARDOUR_API TriggerBoxThread
void set_region (TriggerBox&, uint32_t slot, std::shared_ptr<Region>); void set_region (TriggerBox&, uint32_t slot, std::shared_ptr<Region>);
void request_delete_trigger (Trigger* t); 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 summon();
void stop(); void stop();
@ -777,6 +777,7 @@ class LIBARDOUR_API TriggerBoxThread
/* for DeleteTrigger and BuildSourceAndRegion */ /* for DeleteTrigger and BuildSourceAndRegion */
Trigger* trigger; Trigger* trigger;
Temporal::timecnt_t duration; Temporal::timecnt_t duration;
Temporal::timepos_t position;
void* operator new (size_t); void* operator new (size_t);
void operator delete (void* ptr, size_t); void operator delete (void* ptr, size_t);
@ -791,9 +792,9 @@ class LIBARDOUR_API TriggerBoxThread
CrossThreadChannel _xthread; CrossThreadChannel _xthread;
void queue_request (Request*); void queue_request (Request*);
void delete_trigger (Trigger*); void delete_trigger (Trigger*);
void build_source (Trigger*, Temporal::timecnt_t const & duration); void build_source (Trigger*, Temporal::timecnt_t const & duration, Temporal::timepos_t const &);
void build_midi_source (MIDITrigger*, Temporal::timecnt_t const &); void build_midi_source (MIDITrigger*, Temporal::timecnt_t const &, Temporal::timepos_t const &);
void build_audio_source (AudioTrigger*, Temporal::timecnt_t const &); void build_audio_source (AudioTrigger*, Temporal::timecnt_t const &, Temporal::timepos_t const &);
}; };
struct CueRecord { struct CueRecord {

View file

@ -1910,7 +1910,7 @@ AudioTrigger::captured (SlotArmInfo& ai, BufferSet&)
_box.queue_explict (index()); _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 (); 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 */ /* 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; // 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 (); disarm ();
} }
@ -5656,7 +5656,7 @@ TriggerBoxThread::thread_work ()
delete_trigger (req->trigger); delete_trigger (req->trigger);
break; break;
case BuildSourceAndRegion: case BuildSourceAndRegion:
build_source (req->trigger, req->duration); build_source (req->trigger, req->duration, req->position);
break; break;
default: default:
break; break;
@ -5726,11 +5726,12 @@ TriggerBoxThread::request_delete_trigger (Trigger* t)
} }
void 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); TriggerBoxThread::Request* req = new TriggerBoxThread::Request (BuildSourceAndRegion);
req->trigger = t; req->trigger = t;
req->duration = len; req->duration = len;
req->position = timeline_pos;
queue_request (req); queue_request (req);
} }
@ -5741,20 +5742,20 @@ TriggerBoxThread::delete_trigger (Trigger* t)
} }
void 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<MIDITrigger*> (t); MIDITrigger* mt = dynamic_cast<MIDITrigger*> (t);
AudioTrigger* at; AudioTrigger* at;
if (mt) { if (mt) {
build_midi_source (mt, duration); build_midi_source (mt, duration, pos);
} else if ((at = dynamic_cast<AudioTrigger*> (t))) { } else if ((at = dynamic_cast<AudioTrigger*> (t))) {
build_audio_source (at, duration); build_audio_source (at, duration, pos);
} }
} }
void 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<Track*> (t->box().owner()); Track* trk = static_cast<Track*> (t->box().owner());
SourceList sources; SourceList sources;
@ -5806,7 +5807,7 @@ TriggerBoxThread::build_audio_source (AudioTrigger* t, Temporal::timecnt_t const
} }
void 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<Track*> (t->box().owner()); Track* trk = static_cast<Track*> (t->box().owner());
std::shared_ptr<MidiSource> ms = t->box().session().create_midi_source_for_session (trk->name()); std::shared_ptr<MidiSource> ms = t->box().session().create_midi_source_for_session (trk->name());