triggerbox: add TriggerBox currently_playing property, and rename ::currently_running() to ::currently_playing
This commit is contained in:
parent
86f239f185
commit
9a89dd8981
@ -446,7 +446,7 @@ class LIBARDOUR_API TriggerBox : public Processor
|
|||||||
void request_stop_all ();
|
void request_stop_all ();
|
||||||
|
|
||||||
/* only valid when called by Triggers from within ::process_state_requests() */
|
/* only valid when called by Triggers from within ::process_state_requests() */
|
||||||
bool currently_running() const { return currently_playing; }
|
bool currently_playing() const { return _currently_playing; }
|
||||||
void set_next (uint64_t which);
|
void set_next (uint64_t which);
|
||||||
|
|
||||||
void queue_explict (Trigger*);
|
void queue_explict (Trigger*);
|
||||||
@ -506,7 +506,7 @@ class LIBARDOUR_API TriggerBox : public Processor
|
|||||||
Glib::Threads::RWLock trigger_lock; /* protects all_triggers */
|
Glib::Threads::RWLock trigger_lock; /* protects all_triggers */
|
||||||
Triggers all_triggers;
|
Triggers all_triggers;
|
||||||
PBD::RingBuffer<Trigger*> explicit_queue; /* user queued triggers */
|
PBD::RingBuffer<Trigger*> explicit_queue; /* user queued triggers */
|
||||||
Trigger* currently_playing;
|
Trigger* _currently_playing;
|
||||||
Requests _requests;
|
Requests _requests;
|
||||||
bool _stop_all;
|
bool _stop_all;
|
||||||
bool _pass_thru;
|
bool _pass_thru;
|
||||||
@ -590,6 +590,7 @@ namespace Properties {
|
|||||||
LIBARDOUR_API extern PBD::PropertyDescriptor<int> follow_count;
|
LIBARDOUR_API extern PBD::PropertyDescriptor<int> follow_count;
|
||||||
LIBARDOUR_API extern PBD::PropertyDescriptor<float> velocity_effect;
|
LIBARDOUR_API extern PBD::PropertyDescriptor<float> velocity_effect;
|
||||||
LIBARDOUR_API extern PBD::PropertyDescriptor<gain_t> gain;
|
LIBARDOUR_API extern PBD::PropertyDescriptor<gain_t> gain;
|
||||||
|
LIBARDOUR_API extern PBD::PropertyDescriptor<int> currently_playing;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1468,7 +1468,7 @@ TriggerBox::TriggerBox (Session& s, DataType dt)
|
|||||||
, _data_type (dt)
|
, _data_type (dt)
|
||||||
, _order (-1)
|
, _order (-1)
|
||||||
, explicit_queue (64)
|
, explicit_queue (64)
|
||||||
, currently_playing (0)
|
, _currently_playing (0)
|
||||||
, _stop_all (false)
|
, _stop_all (false)
|
||||||
, _pass_thru (false)
|
, _pass_thru (false)
|
||||||
, requests (1024)
|
, requests (1024)
|
||||||
@ -1532,8 +1532,8 @@ TriggerBox::queue_explict (Trigger* t)
|
|||||||
explicit_queue.write (&t, 1);
|
explicit_queue.write (&t, 1);
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("explicit queue %1, EQ = %2\n", t->index(), explicit_queue.read_space()));
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("explicit queue %1, EQ = %2\n", t->index(), explicit_queue.read_space()));
|
||||||
|
|
||||||
if (currently_playing) {
|
if (_currently_playing) {
|
||||||
currently_playing->unbang ();
|
_currently_playing->unbang ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1889,9 +1889,10 @@ TriggerBox::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp
|
|||||||
/* STEP EIGHT: if there is no active slot, see if there any queued up
|
/* STEP EIGHT: if there is no active slot, see if there any queued up
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!currently_playing) {
|
if (!_currently_playing) {
|
||||||
if ((currently_playing = get_next_trigger()) != 0) {
|
if ((_currently_playing = get_next_trigger()) != 0) {
|
||||||
currently_playing->startup ();
|
_currently_playing->startup ();
|
||||||
|
PropertyChanged (Properties::currently_playing);
|
||||||
active_trigger_boxes.fetch_add (1);
|
active_trigger_boxes.fetch_add (1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1906,7 +1907,7 @@ TriggerBox::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp
|
|||||||
/* STEP TEN: nothing to do?
|
/* STEP TEN: nothing to do?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!currently_playing) {
|
if (!_currently_playing) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1952,7 +1953,7 @@ TriggerBox::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp
|
|||||||
* it processed bang requests. Nothing to do here otherwise.
|
* it processed bang requests. Nothing to do here otherwise.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (nxt != currently_playing) {
|
if (nxt != _currently_playing) {
|
||||||
|
|
||||||
/* user has triggered a different slot than the currently waiting-to-play or playing slot */
|
/* user has triggered a different slot than the currently waiting-to-play or playing slot */
|
||||||
|
|
||||||
@ -1965,12 +1966,13 @@ TriggerBox::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp
|
|||||||
|
|
||||||
explicit_queue.increment_read_idx (1); /* consume the entry we peeked at */
|
explicit_queue.increment_read_idx (1); /* consume the entry we peeked at */
|
||||||
|
|
||||||
nxt->set_legato_offset (currently_playing->current_pos());
|
nxt->set_legato_offset (_currently_playing->current_pos());
|
||||||
nxt->jump_start ();
|
nxt->jump_start ();
|
||||||
currently_playing->jump_stop ();
|
_currently_playing->jump_stop ();
|
||||||
/* and switch */
|
/* and switch */
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 => %2 switched to in legato mode\n", currently_playing->index(), nxt->index()));
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 => %2 switched to in legato mode\n", _currently_playing->index(), nxt->index()));
|
||||||
currently_playing = nxt;
|
_currently_playing = nxt;
|
||||||
|
PropertyChanged (Properties::currently_playing);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@ -1978,34 +1980,36 @@ TriggerBox::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp
|
|||||||
* currently playing slot
|
* currently playing slot
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (currently_playing->state() != Trigger::WaitingToStop) {
|
if (_currently_playing->state() != Trigger::WaitingToStop) {
|
||||||
currently_playing->begin_stop ();
|
_currently_playing->begin_stop ();
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("start stop for %1 before switching to %2\n", currently_playing->index(), nxt->index()));
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("start stop for %1 before switching to %2\n", _currently_playing->index(), nxt->index()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("trigger %1 complete, state now %2\n", currently_playing->name(), enum_2_string (currently_playing->state())));
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("trigger %1 complete, state now %2\n", _currently_playing->name(), enum_2_string (_currently_playing->state())));
|
||||||
|
|
||||||
/* if we're not in the process of stopping all active triggers,
|
/* if we're not in the process of stopping all active triggers,
|
||||||
* but the current one has stopped, decide which (if any)
|
* but the current one has stopped, decide which (if any)
|
||||||
* trigger to play next.
|
* trigger to play next.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (currently_playing->state() == Trigger::Stopped) {
|
if (_currently_playing->state() == Trigger::Stopped) {
|
||||||
if (!_stop_all) {
|
if (!_stop_all) {
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 has stopped, need next...\n", currently_playing->name()));
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 has stopped, need next...\n", _currently_playing->name()));
|
||||||
int n = determine_next_trigger (currently_playing->index());
|
int n = determine_next_trigger (_currently_playing->index());
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
break; /* no triggers to come next, break out * of nframes loop */
|
break; /* no triggers to come next, break out * of nframes loop */
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 finished, no next trigger\n", currently_playing->name()));
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 finished, no next trigger\n", _currently_playing->name()));
|
||||||
}
|
}
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("switching to next trigger %1\n", currently_playing->name()));
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("switching to next trigger %1\n", _currently_playing->name()));
|
||||||
currently_playing = all_triggers[n];
|
_currently_playing = all_triggers[n];
|
||||||
currently_playing->startup ();
|
_currently_playing->startup ();
|
||||||
|
PropertyChanged (Properties::currently_playing);
|
||||||
} else {
|
} else {
|
||||||
currently_playing = 0;
|
_currently_playing = 0;
|
||||||
|
PropertyChanged (Properties::currently_playing);
|
||||||
DEBUG_TRACE (DEBUG::Triggers, "currently playing was stopped, but stop_all was set, leaving nf loop\n");
|
DEBUG_TRACE (DEBUG::Triggers, "currently playing was stopped, but stop_all was set, leaving nf loop\n");
|
||||||
/* leave nframes loop */
|
/* leave nframes loop */
|
||||||
break;
|
break;
|
||||||
@ -2015,19 +2019,19 @@ TriggerBox::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp
|
|||||||
pframes_t frames_covered;
|
pframes_t frames_covered;
|
||||||
|
|
||||||
|
|
||||||
boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (currently_playing->region());
|
boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (_currently_playing->region());
|
||||||
if (ar) {
|
if (ar) {
|
||||||
max_chans = std::max (ar->n_channels(), max_chans);
|
max_chans = std::max (ar->n_channels(), max_chans);
|
||||||
}
|
}
|
||||||
|
|
||||||
frames_covered = currently_playing->run (bufs, start_sample, end_sample, start_beats, end_beats, nframes, dest_offset, _pass_thru, bpm);
|
frames_covered = _currently_playing->run (bufs, start_sample, end_sample, start_beats, end_beats, nframes, dest_offset, _pass_thru, bpm);
|
||||||
|
|
||||||
nframes -= frames_covered;
|
nframes -= frames_covered;
|
||||||
start_sample += frames_covered;
|
start_sample += frames_covered;
|
||||||
dest_offset += frames_covered;
|
dest_offset += frames_covered;
|
||||||
|
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("trig %1 ran, covered %2 state now %3 nframes now %4\n",
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("trig %1 ran, covered %2 state now %3 nframes now %4\n",
|
||||||
currently_playing->name(), frames_covered, enum_2_string (currently_playing->state()), nframes));
|
_currently_playing->name(), frames_covered, enum_2_string (_currently_playing->state()), nframes));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2043,7 +2047,7 @@ TriggerBox::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!currently_playing) {
|
if (!_currently_playing) {
|
||||||
DEBUG_TRACE (DEBUG::Triggers, "nothing currently playing, consider stopping transport\n");
|
DEBUG_TRACE (DEBUG::Triggers, "nothing currently playing, consider stopping transport\n");
|
||||||
_stop_all = false;
|
_stop_all = false;
|
||||||
if (active_trigger_boxes.fetch_sub (1) == 1) {
|
if (active_trigger_boxes.fetch_sub (1) == 1) {
|
||||||
@ -2053,7 +2057,7 @@ TriggerBox::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* audio buffer (channel) count determined by max of input and
|
/* audio buffer (channel) count determined by max of input and
|
||||||
* currently_playing's channel count (if it was audio).
|
* _currently_playing's channel count (if it was audio).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ChanCount cc (DataType::AUDIO, max_chans);
|
ChanCount cc (DataType::AUDIO, max_chans);
|
||||||
|
Loading…
Reference in New Issue
Block a user