aboutsummaryrefslogtreecommitdiffstats
path: root/src/sequencer.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-07-22 09:30:13 +0200
committerBad Diode <bd@badd10de.dev>2023-07-22 09:30:13 +0200
commit2c4b3648075cc5faa24b859685426b208ccb3a80 (patch)
tree2a14278186211478923f2607c283ced8377af507 /src/sequencer.c
parentbac16fa2662f61cfa3b56111649685b4eb397442 (diff)
downloadstepper-2c4b3648075cc5faa24b859685426b208ccb3a80.tar.gz
stepper-2c4b3648075cc5faa24b859685426b208ccb3a80.zip
Add probability handling and drawing
Diffstat (limited to 'src/sequencer.c')
-rw-r--r--src/sequencer.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/sequencer.c b/src/sequencer.c
index 04153aa..00baebb 100644
--- a/src/sequencer.c
+++ b/src/sequencer.c
@@ -71,6 +71,11 @@ find_prev_pattern(void) {
71 return idx; 71 return idx;
72} 72}
73 73
74bool
75should_play(u8 prob) {
76 return true;
77}
78
74void 79void
75play_step(void) { 80play_step(void) {
76 Pattern *pat = &patterns[current_pattern]; 81 Pattern *pat = &patterns[current_pattern];
@@ -94,7 +99,7 @@ play_step(void) {
94 if (pat->ch1.active) { 99 if (pat->ch1.active) {
95 TriggerNote *trig = &pat->ch1.notes[step_counter]; 100 TriggerNote *trig = &pat->ch1.notes[step_counter];
96 ChannelSquareParams *params = &pat->ch1.params[step_counter]; 101 ChannelSquareParams *params = &pat->ch1.params[step_counter];
97 if (trig->active) { 102 if (trig->active && should_play(params->prob)) {
98 if (params->sweep_time == 0) { 103 if (params->sweep_time == 0) {
99 SOUND_SQUARE1_SWEEP = SOUND_SWEEP_DIR(1); 104 SOUND_SQUARE1_SWEEP = SOUND_SWEEP_DIR(1);
100 } else { 105 } else {
@@ -128,7 +133,7 @@ play_step(void) {
128 if (pat->ch2.active) { 133 if (pat->ch2.active) {
129 TriggerNote *trig = &pat->ch2.notes[step_counter]; 134 TriggerNote *trig = &pat->ch2.notes[step_counter];
130 ChannelSquareParams *params = &pat->ch2.params[step_counter]; 135 ChannelSquareParams *params = &pat->ch2.params[step_counter];
131 if (trig->active) { 136 if (trig->active && should_play(params->prob)) {
132 SOUND_SQUARE2_CTRL = SOUND_SQUARE_ENV_VOL(params->env_volume) 137 SOUND_SQUARE2_CTRL = SOUND_SQUARE_ENV_VOL(params->env_volume)
133 | SOUND_SQUARE_ENV_TIME(params->env_time) 138 | SOUND_SQUARE_ENV_TIME(params->env_time)
134 | SOUND_SQUARE_ENV_DIR(params->env_direction) 139 | SOUND_SQUARE_ENV_DIR(params->env_direction)
@@ -147,7 +152,7 @@ play_step(void) {
147 if (pat->ch3.active) { 152 if (pat->ch3.active) {
148 TriggerNote *trig = &pat->ch3.notes[step_counter]; 153 TriggerNote *trig = &pat->ch3.notes[step_counter];
149 ChannelWaveParams *params = &pat->ch3.params[step_counter]; 154 ChannelWaveParams *params = &pat->ch3.params[step_counter];
150 if (trig->active) { 155 if (trig->active && should_play(params->prob)) {
151 switch (params->wave_mode) { 156 switch (params->wave_mode) {
152 case 0: { 157 case 0: {
153 SOUND_WAVE_MODE = SOUND_WAVE_BANK_SELECT(1); 158 SOUND_WAVE_MODE = SOUND_WAVE_BANK_SELECT(1);
@@ -195,7 +200,7 @@ play_step(void) {
195 if (pat->ch4.active) { 200 if (pat->ch4.active) {
196 TriggerNote *trig = &pat->ch4.notes[step_counter]; 201 TriggerNote *trig = &pat->ch4.notes[step_counter];
197 ChannelNoiseParams *params = &pat->ch4.params[step_counter]; 202 ChannelNoiseParams *params = &pat->ch4.params[step_counter];
198 if (trig->active) { 203 if (trig->active && should_play(params->prob)) {
199 static const u8 div_freq[] = { 204 static const u8 div_freq[] = {
200 7, 6, 5, 4, 7, 6, 5, 4, 7, 6, 5, 4, 205 7, 6, 5, 4, 7, 6, 5, 4, 7, 6, 5, 4,
201 7, 6, 5, 4, 7, 6, 5, 4, 7, 6, 5, 4, 206 7, 6, 5, 4, 7, 6, 5, 4, 7, 6, 5, 4,
@@ -778,7 +783,7 @@ set_param_selection_sq1(ChannelSquareParams *params, InputHandler return_handler
778 } 783 }
779 } break; 784 } break;
780 case 3: { params->env_direction ^= 1; } break; 785 case 3: { params->env_direction ^= 1; } break;
781 case 4: { /* TODO: probability */ } break; 786 case 4: { params->prob = CLAMP(params->prob + inc, 0, PROB_NUM - 1); } break;
782 case 5: { params->sweep_number = CLAMP(params->sweep_number + inc, 0, 7); } break; 787 case 5: { params->sweep_number = CLAMP(params->sweep_number + inc, 0, 7); } break;
783 case 6: { params->sweep_time = CLAMP(params->sweep_time + inc, 0, 7); } break; 788 case 6: { params->sweep_time = CLAMP(params->sweep_time + inc, 0, 7); } break;
784 case 7: { params->sweep_direction ^= 1; } break; 789 case 7: { params->sweep_direction ^= 1; } break;
@@ -843,7 +848,7 @@ set_param_selection_sq2(ChannelSquareParams *params, InputHandler return_handler
843 } 848 }
844 } break; 849 } break;
845 case 3: { params->env_direction ^= 1; } break; 850 case 3: { params->env_direction ^= 1; } break;
846 case 4: { /* TODO: probability */ } break; 851 case 4: { params->prob = CLAMP(params->prob + inc, 0, PROB_NUM - 1); } break;
847 } 852 }
848 redraw_params = true; 853 redraw_params = true;
849 return true; 854 return true;
@@ -907,7 +912,7 @@ set_param_selection_wave(ChannelWaveParams *params, InputHandler return_handler)
907 case 1: { params->phase_a = CLAMP(params->phase_a + inc, 0, WAVE_VARS - 1); } break; 912 case 1: { params->phase_a = CLAMP(params->phase_a + inc, 0, WAVE_VARS - 1); } break;
908 case 2: { params->shape_b = CLAMP(params->shape_a + inc, 0, WAVE_MAX - 1); } break; 913 case 2: { params->shape_b = CLAMP(params->shape_a + inc, 0, WAVE_MAX - 1); } break;
909 case 3: { params->phase_b = CLAMP(params->phase_b + inc, 0, WAVE_VARS - 1); } break; 914 case 3: { params->phase_b = CLAMP(params->phase_b + inc, 0, WAVE_VARS - 1); } break;
910 case 4: { /* TODO: probability */ } break; 915 case 4: { params->prob = CLAMP(params->prob + inc, 0, PROB_NUM - 1); } break;
911 case 5: { params->wave_mode = CLAMP(params->wave_mode + inc, 0, 2); } break; 916 case 5: { params->wave_mode = CLAMP(params->wave_mode + inc, 0, 2); } break;
912 case 6: { params->wave_volume = CLAMP(params->wave_volume + inc, 0, 4); } break; 917 case 6: { params->wave_volume = CLAMP(params->wave_volume + inc, 0, 4); } break;
913 } 918 }
@@ -971,7 +976,7 @@ set_param_selection_noise(ChannelNoiseParams *params, InputHandler return_handle
971 } 976 }
972 } break; 977 } break;
973 case 3: { params->env_direction ^= 1; } break; 978 case 3: { params->env_direction ^= 1; } break;
974 case 4: { /* TODO: probability */ } break; 979 case 4: { params->prob = CLAMP(params->prob + inc, 0, PROB_NUM - 1); } break;
975 } 980 }
976 redraw_params = true; 981 redraw_params = true;
977 return true; 982 return true;