From f6e253b14f7b4930f5a5e6e1d3ee2bd3009802dd Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 8 Jan 2024 12:07:58 +0100 Subject: Make sure the current scale is saved as metadata --- src/main.c | 5 ++--- src/save.h | 2 ++ src/sequencer.c | 50 +++++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 47 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 597f01d..1fdaaa2 100644 --- a/src/main.c +++ b/src/main.c @@ -21,9 +21,8 @@ WITH REGARD TO THIS SOFTWARE. // + Channel params should show if there are some already on all triggers and // modify only the selected parameter, not all of them. // + Channel params (ALL) editing should only copy the value under the cursor. -// - Fix scale being active for noise channel (makes no sense) -// - Should scale mode be toggleable? -// - Save scale on the bank +// + Fix scale being active for noise channel (makes no sense) +// + Save scale on metadata // - Hold L/R retriggers at short intervals? // - Allow using B + dpad to nudge trigs. This will potentially mean switching // to key release to enable trigs. diff --git a/src/save.h b/src/save.h index ccc190b..170e40f 100644 --- a/src/save.h +++ b/src/save.h @@ -11,6 +11,8 @@ typedef struct Metadata { u32 initialized; int current_bank; int current_pattern; + int current_scale; + int current_scale_root; Settings settings; } Metadata; diff --git a/src/sequencer.c b/src/sequencer.c index fed33cb..ee72389 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -107,9 +107,6 @@ select_bank(int i) { if (settings.auto_save) { save_bank(current_bank); } - metadata.current_pattern = current_pattern; - metadata.current_bank = i; - save_metadata(); if (current_bank != i) { load_bank(i); } @@ -123,6 +120,11 @@ select_bank(int i) { current_pattern = 0; next_pattern = 0; } + metadata.current_scale = current_scale; + metadata.current_scale_root = current_scale_root; + metadata.current_pattern = current_pattern; + metadata.current_bank = i; + save_metadata(); current_bank = i; redraw_pattern_buttons = true; redraw_trigs = true; @@ -454,7 +456,14 @@ handle_channel_selection(void) { case 3: { trig = &pat->ch4.notes[i]; } break; default: {trig = &pat->ch1.notes[i]; } break; } - trig->note = scale_note(trig->note, inc); + if (channel_selection_loc == 3) { + int tmp = current_scale; + current_scale = 0; + trig->note = scale_note(trig->note, inc); + current_scale = tmp; + } else { + trig->note = scale_note(trig->note, inc); + } } redraw_trigs = true; } else if (key_tap(KEY_R)) { @@ -471,7 +480,14 @@ handle_channel_selection(void) { case 3: { trig = &pat->ch4.notes[i]; } break; default: {trig = &pat->ch1.notes[i]; } break; } - trig->note = scale_note(trig->note, inc); + if (channel_selection_loc == 3) { + int tmp = current_scale; + current_scale = 0; + trig->note = scale_note(trig->note, inc); + current_scale = tmp; + } else { + trig->note = scale_note(trig->note, inc); + } } redraw_trigs = true; } @@ -1493,7 +1509,14 @@ handle_trigger_selection(void) { } // Decrease note. if (trig->active && !empty) { - trig->note = scale_note(trig->note, inc); + if (channel_selection_loc == 3) { + int tmp = current_scale; + current_scale = 0; + trig->note = scale_note(trig->note, inc); + current_scale = tmp; + } else { + trig->note = scale_note(trig->note, inc); + } } redraw_trigs = true; } else if (key_tap(KEY_R)) { @@ -1503,7 +1526,14 @@ handle_trigger_selection(void) { } // Increase note. if (trig->active && !empty) { - trig->note = scale_note(trig->note, inc); + if (channel_selection_loc == 3) { + int tmp = current_scale; + current_scale = 0; + trig->note = scale_note(trig->note, inc); + current_scale = tmp; + } else { + trig->note = scale_note(trig->note, inc); + } } redraw_trigs = true; } @@ -1584,6 +1614,10 @@ void handle_sequencer_input(void) { if (key_tap(KEY_START)) { if (key_hold(KEY_SELECT)) { + metadata.current_bank = current_bank; + metadata.current_pattern = current_pattern; + metadata.current_scale = current_scale; + metadata.current_scale_root = current_scale_root; save_bank(current_bank); save_metadata(); send_notif("SAVED BANK"); @@ -1682,6 +1716,8 @@ sequencer_init(void) { current_pattern = metadata.current_pattern; next_pattern = metadata.current_pattern; pattern_selection_loc = current_pattern; + current_scale = metadata.current_scale; + current_scale_root = metadata.current_scale_root; settings = metadata.settings; load_bank(metadata.current_bank); } -- cgit v1.2.1