triggerbox: continued work on Repeat trigger mode
This commit is contained in:
parent
8b1f7a696d
commit
ed6121d76e
@ -581,7 +581,8 @@ TriggerBoxUI::play_button_event (GdkEvent *ev, uint64_t n)
|
|||||||
case GDK_BUTTON_RELEASE:
|
case GDK_BUTTON_RELEASE:
|
||||||
switch (ev->button.button) {
|
switch (ev->button.button) {
|
||||||
case 1:
|
case 1:
|
||||||
if (_slots[n]->trigger().launch_style() == Trigger::Gate) {
|
if (_slots[n]->trigger().launch_style() == Trigger::Gate ||
|
||||||
|
_slots[n]->trigger().launch_style() == Trigger::Repeat) {
|
||||||
_slots[n]->trigger().unbang ();
|
_slots[n]->trigger().unbang ();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -395,6 +395,8 @@ Trigger::process_state_requests ()
|
|||||||
|
|
||||||
_unbang.fetch_sub (1);
|
_unbang.fetch_sub (1);
|
||||||
|
|
||||||
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 unbanged\n", index()));
|
||||||
|
|
||||||
if (_launch_style == Gate || _launch_style == Repeat) {
|
if (_launch_style == Gate || _launch_style == Repeat) {
|
||||||
switch (_state) {
|
switch (_state) {
|
||||||
case Running:
|
case Running:
|
||||||
@ -739,6 +741,7 @@ AudioTrigger::set_region_threaded (boost::shared_ptr<Region> r)
|
|||||||
load_data (ar);
|
load_data (ar);
|
||||||
determine_tempo ();
|
determine_tempo ();
|
||||||
setup_stretcher ();
|
setup_stretcher ();
|
||||||
|
set_usable_length ();
|
||||||
|
|
||||||
PropertyChanged (ARDOUR::Properties::name);
|
PropertyChanged (ARDOUR::Properties::name);
|
||||||
|
|
||||||
@ -1128,34 +1131,43 @@ AudioTrigger::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sa
|
|||||||
|
|
||||||
if (_state == Stopped || _state == Stopping) {
|
if (_state == Stopped || _state == Stopping) {
|
||||||
|
|
||||||
if (_loop_cnt == _follow_count) {
|
if ((_state == Stopped) && !_explicitly_stopped && (_launch_style == Trigger::Gate || _launch_style == Trigger::Repeat)) {
|
||||||
|
|
||||||
/* have played the specified number of times, we're done */
|
jump_start ();
|
||||||
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 was stopped, repeat/gate ret\n", index()));
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 loop cnt %2 satisfied, now stopped\n", index(), _follow_count));
|
|
||||||
shutdown ();
|
|
||||||
|
|
||||||
} else if (_state == Stopping) {
|
|
||||||
|
|
||||||
/* did not reach the end of the data. Presumably
|
|
||||||
* another trigger was explicitly queued, and we
|
|
||||||
* stopped
|
|
||||||
*/
|
|
||||||
|
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 not at end, but ow stopped\n", index()));
|
|
||||||
shutdown ();
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/* reached the end, but we haven't done that enough
|
if ((_launch_style != Repeat) && (_launch_style != Gate) && (_loop_cnt == _follow_count)) {
|
||||||
* times yet for a follow action/stop to take
|
|
||||||
* effect. Time to get played again.
|
|
||||||
*/
|
|
||||||
|
|
||||||
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 was stopping, now waiting to retrigger, loop cnt %2 fc %3\n", index(), _loop_cnt, _follow_count));
|
/* have played the specified number of times, we're done */
|
||||||
_state = WaitingToStart;
|
|
||||||
retrigger ();
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 loop cnt %2 satisfied, now stopped\n", index(), _follow_count));
|
||||||
PropertyChanged (ARDOUR::Properties::running);
|
shutdown ();
|
||||||
|
|
||||||
|
|
||||||
|
} else if (_state == Stopping) {
|
||||||
|
|
||||||
|
/* did not reach the end of the data. Presumably
|
||||||
|
* another trigger was explicitly queued, and we
|
||||||
|
* stopped
|
||||||
|
*/
|
||||||
|
|
||||||
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 not at end, but ow stopped\n", index()));
|
||||||
|
shutdown ();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* reached the end, but we haven't done that enough
|
||||||
|
* times yet for a follow action/stop to take
|
||||||
|
* effect. Time to get played again.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DEBUG_TRACE (DEBUG::Triggers, string_compose ("%1 was stopping, now waiting to retrigger, loop cnt %2 fc %3\n", index(), _loop_cnt, _follow_count));
|
||||||
|
_state = WaitingToStart;
|
||||||
|
retrigger ();
|
||||||
|
PropertyChanged (ARDOUR::Properties::running);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user