triggerbox: change note tracker to a full state tracker, and move it up to the TriggerBox

We don't need one state tracker per trigger, one per box is more appropriate
This commit is contained in:
Paul Davis 2022-02-01 18:03:51 -07:00
parent 8449d344ae
commit f5d5ecffbb
2 changed files with 8 additions and 5 deletions

View file

@ -494,7 +494,6 @@ class LIBARDOUR_API MIDITrigger : public Trigger {
private: private:
PBD::ID data_source; PBD::ID data_source;
MidiNoteTracker tracker;
PBD::ScopedConnection content_connection; PBD::ScopedConnection content_connection;
Temporal::Beats final_beat; Temporal::Beats final_beat;
@ -656,6 +655,9 @@ class LIBARDOUR_API TriggerBox : public Processor
ByMidiChannel ByMidiChannel
}; };
/* This is null for TriggerBoxen constructed with DataType::AUDIO */
MidiStateTracker* tracker;
static Temporal::BBT_Offset assumed_trigger_duration () { return _assumed_trigger_duration; } static Temporal::BBT_Offset assumed_trigger_duration () { return _assumed_trigger_duration; }
static void set_assumed_trigger_duration (Temporal::BBT_Offset const &); static void set_assumed_trigger_duration (Temporal::BBT_Offset const &);

View file

@ -1747,7 +1747,7 @@ MIDITrigger::shutdown (BufferSet& bufs, pframes_t dest_offset)
{ {
Trigger::shutdown (bufs, dest_offset); Trigger::shutdown (bufs, dest_offset);
MidiBuffer& mb (bufs.get_midi (0)); MidiBuffer& mb (bufs.get_midi (0));
tracker.resolve_notes (mb, dest_offset); _box.tracker->resolve_notes (mb, dest_offset);
} }
void void
@ -1756,7 +1756,7 @@ MIDITrigger::jump_stop (BufferSet& bufs, pframes_t dest_offset)
Trigger::jump_stop (bufs, dest_offset); Trigger::jump_stop (bufs, dest_offset);
MidiBuffer& mb (bufs.get_midi (0)); MidiBuffer& mb (bufs.get_midi (0));
tracker.resolve_notes (mb, dest_offset); _box.tracker->resolve_notes (mb, dest_offset);
retrigger (); retrigger ();
} }
@ -1984,7 +1984,7 @@ MIDITrigger::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sam
DEBUG_TRACE (DEBUG::Triggers, string_compose ("given et %1 TS %7 rs %8 ts %2 bs %3 ss %4 do %5, inserting %6\n", maybe_last_event_timeline_beats, timeline_samples, buffer_samples, start_sample, dest_offset, ev, transition_beats, region_start)); DEBUG_TRACE (DEBUG::Triggers, string_compose ("given et %1 TS %7 rs %8 ts %2 bs %3 ss %4 do %5, inserting %6\n", maybe_last_event_timeline_beats, timeline_samples, buffer_samples, start_sample, dest_offset, ev, transition_beats, region_start));
mb.insert_event (ev); mb.insert_event (ev);
tracker.track (event.buffer()); _box.tracker->track (event.buffer());
last_event_beats = event.time(); last_event_beats = event.time();
last_event_timeline_beats = maybe_last_event_timeline_beats; last_event_timeline_beats = maybe_last_event_timeline_beats;
@ -1996,7 +1996,7 @@ MIDITrigger::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sam
if (_state == Stopping) { if (_state == Stopping) {
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 was stopping, now stopped\n", index())); DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 was stopping, now stopped\n", index()));
tracker.resolve_notes (mb, nframes-1); _box.tracker->resolve_notes (mb, nframes-1);
} }
if (iter == model->end()) { if (iter == model->end()) {
@ -2118,6 +2118,7 @@ TriggerBox::init ()
TriggerBox::TriggerBox (Session& s, DataType dt) TriggerBox::TriggerBox (Session& s, DataType dt)
: Processor (s, _("TriggerBox"), Temporal::BeatTime) : Processor (s, _("TriggerBox"), Temporal::BeatTime)
, tracker (dt == DataType::MIDI ? new MidiStateTracker : 0)
, _data_type (dt) , _data_type (dt)
, _order (-1) , _order (-1)
, explicit_queue (64) , explicit_queue (64)