From 8047b0c5b14ddfdef83d8a9b5d978947614ea80b Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 11 Jun 2021 18:22:58 +0200 Subject: Add volume selection to ch3 --- src/sequencer.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 61 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/sequencer.c b/src/sequencer.c index 0f3cff7..d3e6858 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -135,7 +135,7 @@ static const u32 square_wave[16] = { static int bpm = 115; static int step_counter = 0; int trig_selection_loc = 0; -int param_selection_loc = 70; +int param_selection_loc = 0; int channel_selection_loc = 0; typedef struct TriggerNote { @@ -579,6 +579,8 @@ draw_params_cursor_ch3(size_t i, u8 clr) { 71, 88, 105, 122, // Mode selection. 141, + // Volume selection. + 141, }; u8 y_positions[] = { // 32 half bytes (Wave A) @@ -597,6 +599,8 @@ draw_params_cursor_ch3(size_t i, u8 clr) { 20, 20, 20, 20, // Mode seleciton. 20, + // Volume seleciton. + 0, }; size_t cursor_length = 0; if (i < 64) { @@ -712,26 +716,56 @@ draw_parameters_ch3(void) { // Mode selection. { size_t x = PARAMS_START_X + 140; - size_t y = PARAMS_START_Y + PARAMS_H - 20; + size_t y = PARAMS_START_Y + PARAMS_H - 17; draw_line(x, y + 4, x + 5, y + 4, COL_FG); draw_line(x + 25, y + 4, x + 30, y + 4, COL_FG); - draw_line(x, y + 5, x, y + 19, COL_FG); - draw_line(x + 30, y + 5, x + 30, y + 19, COL_FG); - draw_line(x, y + 20, x + 30, y + 20, COL_FG); + draw_line(x, y + 5, x, y + 16, COL_FG); + draw_line(x + 30, y + 5, x + 30, y + 17, COL_FG); + draw_line(x, y + 17, x + 30, y + 17, COL_FG); txt_drawf_small("mode", x + 6, y, 4, COL_FG); switch (ch3.params[trig_selection_loc].wave_mode) { case 0: { - txt_drawf("A", x + 12, y + 9, 6, COL_FG); + txt_drawf("A", x + 12, y + 8, 6, COL_FG); } break; case 1: { - txt_drawf("B", x + 12, y + 9, 6, COL_FG); + txt_drawf("B", x + 12, y + 8, 6, COL_FG); } break; case 2: { - txt_drawf("A+B", x + 6, y + 9, 6, COL_FG); + txt_drawf("A+B", x + 6, y + 8, 6, COL_FG); } break; case 3: { - txt_drawf("B+A", x + 6, y + 9, 6, COL_FG); + txt_drawf("B+A", x + 6, y + 8, 6, COL_FG); + } break; + } + } + + // Wave volume. + { + size_t x = PARAMS_START_X + 140; + size_t y = PARAMS_START_Y + PARAMS_H - 40; + draw_line(x, y + 7, x + 7, y + 7, COL_FG); + draw_line(x + 23, y + 7, x + 30, y + 7, COL_FG); + draw_line(x, y + 8, x, y + 19, COL_FG); + draw_line(x + 30, y + 8, x + 30, y + 19, COL_FG); + draw_line(x, y + 20, x + 30, y + 20, COL_FG); + txt_drawf_small("vol", x + 8, y + 3, 4, COL_FG); + + switch (ch3.params[trig_selection_loc].wave_volume) { + case 0: { + txt_drawf("0", x + 12, y + 10, 6, COL_FG); + } break; + case 1: { + txt_drawf("25", x + 9, y + 10, 6, COL_FG); + } break; + case 2: { + txt_drawf("50", x + 9, y + 10, 6, COL_FG); + } break; + case 3: { + txt_drawf("75", x + 9, y + 10, 6, COL_FG); + } break; + case 4: { + txt_drawf("100", x + 6, y + 10, 6, COL_FG); } break; } } @@ -1092,21 +1126,23 @@ handle_param_selection_ch3(void) { if (loc == 15 || loc == 31) { inc = 17; } else if (loc == 47) { - inc = 25; + inc = 26; } else if (loc == 63) { inc = 9; - } else if (loc != 47 && loc != 63) { + } else if (loc != 47 && loc != 63 && loc < 72) { inc = 1; } } else { if (loc == 32 || loc == 48) { inc = -17; + } else if (loc == 73) { + inc = -26; } else if (loc != 16 && loc != 64) { inc = -1; } } draw_params_cursor_ch3(param_selection_loc, COL_BG); - param_selection_loc = CLAMP(loc + inc, 0, 72); + param_selection_loc = CLAMP(loc + inc, 0, 73); draw_params_cursor_ch3(param_selection_loc, COL_BLUE); } if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) { @@ -1131,6 +1167,10 @@ handle_param_selection_ch3(void) { inc = -14; } else if (loc == 71) { inc = -11; + } else if (loc == 72) { + inc = 1; + } else if (loc == 73) { + inc = -1; } } else { if (loc < 16 || (loc >= 32 && loc < 48)) { @@ -1151,10 +1191,14 @@ handle_param_selection_ch3(void) { inc = 14 - (loc - 56); } else if (loc >= 60 && loc <= 63) { inc = 11 - (loc - 60); + } else if (loc == 72) { + inc = 1; + } else if (loc == 73) { + inc = -1; } } draw_params_cursor_ch3(param_selection_loc, COL_BG); - param_selection_loc = CLAMP(loc + inc, 0, 71); + param_selection_loc = CLAMP(loc + inc, 0, 73); draw_params_cursor_ch3(param_selection_loc, COL_BLUE); } if (key_tap(KEY_R) || key_tap(KEY_L)) { @@ -1226,9 +1270,12 @@ handle_param_selection_ch3(void) { memcpy32(wave_b, rand_wave, 16); } break; } - } else { + } else if (param_selection_loc == 72) { u8 *wave_mode = &ch3.params[trig_selection_loc].wave_mode; *wave_mode = CLAMP(*wave_mode + inc, 0, 3); + } else if (param_selection_loc == 73) { + u8 *wave_volume = &ch3.params[trig_selection_loc].wave_volume; + *wave_volume = CLAMP(*wave_volume + inc, 0, 4); } draw_parameters(); draw_params_cursor(param_selection_loc, COL_BLUE); -- cgit v1.2.1