Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions lib/ectocore.h
Original file line number Diff line number Diff line change
Expand Up @@ -715,7 +715,8 @@ void __not_in_flash_func(input_handling)() {
uint8_t knob_selector = 0;
uint8_t last_slice_for_loopstart_trig = 255;
uint8_t last_slice_num_for_loopstart_trig = 0;
bool was_playback_stopped_for_loopstart_trig = true;
bool prev_playback_stopped_for_loopstart_trig = true;
bool loopstart_trig_pending = false;

while (1) {
#ifdef INCLUDE_MIDI
Expand Down Expand Up @@ -1796,9 +1797,17 @@ void __not_in_flash_func(input_handling)() {
uint8_t current_slice = sample_info->slice_current;
uint8_t slice_num = sample_info->slice_num;
bool playback_started_now =
was_playback_stopped_for_loopstart_trig && !playback_stopped;
prev_playback_stopped_for_loopstart_trig && !playback_stopped;
bool strict_loop_wrap = false;

if (playback_started_now) {
loopstart_trig_pending = true;
}

if (playback_stopped) {
loopstart_trig_pending = false;
}

if (slice_num > 0 && last_slice_num_for_loopstart_trig == slice_num &&
current_slice < slice_num &&
last_slice_for_loopstart_trig < slice_num) {
Expand All @@ -1808,14 +1817,19 @@ void __not_in_flash_func(input_handling)() {
}

if (!playback_stopped && slice_num > 0 &&
(playback_started_now || strict_loop_wrap) &&
(loopstart_trig_pending || strict_loop_wrap) &&
ecto_selected_mode_has_loop_start_transient(ectocore_trigger_mode,
sample_info)) {
if (ecto_trig_out_last == 0 ||
current_time - ecto_trig_out_last >
ECTO_LOOP_START_TRIG_DUP_SUPPRESS_MS) {
ecto_emit_trigger();
}
loopstart_trig_pending = false;
}

if (loopstart_trig_pending && slice_num > 0 && current_slice > 0) {
loopstart_trig_pending = false;
}

if (slice_num > 0 && current_slice < slice_num) {
Expand All @@ -1825,7 +1839,7 @@ void __not_in_flash_func(input_handling)() {
last_slice_for_loopstart_trig = 255;
last_slice_num_for_loopstart_trig = 0;
}
was_playback_stopped_for_loopstart_trig = playback_stopped;
prev_playback_stopped_for_loopstart_trig = playback_stopped;
}

// Check for planned retrig activation on slice change
Expand Down
Loading