diff --git a/src/droplets/sequencer_droplet.cpp b/src/droplets/sequencer_droplet.cpp index b7b0eb1..d6e07ec 100644 --- a/src/droplets/sequencer_droplet.cpp +++ b/src/droplets/sequencer_droplet.cpp @@ -12,6 +12,10 @@ SequencerDroplet::SequencerDroplet(DaisyPatch* m_patch, SequencerDroplet::~SequencerDroplet() {} void SequencerDroplet::Control() { + Patch()->ProcessAnalogControls(); + Patch()->encoder.Debounce(); + AdjustSelected(Patch()->encoder.Increment()); + if(Patch()->gate_input[0].Trig()) { Step(); } @@ -20,7 +24,10 @@ void SequencerDroplet::Control() { } for (size_t chn = GetChannelMin(); chn < GetChannelMax(); chn++) { - sequence[chn+selected] = control[chn].Process(); + if (std::abs(control[chn].Process()-last_control_value[chn]) > CONTROL_DEADZONE) { + sequence[chn+selected*num_columns] = control[chn].Process(); + } + last_control_value[chn] = control[chn].Process(); } } @@ -81,3 +88,8 @@ void SequencerDroplet::SetColumns() { num_columns = 4; } } + +void SequencerDroplet::AdjustSelected(int adj) { + int rows = std::ceil(sequence_length/num_columns); + selected = (rows+selected+adj) % rows; +} diff --git a/src/droplets/sequencer_droplet.h b/src/droplets/sequencer_droplet.h index 115aafb..7964869 100644 --- a/src/droplets/sequencer_droplet.h +++ b/src/droplets/sequencer_droplet.h @@ -10,7 +10,7 @@ #include "../util.h" #define MAX_SEQUENCE_LENGTH 32 -#define CONTROL_DEADZONE 0.03f +#define CONTROL_DEADZONE 0.005f #define NUM_ROWS 6 class SequencerDroplet: public Droplet { @@ -34,6 +34,8 @@ private: void Reset(); void SetColumns(); + + void AdjustSelected(int adj); public: /* * Constructor for a droplet.