mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-10 08:36:32 +01:00
triggerbox: modify source-building API to include timeline position
This commit is contained in:
parent
9194d93213
commit
6badce2d3a
2 changed files with 15 additions and 13 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue