diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/drawing.c | 20 | ||||
-rw-r--r-- | src/sequencer.c | 20 |
2 files changed, 24 insertions, 16 deletions
diff --git a/src/drawing.c b/src/drawing.c index 27e265b..50f3de3 100644 --- a/src/drawing.c +++ b/src/drawing.c | |||
@@ -73,14 +73,18 @@ draw_channels(void) { | |||
73 | }; | 73 | }; |
74 | for (size_t i = 0; i < 4; i++) { | 74 | for (size_t i = 0; i < 4; i++) { |
75 | bool active = false; | 75 | bool active = false; |
76 | switch (i) { | 76 | if (settings.global_mute) { |
77 | case 0: { active = patterns[pattern_selection_loc].ch1.active; } break; | 77 | active = !settings.mutes[i]; |
78 | case 1: { active = patterns[pattern_selection_loc].ch2.active; } break; | 78 | } else { |
79 | case 2: { active = patterns[pattern_selection_loc].ch3.active; } break; | 79 | switch (i) { |
80 | case 3: { active = patterns[pattern_selection_loc].ch4.active; } break; | 80 | case 0: { active = patterns[pattern_selection_loc].ch1.active; } break; |
81 | } | 81 | case 1: { active = patterns[pattern_selection_loc].ch2.active; } break; |
82 | if (patterns[pattern_selection_loc].empty) { | 82 | case 2: { active = patterns[pattern_selection_loc].ch3.active; } break; |
83 | active = true; | 83 | case 3: { active = patterns[pattern_selection_loc].ch4.active; } break; |
84 | } | ||
85 | if (patterns[pattern_selection_loc].empty) { | ||
86 | active = true; | ||
87 | } | ||
84 | } | 88 | } |
85 | u8 clr = active ? colors[i] : COL_OFF; | 89 | u8 clr = active ? colors[i] : COL_OFF; |
86 | size_t y = CHAN_START_Y + i * CHAN_OFFSET_Y; | 90 | size_t y = CHAN_START_Y + i * CHAN_OFFSET_Y; |
diff --git a/src/sequencer.c b/src/sequencer.c index 07f3012..58714cb 100644 --- a/src/sequencer.c +++ b/src/sequencer.c | |||
@@ -151,7 +151,8 @@ play_step(void) { | |||
151 | } | 151 | } |
152 | chain.playing = true; | 152 | chain.playing = true; |
153 | } | 153 | } |
154 | if (pat->ch1.active && !pat->empty) { | 154 | bool ch1_active = settings.global_mute ? !settings.mutes[0] : pat->ch1.active; |
155 | if (ch1_active && !pat->empty) { | ||
155 | TriggerNote *trig = &pat->ch1.notes[step_counter]; | 156 | TriggerNote *trig = &pat->ch1.notes[step_counter]; |
156 | ChannelSquareParams *params = &pat->ch1.params[step_counter]; | 157 | ChannelSquareParams *params = &pat->ch1.params[step_counter]; |
157 | if (trig->active && should_play(params->prob)) { | 158 | if (trig->active && should_play(params->prob)) { |
@@ -196,7 +197,8 @@ play_step(void) { | |||
196 | SOUND_SQUARE1_FREQ = SOUND_FREQ_RESET; | 197 | SOUND_SQUARE1_FREQ = SOUND_FREQ_RESET; |
197 | SOUND_SQUARE1_CTRL = 0; | 198 | SOUND_SQUARE1_CTRL = 0; |
198 | } | 199 | } |
199 | if (pat->ch2.active && !pat->empty) { | 200 | bool ch2_active = settings.global_mute ? !settings.mutes[1] : pat->ch2.active; |
201 | if (ch2_active && !pat->empty) { | ||
200 | TriggerNote *trig = &pat->ch2.notes[step_counter]; | 202 | TriggerNote *trig = &pat->ch2.notes[step_counter]; |
201 | ChannelSquareParams *params = &pat->ch2.params[step_counter]; | 203 | ChannelSquareParams *params = &pat->ch2.params[step_counter]; |
202 | if (trig->active && should_play(params->prob)) { | 204 | if (trig->active && should_play(params->prob)) { |
@@ -222,7 +224,8 @@ play_step(void) { | |||
222 | SOUND_SQUARE2_FREQ = SOUND_FREQ_RESET; | 224 | SOUND_SQUARE2_FREQ = SOUND_FREQ_RESET; |
223 | SOUND_SQUARE2_CTRL = 0; | 225 | SOUND_SQUARE2_CTRL = 0; |
224 | } | 226 | } |
225 | if (pat->ch3.active && !pat->empty) { | 227 | bool ch3_active = settings.global_mute ? !settings.mutes[2] : pat->ch3.active; |
228 | if (ch3_active && !pat->empty) { | ||
226 | TriggerNote *trig = &pat->ch3.notes[step_counter]; | 229 | TriggerNote *trig = &pat->ch3.notes[step_counter]; |
227 | ChannelWaveParams *params = &pat->ch3.params[step_counter]; | 230 | ChannelWaveParams *params = &pat->ch3.params[step_counter]; |
228 | if (trig->active && should_play(params->prob)) { | 231 | if (trig->active && should_play(params->prob)) { |
@@ -271,7 +274,8 @@ play_step(void) { | |||
271 | SOUND_WAVE_FREQ = SOUND_FREQ_RESET; | 274 | SOUND_WAVE_FREQ = SOUND_FREQ_RESET; |
272 | SOUND_WAVE_CTRL = SOUND_WAVE_MUTE; | 275 | SOUND_WAVE_CTRL = SOUND_WAVE_MUTE; |
273 | } | 276 | } |
274 | if (pat->ch4.active && !pat->empty) { | 277 | bool ch4_active = settings.global_mute ? !settings.mutes[3] : pat->ch4.active; |
278 | if (ch4_active && !pat->empty) { | ||
275 | TriggerNote *trig = &pat->ch4.notes[step_counter]; | 279 | TriggerNote *trig = &pat->ch4.notes[step_counter]; |
276 | ChannelNoiseParams *params = &pat->ch4.params[step_counter]; | 280 | ChannelNoiseParams *params = &pat->ch4.params[step_counter]; |
277 | if (trig->active && should_play(params->prob)) { | 281 | if (trig->active && should_play(params->prob)) { |
@@ -384,10 +388,10 @@ handle_channel_selection(void) { | |||
384 | clear_pattern(pattern_selection_loc); | 388 | clear_pattern(pattern_selection_loc); |
385 | } | 389 | } |
386 | switch (channel_selection_loc) { | 390 | switch (channel_selection_loc) { |
387 | case 0: { pat->ch1.active ^= 1; } break; | 391 | case 0: { if (settings.global_mute) { settings.mutes[0] ^= 1; } else { pat->ch1.active ^= 1; } } break; |
388 | case 1: { pat->ch2.active ^= 1; } break; | 392 | case 1: { if (settings.global_mute) { settings.mutes[1] ^= 1; } else { pat->ch2.active ^= 1; } } break; |
389 | case 2: { pat->ch3.active ^= 1; } break; | 393 | case 2: { if (settings.global_mute) { settings.mutes[2] ^= 1; } else { pat->ch3.active ^= 1; } } break; |
390 | case 3: { pat->ch4.active ^= 1; } break; | 394 | case 3: { if (settings.global_mute) { settings.mutes[3] ^= 1; } else { pat->ch4.active ^= 1; } } break; |
391 | } | 395 | } |
392 | redraw_channels = true; | 396 | redraw_channels = true; |
393 | } | 397 | } |