Skip to content
Snippets Groups Projects
Commit c8f280bd authored by moon2's avatar moon2 :speech_balloon:
Browse files

bl00mbox: pulled sequencer fix from main repo

(this is mostly the work of x42)
parent b4e49997
No related branches found
No related tags found
1 merge request!234bl00mbox: pulled sequencer fix from main repo
Pipeline #7393 passed
......@@ -64,26 +64,31 @@ void sequencer_run(radspa_t * sequencer, uint16_t num_samples, uint32_t render_p
data->bpm_prev = bpm;
data->beat_div_prev = beat_div;
}
if(data->counter_target){
for(uint16_t i = 0; i < num_samples; i++){
int16_t sync_in = radspa_trigger_get(sync_in_sig->get_value(sync_in_sig, i, num_samples, render_pass_id),
&(data->sync_in_hist));
if(sync_in > 0){
data->counter = 0;
data->step = data->step_start;
data->sync_out_start = true;
} else if(sync_in < 0){
data->counter_target = 0; // stop signal
data->sync_out_stop = true;
}
if(data->counter_target){
data->counter++;
if(data->counter >= data->counter_target){
data->counter = 0;
data->step++;
if(data->step > data->step_end){
data->step = data->step_start;
data->sync_out = -data->sync_out;
data->sync_out_start = true;
}
}
int16_t sync_in = sync_in_sig->get_value(sync_in_sig, i, num_samples, render_pass_id);
if(((sync_in > 0) && (data->sync_in_prev <= 0)) || ((sync_in > 0) && (data->sync_in_prev <= 0))){
data->counter = 0;
data->step = data->step_start;
data->sync_out = -data->sync_out;
}
data->sync_in_prev = sync_in;
if(!data->counter){ //event just happened
for(uint8_t j = 0; j < data->num_tracks; j++){
int16_t type = table[j * (data->track_step_len + 1)];
......@@ -100,9 +105,16 @@ void sequencer_run(radspa_t * sequencer, uint16_t num_samples, uint32_t render_p
for(uint8_t j = 0; j < data->num_tracks; j++){
track_sigs[j]->set_value(track_sigs[j], i, data->tracks[j].track_fill, num_samples, render_pass_id);
}
sync_out_sig->set_value(sync_out_sig, i, data->sync_out, num_samples, render_pass_id);
step_sig->set_value(step_sig, i, data->step, num_samples, render_pass_id);
}
int16_t sync_out = 0;
if(data->sync_out_start){
sync_out = radspa_trigger_start(sync_in, &(data->sync_out_hist));
} else if(data->sync_out_stop){
sync_out = radspa_trigger_stop(&(data->sync_out_hist));
}
sync_out_sig->set_value(sync_out_sig, i, sync_out, num_samples, render_pass_id);
step_sig->set_value(step_sig, i, data->step, num_samples, render_pass_id);
}
}
......@@ -141,8 +153,10 @@ radspa_t * sequencer_create(uint32_t init_var){
RADSPA_SIGNAL_HINT_OUTPUT | RADSPA_SIGNAL_HINT_TRIGGER, 0);
data->counter = 0;
data->sync_in_prev = 0;
data->sync_out = 32767;
data->sync_in_hist = 0;
data->sync_out_hist = 0;
data->sync_out_start = false;
data->sync_out_stop = false;
return sequencer;
}
......@@ -16,8 +16,10 @@ typedef struct {
uint8_t step;
uint64_t counter;
uint64_t counter_target;
int16_t sync_in_prev;
int16_t sync_out;
int16_t sync_in_hist;
int16_t sync_out_hist;
bool sync_out_start;
bool sync_out_stop;
int16_t bpm_prev;
int16_t beat_div_prev;
sequencer_track_data_t tracks[];
......
......@@ -284,7 +284,7 @@ class sequencer(_Patch):
self.signals.step = self.plugins.seq.signals.step
self.signals.step_end = self.plugins.seq.signals.step_end
self.signals.step_start = self.plugins.seq.signals.step_start
self.signals.step_start = self.plugins.seq.signals.step_start
self.signals.sync_in = self.plugins.seq.signals.sync_in
tracktable = [-32767] + ([0] * self.num_steps)
self.plugins.seq.table = tracktable * self.num_tracks
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment