feat: Display CV-modulated parameter values in the UI and trigger redraws when relevant CV inputs change.
This commit is contained in:
@ -475,29 +475,46 @@ void DisplayMainArea() {
|
|||||||
|
|
||||||
if (selected_slot > 0) {
|
if (selected_slot > 0) {
|
||||||
PatternState &p = patterns[active_pattern];
|
PatternState &p = patterns[active_pattern];
|
||||||
|
int act_val = 0;
|
||||||
|
switch (current_param) {
|
||||||
|
case PARAM_KICK_DENS: act_val = p.inst_density[0]; break;
|
||||||
|
case PARAM_SNARE_DENS: act_val = p.inst_density[1]; break;
|
||||||
|
case PARAM_HIHAT_DENS: act_val = p.inst_density[2]; break;
|
||||||
|
case PARAM_CHAOS: act_val = p.chaos_amount; break;
|
||||||
|
case PARAM_MAP_X: act_val = p.map_x; break;
|
||||||
|
case PARAM_MAP_Y: act_val = p.map_y; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!editing_param) {
|
||||||
|
if ((int)cv1_dest == (int)current_param + 1) act_val += cv1_val / 4;
|
||||||
|
if ((int)cv2_dest == (int)current_param + 1) act_val += cv2_val / 4;
|
||||||
|
act_val = constrain(act_val, 0, 255);
|
||||||
|
}
|
||||||
|
|
||||||
switch (current_param) {
|
switch (current_param) {
|
||||||
case PARAM_KICK_DENS:
|
case PARAM_KICK_DENS:
|
||||||
mainText = String(map(p.inst_density[0], 0, 255, 0, 100)) + "%";
|
mainText = String(map(act_val, 0, 255, 0, 100)) + "%";
|
||||||
subText = "KICK DENS";
|
subText = "KICK DENS";
|
||||||
break;
|
break;
|
||||||
case PARAM_SNARE_DENS:
|
case PARAM_SNARE_DENS:
|
||||||
mainText = String(map(p.inst_density[1], 0, 255, 0, 100)) + "%";
|
mainText = String(map(act_val, 0, 255, 0, 100)) + "%";
|
||||||
subText = "SNAR DENS";
|
subText = "SNAR DENS";
|
||||||
break;
|
break;
|
||||||
case PARAM_HIHAT_DENS:
|
case PARAM_HIHAT_DENS:
|
||||||
mainText = String(map(p.inst_density[2], 0, 255, 0, 100)) + "%";
|
mainText = String(map(act_val, 0, 255, 0, 100)) + "%";
|
||||||
subText = "HHAT DENS";
|
subText = "HHAT DENS";
|
||||||
break;
|
break;
|
||||||
case PARAM_CHAOS:
|
case PARAM_CHAOS:
|
||||||
mainText = String(map(p.chaos_amount, 0, 255, 0, 100)) + "%";
|
mainText = String(map(act_val, 0, 255, 0, 100)) + "%";
|
||||||
subText = "CHAOS";
|
subText = "CHAOS";
|
||||||
break;
|
break;
|
||||||
case PARAM_MAP_X:
|
case PARAM_MAP_X:
|
||||||
mainText = String(p.map_x);
|
mainText = String(act_val);
|
||||||
subText = "MAP X";
|
subText = "MAP X";
|
||||||
break;
|
break;
|
||||||
case PARAM_MAP_Y:
|
case PARAM_MAP_Y:
|
||||||
mainText = String(p.map_y);
|
mainText = String(act_val);
|
||||||
subText = "MAP Y";
|
subText = "MAP Y";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -633,11 +650,33 @@ void setup() {
|
|||||||
void loop() {
|
void loop() {
|
||||||
gravity.Process();
|
gravity.Process();
|
||||||
|
|
||||||
// Apply CV modulation
|
static int last_cv1_val = 0;
|
||||||
// CV1 modulates Map X, CV2 modulates Chaos
|
static int last_cv2_val = 0;
|
||||||
|
|
||||||
cv1_val = gravity.cv1.Read(); // -512 to 512
|
cv1_val = gravity.cv1.Read(); // -512 to 512
|
||||||
cv2_val = gravity.cv2.Read();
|
cv2_val = gravity.cv2.Read();
|
||||||
|
|
||||||
|
// Trigger redraw if we're not editing and the CV modulating the selected param changes
|
||||||
|
if (!editing_param && selected_slot > 0) {
|
||||||
|
if ((int)cv1_dest == (int)current_param + 1) {
|
||||||
|
if (abs(cv1_val - last_cv1_val) >= 4) {
|
||||||
|
needs_redraw = true;
|
||||||
|
last_cv1_val = cv1_val;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
last_cv1_val = cv1_val;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((int)cv2_dest == (int)current_param + 1) {
|
||||||
|
if (abs(cv2_val - last_cv2_val) >= 4) {
|
||||||
|
needs_redraw = true;
|
||||||
|
last_cv2_val = cv2_val;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
last_cv2_val = cv2_val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (eeprom_needs_save && (millis() - last_param_change > SAVE_DELAY_MS)) {
|
if (eeprom_needs_save && (millis() - last_param_change > SAVE_DELAY_MS)) {
|
||||||
SaveState();
|
SaveState();
|
||||||
eeprom_needs_save = false;
|
eeprom_needs_save = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user