From 4a4e0f5d55caa5c56929f8505a6722eb1423e73f Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 20 Jun 2021 17:08:34 +0200 Subject: Enable sq2 control --- src/sequencer.c | 175 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 92 insertions(+), 83 deletions(-) (limited to 'src') diff --git a/src/sequencer.c b/src/sequencer.c index 5aaeab3..856d579 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -629,7 +629,8 @@ draw_params_cursor_wave(size_t i, u8 clr) { } void -draw_params_cursor_sq1(size_t i, u8 clr) { +draw_params_cursor_square(size_t i, u8 clr, bool sweep) { + size_t x_offset = sweep ? 0 : 30; u8 x_positions[] = { 0, // Duty. 31, // Env. Vol. @@ -649,7 +650,7 @@ draw_params_cursor_sq1(size_t i, u8 clr) { 0, // Sweep Direction. }; size_t cursor_length = 24; - size_t x = PARAMS_START_X + x_positions[i]; + size_t x = PARAMS_START_X + x_positions[i] + x_offset; size_t y = PARAMS_START_Y + PARAMS_H - 23 + y_positions[i]; draw_line(x, y, x + cursor_length, y, clr); } @@ -658,10 +659,10 @@ void draw_params_cursor(size_t i, u8 clr) { switch (channel_selection_loc) { case 0: { - draw_params_cursor_sq1(i, clr); + draw_params_cursor_square(i, clr, true); } break; case 1: { - // draw_params_cursor_sq2(i, clr); + draw_params_cursor_square(i, clr, false); } break; case 2: { draw_params_cursor_wave(i, clr); @@ -806,11 +807,13 @@ draw_parameters_wave(void) { void draw_parameters_square(ChannelSquareParams *params, bool sweep) { + size_t x_offset = sweep ? 0 : 30; + // Duty cycle. { // Shape drawing. { - size_t x = PARAMS_START_X; + size_t x = PARAMS_START_X + x_offset; size_t y = PARAMS_START_Y + PARAMS_H - 43; size_t x0 = x + 2; @@ -868,7 +871,7 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { // Param box. { - size_t x = PARAMS_START_X; + size_t x = PARAMS_START_X + x_offset; size_t y = PARAMS_START_Y + PARAMS_H - 25; draw_line(x, y + 7, x + 2, y + 7, COL_FG); draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); @@ -879,7 +882,7 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { switch (params->duty_cycle) { case 0: { - txt_drawf("0", x + 9, y + 10, 6, COL_FG); + txt_drawf("12", x + 6, y + 10, 6, COL_FG); } break; case 1: { txt_drawf("25", x + 6, y + 10, 6, COL_FG); @@ -900,14 +903,14 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { { // Bounding box. { - size_t x0 = PARAMS_START_X + 31; + size_t x0 = PARAMS_START_X + 31 + x_offset; size_t y0 = PARAMS_START_Y + PARAMS_H - 46; size_t x1 = x0 + 79; size_t y1 = y0 + 21; draw_rect(x0, y0, x1, y1, COL_CYAN); } - size_t x = PARAMS_START_X + 42; + size_t x = PARAMS_START_X + 42 + x_offset; size_t y = PARAMS_START_Y + PARAMS_H - 43; size_t x0 = x; size_t y0 = y + 15 - params->env_volume; @@ -927,7 +930,7 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { // Env. volume. { - size_t x = PARAMS_START_X + 31; + size_t x = PARAMS_START_X + 31 + x_offset; size_t y = PARAMS_START_Y + PARAMS_H - 25; draw_line(x, y + 7, x + 4, y + 7, COL_FG); draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); @@ -990,7 +993,7 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { // Env. direction { - size_t x = PARAMS_START_X + 59; + size_t x = PARAMS_START_X + 59 + x_offset; size_t y = PARAMS_START_Y + PARAMS_H - 25; draw_line(x, y + 7, x + 4, y + 7, COL_FG); draw_line(x + 20, y + 7, x + 24, y + 7, COL_FG); @@ -1013,7 +1016,7 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { // Env. time. { - size_t x = PARAMS_START_X + 87; + size_t x = PARAMS_START_X + 87 + x_offset; size_t y = PARAMS_START_Y + PARAMS_H - 25; draw_line(x, y + 7, x + 2, y + 7, COL_FG); draw_line(x + 22, y + 7, x + 24, y + 7, COL_FG); @@ -1075,6 +1078,18 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { case 3: { txt_drawf("3", x + 9, y + 10, 6, COL_FG); } break; + case 4: { + txt_drawf("4", x + 9, y + 10, 6, COL_FG); + } break; + case 5: { + txt_drawf("5", x + 9, y + 10, 6, COL_FG); + } break; + case 6: { + txt_drawf("6", x + 9, y + 10, 6, COL_FG); + } break; + case 7: { + txt_drawf("7", x + 9, y + 10, 6, COL_FG); + } break; } } @@ -1102,6 +1117,18 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { case 3: { txt_drawf("3", x + 9, y + 10, 6, COL_FG); } break; + case 4: { + txt_drawf("4", x + 9, y + 10, 6, COL_FG); + } break; + case 5: { + txt_drawf("5", x + 9, y + 10, 6, COL_FG); + } break; + case 6: { + txt_drawf("6", x + 9, y + 10, 6, COL_FG); + } break; + case 7: { + txt_drawf("7", x + 9, y + 10, 6, COL_FG); + } break; } } @@ -1130,7 +1157,7 @@ draw_parameters_square(ChannelSquareParams *params, bool sweep) { // Labels. { - size_t x = PARAMS_START_X; + size_t x = PARAMS_START_X + x_offset; size_t y = PARAMS_START_Y + PARAMS_H - 43; txt_drawf_small("shape", x + 1, y - 12, 4, COL_FG); txt_drawf_small("envelope", x + 54, y - 12, 4, COL_FG); @@ -1363,9 +1390,9 @@ handle_param_selection_sq1(void) { inc = -2; } } - draw_params_cursor_sq1(param_selection_loc, COL_BG); + draw_params_cursor(param_selection_loc, COL_BG); param_selection_loc = CLAMP(loc + inc, 0, 6); - draw_params_cursor_sq1(param_selection_loc, COL_CURSOR); + draw_params_cursor(param_selection_loc, COL_CURSOR); } if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) { int inc = 0; @@ -1387,9 +1414,9 @@ handle_param_selection_sq1(void) { inc = -1; } } - draw_params_cursor_sq1(param_selection_loc, COL_BG); + draw_params_cursor(param_selection_loc, COL_BG); param_selection_loc = CLAMP(loc + inc, 0, 6); - draw_params_cursor_sq1(param_selection_loc, COL_CURSOR); + draw_params_cursor(param_selection_loc, COL_CURSOR); } // Adjust parameter. @@ -1415,10 +1442,10 @@ handle_param_selection_sq1(void) { params->env_time = CLAMP(params->env_time + inc, 0, 7); } break; case 4: { - params->sweep_number = CLAMP(params->sweep_number + inc, 0, 3); + params->sweep_number = CLAMP(params->sweep_number + inc, 0, 7); } break; case 5: { - params->sweep_time = CLAMP(params->sweep_time + inc, 0, 3); + params->sweep_time = CLAMP(params->sweep_time + inc, 0, 7); } break; case 6: { params->sweep_direction ^= 1; @@ -1431,71 +1458,53 @@ handle_param_selection_sq1(void) { void handle_param_selection_sq2(void) { + // Go back to trigger selection. if (key_tap(KEY_A)) { draw_params_cursor(param_selection_loc, COL_BG); input_handler = handle_trigger_selection; draw_trig_cursor(trig_selection_loc, COL_CURSOR); } - // // Move through the selected synth parameters. - // if (key_tap(KEY_LEFT)) { - // int max_param = 6; - // if (channel_selection_loc == 1) { - // max_param = 3; - // } - // if (param_selection_loc == 0) { - // param_selection_loc = max_param; - // } else { - // param_selection_loc = MAX(param_selection_loc - 1, 0); - // } - // } - // if (key_tap(KEY_RIGHT)) { - // int max_param = 6; - // if (channel_selection_loc == 1) { - // max_param = 3; - // } - // if (param_selection_loc == max_param) { - // param_selection_loc = 0; - // } else { - // param_selection_loc = MIN(param_selection_loc + 1, max_param); - // } - // } - - // // Adjust the parameters up or down. - // if (key_tap(KEY_L) || key_tap(KEY_R)) { - // int inc; - // if (key_tap(KEY_L)) { - // inc = -1; - // } else { - // inc = 1; - // } - // switch (param_selection_loc) { - // case 0: { - // trig->env_volume = CLAMP(trig->env_volume + inc, 0, 15); - // } break; - // case 1: { - // trig->env_time = CLAMP(trig->env_time + inc, 0, 7); - // } break; - // case 2: { - // trig->env_direction ^= 1; - // } break; - // case 3: { - // trig->duty_cycle = CLAMP(trig->duty_cycle + inc, 0, 3); - // } break; - // case 4: { - // trig->sweep_number = CLAMP(trig->sweep_number + inc, 0, 7); - // } break; - // case 5: { - // trig->sweep_time = CLAMP(trig->sweep_time + inc, 0, 7); - // } break; - // case 6: { - // if (trig->sweep_direction == 0) { - // trig->sweep_direction = 1; - // } else { - // trig->sweep_direction = 0; - // } - // } break; - // } - // } + + // Cursor movement. + if (key_tap(KEY_LEFT) || key_tap(KEY_RIGHT)) { + int inc = 0; + int loc = param_selection_loc; + if (key_tap(KEY_RIGHT)) { + inc = 1; + } else { + inc = -1; + } + draw_params_cursor(param_selection_loc, COL_BG); + param_selection_loc = CLAMP(loc + inc, 0, 3); + draw_params_cursor(param_selection_loc, COL_CURSOR); + } + + // Adjust parameter. + if (key_tap(KEY_R) || key_tap(KEY_L)) { + int inc; + if (key_tap(KEY_L)) { + inc = -1; + } else { + inc = 1; + } + ChannelSquareParams *params = &ch2.params[trig_selection_loc]; + switch (param_selection_loc) { + case 0: { + params->duty_cycle = CLAMP(params->duty_cycle + inc, 0, 3); + } break; + case 1: { + params->env_volume = CLAMP(params->env_volume + inc, 0, 15); + } break; + case 2: { + params->env_direction ^= 1; + } break; + case 3: { + params->env_time = CLAMP(params->env_time + inc, 0, 7); + } break; + } + draw_parameters(); + draw_params_cursor(param_selection_loc, COL_CURSOR); + } } void @@ -1530,9 +1539,9 @@ handle_param_selection_wave(void) { inc = -1; } } - draw_params_cursor_wave(param_selection_loc, COL_BG); + draw_params_cursor(param_selection_loc, COL_BG); param_selection_loc = CLAMP(loc + inc, 0, 73); - draw_params_cursor_wave(param_selection_loc, COL_CURSOR); + draw_params_cursor(param_selection_loc, COL_CURSOR); } if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) { int inc = 0; @@ -1586,9 +1595,9 @@ handle_param_selection_wave(void) { inc = -1; } } - draw_params_cursor_wave(param_selection_loc, COL_BG); + draw_params_cursor(param_selection_loc, COL_BG); param_selection_loc = CLAMP(loc + inc, 0, 73); - draw_params_cursor_wave(param_selection_loc, COL_CURSOR); + draw_params_cursor(param_selection_loc, COL_CURSOR); } // Adjust parameter. -- cgit v1.2.1