diff options
author | Bad Diode <bd@badd10de.dev> | 2023-04-24 12:42:16 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-04-24 12:42:16 +0200 |
commit | b83958d07ec0e4dcc185f40928a84d1bcdd48675 (patch) | |
tree | 5cce184744bbaf82bf30a5a9e8498c94a2758037 | |
parent | 78b04e72e67eb41b67732673ef043e990ad6c57e (diff) | |
download | stepper-b83958d07ec0e4dcc185f40928a84d1bcdd48675.tar.gz stepper-b83958d07ec0e4dcc185f40928a84d1bcdd48675.zip |
Add transposition of channel notes with SEL + L/R
-rw-r--r-- | src/main.c | 3 | ||||
-rw-r--r-- | src/sequencer.c | 56 |
2 files changed, 41 insertions, 18 deletions
@@ -24,7 +24,8 @@ WITH REGARD TO THIS SOFTWARE. | |||
24 | // | 24 | // |
25 | // Quality of life improvements. | 25 | // Quality of life improvements. |
26 | // - Per channel sound adjustments that modify the sound in all trigs. | 26 | // - Per channel sound adjustments that modify the sound in all trigs. |
27 | // - Per-octave note adjustment with Select + L/R on a trig. | 27 | // + Per-octave note adjustment with Select + L/R on a trig. |
28 | // + Transpose channel with SEL + L/R on channel select. | ||
28 | // - Pattern chaining for more than 1 queue and/or song mode. | 29 | // - Pattern chaining for more than 1 queue and/or song mode. |
29 | // - Undo/Redo. | 30 | // - Undo/Redo. |
30 | // - Add a settings page to change some configuration parameters. | 31 | // - Add a settings page to change some configuration parameters. |
diff --git a/src/sequencer.c b/src/sequencer.c index d3f2483..8f2b183 100644 --- a/src/sequencer.c +++ b/src/sequencer.c | |||
@@ -185,32 +185,63 @@ get_current_trig(void) { | |||
185 | 185 | ||
186 | void | 186 | void |
187 | handle_channel_selection(void) { | 187 | handle_channel_selection(void) { |
188 | Pattern *pat = &patterns[pattern_selection_loc]; | ||
188 | if (key_tap(KEY_B)) { | 189 | if (key_tap(KEY_B)) { |
189 | if (key_hold(KEY_SELECT)) { | 190 | if (key_hold(KEY_SELECT)) { |
190 | clipboard_copy(); | 191 | clipboard_copy(); |
191 | } else { | 192 | } else { |
192 | switch (channel_selection_loc) { | 193 | switch (channel_selection_loc) { |
193 | case 0: { | 194 | case 0: { |
194 | patterns[pattern_selection_loc].ch1.active ^= 1; | 195 | pat->ch1.active ^= 1; |
195 | } break; | 196 | } break; |
196 | case 1: { | 197 | case 1: { |
197 | patterns[pattern_selection_loc].ch2.active ^= 1; | 198 | pat->ch2.active ^= 1; |
198 | } break; | 199 | } break; |
199 | case 2: { | 200 | case 2: { |
200 | patterns[pattern_selection_loc].ch3.active ^= 1; | 201 | pat->ch3.active ^= 1; |
201 | } break; | 202 | } break; |
202 | case 3: { | 203 | case 3: { |
203 | patterns[pattern_selection_loc].ch4.active ^= 1; | 204 | pat->ch4.active ^= 1; |
204 | } break; | 205 | } break; |
205 | } | 206 | } |
206 | redraw_channels = true; | 207 | redraw_channels = true; |
207 | } | 208 | } |
208 | } else { | 209 | } else if (key_tap(KEY_A)) { |
209 | if (key_tap(KEY_A)) { | 210 | if (key_hold(KEY_SELECT)) { |
210 | if (key_hold(KEY_SELECT)) { | 211 | clipboard_paste(); |
211 | clipboard_paste(); | 212 | } |
213 | } else if (key_tap(KEY_L)) { | ||
214 | s32 inc = -1; | ||
215 | if (key_hold(KEY_SELECT)) { | ||
216 | inc = -12; | ||
217 | } | ||
218 | for (size_t i = 0; i < 16; i++) { | ||
219 | TriggerNote *trig; | ||
220 | switch (channel_selection_loc) { | ||
221 | case 0: { trig = &pat->ch1.notes[i]; } break; | ||
222 | case 1: { trig = &pat->ch2.notes[i]; } break; | ||
223 | case 2: { trig = &pat->ch3.notes[i]; } break; | ||
224 | case 3: { trig = &pat->ch4.notes[i]; } break; | ||
212 | } | 225 | } |
226 | trig->note = MAX((s32)trig->note + inc, (s32)NOTE_C_2); | ||
227 | } | ||
228 | redraw_trigs = true; | ||
229 | } else if (key_tap(KEY_R)) { | ||
230 | s32 inc = 1; | ||
231 | if (key_hold(KEY_SELECT)) { | ||
232 | inc = 12; | ||
233 | } | ||
234 | for (size_t i = 0; i < 16; i++) { | ||
235 | TriggerNote *trig; | ||
236 | switch (channel_selection_loc) { | ||
237 | case 0: { trig = &pat->ch1.notes[i]; } break; | ||
238 | case 1: { trig = &pat->ch2.notes[i]; } break; | ||
239 | case 2: { trig = &pat->ch3.notes[i]; } break; | ||
240 | case 3: { trig = &pat->ch4.notes[i]; } break; | ||
241 | } | ||
242 | trig->note = MIN((s32)trig->note + inc, (s32)NOTE_C_8 - 1); | ||
213 | } | 243 | } |
244 | redraw_trigs = true; | ||
214 | } | 245 | } |
215 | if (key_tap(KEY_RIGHT)) { | 246 | if (key_tap(KEY_RIGHT)) { |
216 | trig_selection_loc = 0; | 247 | trig_selection_loc = 0; |
@@ -887,15 +918,6 @@ handle_sequencer_input(void) { | |||
887 | clipboard_copy(); | 918 | clipboard_copy(); |
888 | } | 919 | } |
889 | input_handler(); | 920 | input_handler(); |
890 | // // if (input_handler == handle_right_col_selection) { | ||
891 | // // input_handler(); | ||
892 | // // } | ||
893 | // // // Clipboard combo. | ||
894 | // // else if (key_tap(KEY_A)) { | ||
895 | // // clipboard_paste(); | ||
896 | // // } else if (key_tap(KEY_B)){ | ||
897 | // // clipboard_copy(); | ||
898 | // // } | ||
899 | } else { | 921 | } else { |
900 | input_handler(); | 922 | input_handler(); |
901 | } | 923 | } |