From f6efcdd98b32f1cd0d5a4a52abb333437c04b44f Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 15 Jan 2024 16:06:05 +0100 Subject: [WIP] Add decay control and attack/decay params on ch3 --- src/sequencer.c | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) (limited to 'src/sequencer.c') diff --git a/src/sequencer.c b/src/sequencer.c index 01b8e95..8863d14 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -160,7 +160,7 @@ play_step(void) { bool ch1_active = settings.global_mute ? !settings.mutes[0] : pat->ch1.active; if (ch1_active && !pat->empty) { TriggerNote *trig = &pat->ch1.notes[step_counter]; - ChannelSquareParams *params = &pat->ch1.params[step_counter]; + ChannelSquare1Params *params = &pat->ch1.params[step_counter]; if (trig->active && should_play(params->prob)) { if (params->sweep_time == 0) { SOUND_SQUARE1_SWEEP = SOUND_SWEEP_DIR(1); @@ -204,7 +204,7 @@ play_step(void) { bool ch2_active = settings.global_mute ? !settings.mutes[1] : pat->ch2.active; if (ch2_active && !pat->empty) { TriggerNote *trig = &pat->ch2.notes[step_counter]; - ChannelSquareParams *params = &pat->ch2.params[step_counter]; + ChannelSquare2Params *params = &pat->ch2.params[step_counter]; if (trig->active && should_play(params->prob)) { SOUND_SQUARE2_CTRL = SOUND_SQUARE_ENV_VOL(params->env_volume) | SOUND_SQUARE_ENV_TIME(params->env_time) @@ -252,6 +252,8 @@ play_step(void) { } break; } wave_env_ticks = 0; + wave_env_attack = params->wave_attack; + wave_env_decay = params->wave_decay; SOUND_WAVE_MODE |= SOUND_WAVE_ENABLE; SOUND_WAVE_FREQ = SOUND_FREQ_RESET @@ -1075,7 +1077,7 @@ handle_pattern_selection(void) { } bool -set_param_selection_sq1(ChannelSquareParams *params, InputHandler return_handler) { +set_param_selection_sq1(ChannelSquare1Params *params, InputHandler return_handler) { // Go back to trigger selection. if (key_released(KEY_A)) { input_handler = return_handler; @@ -1159,7 +1161,7 @@ set_param_selection_sq1(ChannelSquareParams *params, InputHandler return_handler } bool -set_param_selection_sq2(ChannelSquareParams *params, InputHandler return_handler) { +set_param_selection_sq2(ChannelSquare2Params *params, InputHandler return_handler) { // Go back to trigger selection. if (key_released(KEY_A)) { input_handler = return_handler; @@ -1245,11 +1247,9 @@ set_param_selection_wave(ChannelWaveParams *params, InputHandler return_handler) if (key_retrig(KEY_RIGHT)) { if (param_selection_loc == 4) { param_selection_loc = 0; - } else if (param_selection_loc == 6) { - param_selection_loc = 9; } else if (param_selection_loc == 9) { param_selection_loc = 5; - } else if (param_selection_loc < 6) { + } else { param_selection_loc++; } } else { @@ -1257,9 +1257,7 @@ set_param_selection_wave(ChannelWaveParams *params, InputHandler return_handler) param_selection_loc = 4; } else if (param_selection_loc == 5) { param_selection_loc = 9; - } else if (param_selection_loc == 9) { - param_selection_loc = 6; - } else if (param_selection_loc > 0) { + } else { param_selection_loc--; } } @@ -1268,13 +1266,9 @@ set_param_selection_wave(ChannelWaveParams *params, InputHandler return_handler) } if (key_tap(KEY_UP) || key_tap(KEY_DOWN)) { - if (param_selection_loc == 4) { - param_selection_loc = 9; - } else if (param_selection_loc == 9) { - param_selection_loc = 4; - } else if (param_selection_loc < 2) { + if (param_selection_loc < 5) { param_selection_loc += 5; - } else if (param_selection_loc > 4) { + } else if (param_selection_loc >= 5) { param_selection_loc -= 5; } redraw_params = true; @@ -1297,6 +1291,8 @@ set_param_selection_wave(ChannelWaveParams *params, InputHandler return_handler) case 4: { params->prob = CLAMP(params->prob + inc * -1, 0, PROB_NUM - 1); } break; case 5: { params->wave_mode = CLAMP(params->wave_mode + inc, 0, 2); } break; case 6: { params->wave_volume = CLAMP(params->wave_volume + inc, 0, 4); } break; + case 7: { params->wave_attack = CLAMP(params->wave_attack + inc, 0, 24); } break; + case 8: { params->wave_decay = CLAMP(params->wave_decay + inc, 0, 24); } break; case 9: { params->pan = CLAMP(params->pan + inc, -1, 1); } break; } redraw_params = true; @@ -1475,6 +1471,12 @@ handle_param_selection_ch3() { case 6: { pat->ch3.params[i].wave_volume = ch3_params.wave_volume; } break; + case 7: { + pat->ch3.params[i].wave_attack = ch3_params.wave_attack; + } break; + case 8: { + pat->ch3.params[i].wave_decay = ch3_params.wave_decay; + } break; case 9: { pat->ch3.params[i].pan = ch3_params.pan; } break; @@ -1516,13 +1518,13 @@ handle_param_selection_ch4() { void handle_param_selection_sq1() { - ChannelSquareParams *params = &patterns[pattern_selection_loc].ch1.params[trig_selection_loc]; + ChannelSquare1Params *params = &patterns[pattern_selection_loc].ch1.params[trig_selection_loc]; set_param_selection_sq1(params, handle_trigger_selection); } void handle_param_selection_sq2() { - ChannelSquareParams *params = &patterns[pattern_selection_loc].ch2.params[trig_selection_loc]; + ChannelSquare2Params *params = &patterns[pattern_selection_loc].ch2.params[trig_selection_loc]; set_param_selection_sq2(params, handle_trigger_selection); } @@ -1543,7 +1545,7 @@ nudge_trigs(int cur_loc, int next_loc) { Pattern *pat = &patterns[pattern_selection_loc]; switch (channel_selection_loc) { case 0: { - ChannelSquareParams cur_params = pat->ch1.params[cur_loc]; + ChannelSquare1Params cur_params = pat->ch1.params[cur_loc]; TriggerNote cur_trig = pat->ch1.notes[cur_loc]; pat->ch1.params[cur_loc] = pat->ch1.params[next_loc]; pat->ch1.notes[cur_loc] = pat->ch1.notes[next_loc]; @@ -1551,7 +1553,7 @@ nudge_trigs(int cur_loc, int next_loc) { pat->ch1.notes[next_loc] = cur_trig; } break; case 1: { - ChannelSquareParams cur_params = pat->ch2.params[cur_loc]; + ChannelSquare2Params cur_params = pat->ch2.params[cur_loc]; TriggerNote cur_trig = pat->ch2.notes[cur_loc]; pat->ch2.params[cur_loc] = pat->ch2.params[next_loc]; pat->ch2.notes[cur_loc] = pat->ch2.notes[next_loc]; -- cgit v1.2.1