From c9538e0dcd8fd914fa577f89b44ea38b2462f03f Mon Sep 17 00:00:00 2001 From: codicusmaximus Date: Fri, 7 Jul 2017 23:07:07 -0400 Subject: [PATCH 1/4] Added the ability to transpose down when you're at root note 0 --- src/layout.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/layout.c b/src/layout.c index 6cc289e..706d2b1 100644 --- a/src/layout.c +++ b/src/layout.c @@ -119,7 +119,20 @@ void layout_toggle_note(Layout* l, uint8_t note) void layout_transpose(Layout* l, int8_t direction) { - l->root_note = clamp(l->root_note + direction, 0, NUM_NOTES - 1); + if (direction == -1 && l->root_note == 0 && l->octave > 0) + { + l->octave -= 1; + l->root_note = NUM_NOTES -1; + } + else if (direction == 1 && l->root_note == NUM_NOTES -1 && l->octave < NUM_OCTAVES - 1) + { + l->octave += 1; + l->root_note = 0; + } + else + { + l->root_note = clamp(l->root_note + direction, 0, NUM_NOTES - 1); + } layout_assign_pads(l); } From c576d32bf9c4b2e480246ae016c5fc9cfb173f5a Mon Sep 17 00:00:00 2001 From: codicusmaximus Date: Sat, 8 Jul 2017 13:32:44 -0400 Subject: [PATCH 2/4] Many note mode tweaks for usability and implementation of feature request for highlighting notes in scale --- include/colors.h | 11 +++++ include/data.h | 1 + include/interface.h | 1 + include/keyboard.h | 4 +- include/layout.h | 7 +++ include/scale.h | 12 +++++ include/sequence.h | 3 +- resources/subsequencely.syx | Bin 48923 -> 49891 bytes src/colors.c | 66 +++++++++++++++++++++++-- src/grid.c | 4 +- src/keyboard.c | 19 ++++++-- src/layout.c | 95 +++++++++++++++++++++++++++++------- src/scale.c | 21 ++++++++ src/seq.c | 19 ++++++-- 14 files changed, 229 insertions(+), 34 deletions(-) diff --git a/include/colors.h b/include/colors.h index b4cc95e..134e777 100644 --- a/include/colors.h +++ b/include/colors.h @@ -5,13 +5,24 @@ extern const uint8_t root_note_color[3]; extern const uint8_t white_note_color[3]; extern const uint8_t black_note_color[3]; +extern const uint8_t invalid_note_color[3]; extern const uint8_t c_note_color[3]; extern const uint8_t no_note_color[3]; + +extern const uint8_t layout_octave_color[3]; +extern const uint8_t layout_transpose_color[3]; + extern const uint8_t white_key_color[3]; extern const uint8_t black_key_color[3]; extern const uint8_t slider_color[3]; extern const uint8_t off_color[3]; extern const uint8_t on_color[3]; + +extern const uint8_t note_octave_up_colors[10][3]; +extern const uint8_t note_octave_down_colors[10][3]; +extern const uint8_t note_transpose_up_colors[12][3]; +extern const uint8_t note_transpose_down_colors[12][3]; + extern const uint8_t sequence_colors[8][3]; extern const uint8_t number_colors[4][3]; extern const uint8_t drum_colors[4][3]; diff --git a/include/data.h b/include/data.h index 095e13f..635d9ce 100644 --- a/include/data.h +++ b/include/data.h @@ -74,6 +74,7 @@ extern Note* lp_note_storage; extern Scale lp_scale; extern Voices lp_voices; extern PadNotes lp_pad_notes; +extern PadNotes lp_pad_highlights; extern Sequencer lp_sequencer; // Setup UI elements diff --git a/include/interface.h b/include/interface.h index c15226c..40de8c8 100644 --- a/include/interface.h +++ b/include/interface.h @@ -48,6 +48,7 @@ #define VELOCITY_CHECKBOX_POS (41) #define MOD_WHEEL_CHECKBOX_POS (43) #define MOD_CC_CHECKBOX_POS (53) +#define NOTE_HIGHLIGHT_ONLY_POS (28) #define DRUM_CHECKBOX_POS (45) #define MULTICHANNEL_CHECKBOX_POS (55) #define CONTROL_CHECKBOX_POS (81) diff --git a/include/keyboard.h b/include/keyboard.h index 41143dc..ae3c51c 100644 --- a/include/keyboard.h +++ b/include/keyboard.h @@ -30,10 +30,10 @@ typedef struct void keyboard_init(Keyboard* k, Layout* l); /// Toggles a note on or off and updates the layout and scale to match. -uint8_t keyboard_handle_press(Keyboard* k, uint8_t index, uint8_t value); +uint8_t keyboard_handle_press(Keyboard* k, uint8_t index, uint8_t value, uint8_t is_highlight_press); /// Draws the keyboard to the grid. -void keyboard_draw(Keyboard* k); +void keyboard_draw(Keyboard* k, uint8_t draw_highlighted); /// When a change is made to the layout or scale, this function updates the /// keyboard to reflect the current state. diff --git a/include/layout.h b/include/layout.h index 649e43e..cbf658b 100644 --- a/include/layout.h +++ b/include/layout.h @@ -10,6 +10,8 @@ #include "voices.h" #include "util.h" +#define LAYOUT_DEFAULT_OCTAVE 3 + /// The bits where row offset lives. Excludes the drum flag bit, so that /// the drums state doesn't get trashed when you use the row offset slider. #define ROW_OFFSET_MASK (0x7F) @@ -26,6 +28,9 @@ typedef enum /// calculating every time a pad is pressed. typedef int8_t PadNotes[GRID_SIZE][GRID_SIZE]; +/// Cache of which pads are highlighted for note mode +typedef int8_t PadHighlights[GRID_SIZE]; + /// Represents a layout of a scale on a grid. Determines which note and octave /// to start from, and the distance in scale steps between rows of the grid. typedef struct @@ -64,6 +69,8 @@ void layout_set_drums(Layout* l); /// Toggles the note in the scale, and updates the layout. void layout_toggle_note(Layout* l, uint8_t note); +/// Toggles the note highlight +void layout_toggle_highlight(Layout* l, uint8_t note_highlight); /// Draws the layout onto the grid. void layout_draw(Layout* l); diff --git a/include/scale.h b/include/scale.h index 0f29cdb..bdd6852 100644 --- a/include/scale.h +++ b/include/scale.h @@ -15,6 +15,11 @@ typedef struct /// note) is enabled. [0] (the root note) is always on. uint16_t notes; + /// Bitfield indicating whether the nth note is lighted or not + /// which applies if the highlight setting is turned on + /// Otherwise, white keys are lighted and black keys are dark + uint16_t notes_highlighted; + /// Array of ints indicating how many half steps the nth scale note is /// offset from the root note (only the first num_notes entries are set) int8_t offsets[NUM_NOTES]; @@ -28,6 +33,10 @@ void scale_init(Scale* s); /// root note) is contained in the scale. uint8_t scale_contains_note(Scale* s, uint8_t note); +/// Returns true or false depending on whether then nth note (counted from the +/// root note) is contained in the scale's highlight list +uint8_t scale_contains_highlight(Scale* s, uint8_t note); + /// Sets all the notes of the scale at once. void scale_set_notes(Scale* s, uint16_t notes); @@ -35,4 +44,7 @@ void scale_set_notes(Scale* s, uint16_t notes); /// offsets. void scale_toggle_note(Scale* s, uint8_t note); +/// Toggles the nth note's highlight +void scale_toggle_highlight(Scale* s, uint8_t note); + #endif diff --git a/include/sequence.h b/include/sequence.h index 9aa42cf..8fcde68 100644 --- a/include/sequence.h +++ b/include/sequence.h @@ -43,7 +43,8 @@ typedef enum SEQ_DRUM_MULTICHANNEL = 1 << 11, // Send each note on its own channel SEQ_FULL_VELOCITY = 1 << 12, // Always send notes at full velocity SEQ_MOD_WHEEL = 1 << 13, // Show the mod wheel in notes mode - SEQ_MOD_CC = 1 << 14 // Send CC from mod wheel instead of aftertouch + SEQ_MOD_CC = 1 << 14, // Send CC from mod wheel instead of aftertouch + NOTE_HIGHLIGHT_ONLY = 1 << 15 // Always show all notes and only highlight the ones in the scale } SequenceFlags; #define SEQ_QUEUED_OFFSET (4) diff --git a/resources/subsequencely.syx b/resources/subsequencely.syx index 175ce3c5626a5349ee95c39b22bee2eeae40d8e6..1c52164a9f17d8c038d4ba224ab08f1e2bb33e81 100644 GIT binary patch literal 49891 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 literal 48923 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 Bo0|Xt diff --git a/src/colors.c b/src/colors.c index 5eb0a07..08adae6 100644 --- a/src/colors.c +++ b/src/colors.c @@ -2,18 +2,78 @@ #include "app.h" #include "colors.h" -const uint8_t root_note_color[3] = {0x0F, 0x04, 0x04}; -const uint8_t white_note_color[3] = {0x02, 0x02, 0x06}; -const uint8_t black_note_color[3] = {0x00, 0x00, 0x00}; +const uint8_t root_note_color[3] = {0x78, 0x20, 0x20}; +const uint8_t white_note_color[3] = {0x10, 0x10, 0x30}; +const uint8_t black_note_color[3] = {0x04, 0x04, 0x04}; +const uint8_t invalid_note_color[3] = {0x3F, 0x00, 0x00}; const uint8_t c_note_color[3] = {0x02, 0x06, 0x02}; const uint8_t no_note_color[3] = {0x0F, 0x00, 0x00}; +const uint8_t layout_octave_color[3] = {0x00, 0x00, 0xFF}; +const uint8_t layout_transpose_color[3] = {0x00, 0xFF, 0x00}; + const uint8_t white_key_color[3] = {0x0F, 0x2F, 0x7F}; const uint8_t black_key_color[3] = {0x3F, 0x00, 0x17}; const uint8_t slider_color[3] = {0x07, 0x7F, 0x0F}; const uint8_t off_color[3] = {0x00, 0x00, 0x00}; const uint8_t on_color[3] = {0xFF, 0xFF, 0xFF}; +const uint8_t note_octave_up_colors[10][3] = { + {0x00, 0x00, 0x00}, + {0x00, 0x00, 0x02}, + {0x00, 0x00, 0x08}, + {0x00, 0x00, 0x20}, // Default Octave + {0x00, 0x00, 0x28}, + {0x00, 0x00, 0x30}, + {0x00, 0x00, 0x3F}, + {0x10, 0x00, 0x3F}, + {0x3F, 0x00, 0x20}, + {0x3F, 0x00, 0x00} +}; + +const uint8_t note_octave_down_colors[10][3] = { + {0x00, 0x00, 0x3F}, + {0x00, 0x00, 0x30}, + {0x00, 0x00, 0x28}, + {0x00, 0x00, 0x20}, // Default Octave + {0x00, 0x00, 0x08}, + {0x00, 0x00, 0x02}, + {0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00} +}; + +const uint8_t note_transpose_up_colors[12][3] = { + {0x00, 0x00, 0x00}, // 0 (default / no transposition) + {0x00, 0x04, 0x00}, // +1 + {0x00, 0x20, 0x00}, // +2 + {0x00, 0x3F, 0x00}, // +3 + {0x0F, 0x37, 0x00}, // +4 + {0x1F, 0x2F, 0x00}, // +5 + {0x2F, 0x27, 0x00}, //+-6 + {0x00, 0x00, 0x00}, // -5 + {0x00, 0x00, 0x00}, // -4 + {0x00, 0x00, 0x00}, // -3 + {0x00, 0x00, 0x00}, // -2 + {0x00, 0x00, 0x00} // -1 +}; + +const uint8_t note_transpose_down_colors[12][3] = { + {0x00, 0x00, 0x00}, // 0 (default / no transposition) + {0x00, 0x00, 0x00}, // +1 + {0x00, 0x00, 0x00}, // +2 + {0x00, 0x00, 0x00}, // +3 + {0x00, 0x00, 0x00}, // +4 + {0x00, 0x00, 0x00}, // +5 + {0x2F, 0x27, 0x00}, //+-6 + {0x1F, 0x2F, 0x00}, // -5 + {0x0F, 0x37, 0x00}, // -4 + {0x00, 0x3F, 0x00}, // -3 + {0x00, 0x20, 0x00}, // -2 + {0x00, 0x04, 0x00} // -1 +}; + const uint8_t sequence_colors[8][3] = { {0x7F, 0x00, 0x00}, {0x3F, 0x0F, 0x00}, diff --git a/src/grid.c b/src/grid.c index 60b5f04..ebc1a02 100644 --- a/src/grid.c +++ b/src/grid.c @@ -23,7 +23,7 @@ void grid_update_cache(Sequencer* sr, int8_t translation) } else if (translation == -1) { - uint8_t scale_deg = (s->y + GRID_SIZE) % lp_scale.num_notes; + //uint8_t scale_deg = (s->y + GRID_SIZE) % lp_scale.num_notes; for (uint8_t i = GRID_SIZE; i > 0; i--) { note_numbers[i] = note_numbers[i - 1]; @@ -63,7 +63,7 @@ void grid_draw(Sequencer* sr) for (uint8_t x = 0; x < GRID_SIZE; x++) { uint8_t seq_x = grid_to_sequence_x(s, x); - Note* n; + Note* n = 0; uint8_t y; for (uint8_t n_i = 0; n_i < zoom; n_i++) diff --git a/src/keyboard.c b/src/keyboard.c index 2fca073..4e45cae 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -58,7 +58,7 @@ uint8_t keyboard_index_is_key(Keyboard* k, uint8_t index) return k->index_to_note[index - FIRST_KEYBOARD_PAD] != -1; } -uint8_t keyboard_handle_press(Keyboard* k, uint8_t index, uint8_t value) +uint8_t keyboard_handle_press(Keyboard* k, uint8_t index, uint8_t value, uint8_t is_highlight_press) { if (value == 0 || !keyboard_index_is_key(k, index)) { @@ -68,12 +68,18 @@ uint8_t keyboard_handle_press(Keyboard* k, uint8_t index, uint8_t value) uint8_t deg = (k->index_to_note[index - FIRST_KEYBOARD_PAD] - k->layout->root_note + NUM_NOTES) % NUM_NOTES; - layout_toggle_note(k->layout, deg); - + if (is_highlight_press) + { + layout_toggle_highlight(k->layout, deg); + } + else + { + layout_toggle_note(k->layout, deg); + } return 1; } -void keyboard_draw(Keyboard* k) +void keyboard_draw(Keyboard* k, uint8_t draw_highlighted) { const uint8_t* color = white_key_color; @@ -99,7 +105,10 @@ void keyboard_draw(Keyboard* k) } int8_t deg = (note + NUM_NOTES - k->layout->root_note) % NUM_NOTES; - uint8_t is_in_scale = scale_contains_note(&lp_scale, deg); + if (draw_highlighted && !scale_contains_note(&lp_scale, deg)) { + color = invalid_note_color; + } + uint8_t is_in_scale = draw_highlighted ? scale_contains_highlight(&lp_scale, deg) : scale_contains_note(&lp_scale, deg); uint8_t dimness = !is_in_scale * 4; plot_pad_dim(i + FIRST_KEYBOARD_PAD, color, dimness); } diff --git a/src/layout.c b/src/layout.c index 706d2b1..3aec9ce 100644 --- a/src/layout.c +++ b/src/layout.c @@ -9,7 +9,7 @@ void layout_init(Layout* l) { l->root_note = 0; - l->octave = 2; + l->octave = LAYOUT_DEFAULT_OCTAVE; l->row_offset = 5; } @@ -105,6 +105,7 @@ void layout_assign_scale(Layout* l) note_number += lp_scale.offsets[scale_deg]; lp_pad_notes[y][x] = note_number; + lp_pad_highlights[y][x] = scale_contains_highlight(&lp_scale, lp_scale.offsets[scale_deg]); } start_scale_deg += l->row_offset; @@ -117,9 +118,18 @@ void layout_toggle_note(Layout* l, uint8_t note) layout_assign_pads(l); } +void layout_toggle_highlight(Layout* l, uint8_t note_highlight) +{ + scale_toggle_highlight(&lp_scale, note_highlight); + layout_assign_pads(l); +} + void layout_transpose(Layout* l, int8_t direction) { - if (direction == -1 && l->root_note == 0 && l->octave > 0) + if (direction == 0) { + l->root_note = 0; + } + else if (direction == -1 && l->root_note == 0 && l->octave > 0) { l->octave -= 1; l->root_note = NUM_NOTES -1; @@ -138,7 +148,11 @@ void layout_transpose(Layout* l, int8_t direction) void layout_transpose_octave(Layout* l, int8_t direction) { - l->octave = clamp(l->octave + direction, 0, NUM_OCTAVES - 1); + if (direction == 0) { + l->octave = LAYOUT_DEFAULT_OCTAVE; + } else { + l->octave = clamp(l->octave + direction, 0, NUM_OCTAVES - 1); + } layout_assign_pads(l); } @@ -196,19 +210,17 @@ void layout_light_scale(Layout* l, uint8_t note_number, uint8_t on) { uint8_t index = FIRST_PAD; const uint8_t* color = off_color; + uint8_t dimness = 3; if (on) { color = on_color; + dimness = 0; } else if (layout_is_root_note(l, note_number)) { color = root_note_color; } - else if (note_number % NUM_NOTES == 0) - { - color = c_note_color; - } else if (diatonic_notes[note_number % NUM_NOTES]) { color = white_note_color; @@ -218,6 +230,14 @@ void layout_light_scale(Layout* l, uint8_t note_number, uint8_t on) color = black_note_color; } + if (note_number < 0) { + color = invalid_note_color; + } + else if (note_number % NUM_NOTES == 0) + { + dimness = 0; + } + for (uint8_t y = 0; y < GRID_SIZE; y++) { if (lp_pad_notes[y][GRID_SIZE - 1] < note_number) @@ -238,7 +258,7 @@ void layout_light_scale(Layout* l, uint8_t note_number, uint8_t on) continue; } - plot_pad(coord_to_index(x, y), color); + plot_pad_dim(coord_to_index(x, y), color, dimness); index++; } @@ -250,35 +270,53 @@ void layout_light_scale(Layout* l, uint8_t note_number, uint8_t on) /******************************************************************************* * Event handling functions ******************************************************************************/ - +uint8_t last_pressed = 0; uint8_t layout_handle_transpose(Layout* l, uint8_t index, uint8_t value) { if (value == 0) { + last_pressed = 0; return 0; } if (index == LP_TRANSPOSE_UP) { - layout_transpose(l, 1); + if (last_pressed == LP_TRANSPOSE_DOWN) { + layout_transpose(l, 0); // Reset to default + } else { + layout_transpose(l, 1); + } } else if (index == LP_TRANSPOSE_DOWN) { - layout_transpose(l, -1); + if (last_pressed == LP_TRANSPOSE_UP) { + layout_transpose(l, 0); // Reset to default + } else { + layout_transpose(l, -1); + } } else if (index == LP_OCTAVE_UP) { - layout_transpose_octave(l, 1); + if (last_pressed == LP_OCTAVE_DOWN) { + layout_transpose_octave(l, 0); // Reset to default + } else { + layout_transpose_octave(l, 1); + } } else if (index == LP_OCTAVE_DOWN) { - layout_transpose_octave(l, -1); + if (last_pressed == LP_OCTAVE_UP) { + layout_transpose_octave(l, 0); // Reset to default + } else { + layout_transpose_octave(l, -1); + } } else { + last_pressed = 0; return 0; } - + last_pressed = index; return 1; } @@ -302,21 +340,30 @@ void layout_draw(Layout* l) void layout_draw_scale(Layout* l) { uint8_t index = FIRST_PAD; + uint8_t draw_using_highlights = flag_is_set(sequencer_get_active(&lp_sequencer)->flags, NOTE_HIGHLIGHT_ONLY); for (uint8_t y = 0; y < GRID_SIZE; y++) { for (uint8_t x = 0; x < GRID_SIZE; x++) { const uint8_t* color = off_color; + uint8_t dimness = 3; int8_t note_number = lp_pad_notes[y][x]; if (layout_is_root_note(l, note_number)) { color = root_note_color; } - else if (note_number % NUM_NOTES == 0) + else if (draw_using_highlights) { - color = c_note_color; + if (lp_pad_highlights[y][x]) + { + color = white_note_color; + } + else + { + color = black_note_color; + } } else if (diatonic_notes[note_number % NUM_NOTES]) { @@ -327,12 +374,26 @@ void layout_draw_scale(Layout* l) color = black_note_color; } - plot_pad(index, color); + if (note_number < 0) { + color = invalid_note_color; + } + else if (note_number % NUM_NOTES == 0) + { + dimness = 0; + } + + plot_pad_dim(index, color, dimness); index++; } index += ROW_GAP; } + + plot_pad(LP_OCTAVE_UP, note_octave_up_colors[l->octave]); + plot_pad(LP_OCTAVE_DOWN, note_octave_down_colors[l->octave]); + plot_pad(LP_TRANSPOSE_UP, note_transpose_up_colors[l->root_note]); + plot_pad(LP_TRANSPOSE_DOWN, note_transpose_down_colors[l->root_note]); + } void layout_draw_drums(Layout* l) diff --git a/src/scale.c b/src/scale.c index 9884e1a..8a93072 100644 --- a/src/scale.c +++ b/src/scale.c @@ -6,6 +6,7 @@ void scale_init(Scale* s) { s->num_notes = NUM_NOTES; s->notes = 0x0FFF; + s->notes_highlighted = 0x0AB5; for (uint8_t i = 0; i < NUM_NOTES; i++) { @@ -42,6 +43,11 @@ uint8_t scale_contains_note(Scale* s, uint8_t note) return flag_is_set(s->notes, 1 << note); } +uint8_t scale_contains_highlight(Scale* s, uint8_t note) +{ + return flag_is_set(s->notes_highlighted, 1 << note); +} + void scale_set_notes(Scale* s, uint16_t notes) { s->notes = notes; @@ -56,6 +62,11 @@ void scale_set_notes(Scale* s, uint16_t notes) scale_update_offsets(s); } +void scale_set_highlights(Scale* s, uint16_t notes_highlighted) +{ + s->notes_highlighted = notes_highlighted; +} + void scale_toggle_note(Scale* s, uint8_t note) { if (note < 1 || note >= NUM_NOTES) @@ -79,4 +90,14 @@ void scale_toggle_note(Scale* s, uint8_t note) scale_update_offsets(s); } +void scale_toggle_highlight(Scale* s, uint8_t note) +{ + if (note < 1 || note >= NUM_NOTES) + { + return; + } + s->notes_highlighted = toggle_flag(s->notes_highlighted, 1 << note); +} + + diff --git a/src/seq.c b/src/seq.c index d2e6a6f..deb4de1 100644 --- a/src/seq.c +++ b/src/seq.c @@ -6,8 +6,8 @@ ******************************************************************************/ // Global settings -uint8_t lp_midi_port = USBMIDI; -uint8_t lp_rcv_clock_port = USBMIDI; +uint8_t lp_midi_port = DINMIDI; +uint8_t lp_rcv_clock_port = DINMIDI; // Program state LpState lp_state = LP_NUM_MODES; @@ -26,6 +26,7 @@ Note* lp_note_storage = (Note*)(lp_buffer + sizeof(uint32_t)) + NOTE_BANK_SIZE; Scale lp_scale; Voices lp_voices; PadNotes lp_pad_notes; +PadNotes lp_pad_highlights; Sequencer lp_sequencer; // UI @@ -363,7 +364,7 @@ void notes_setup_draw() Sequence* s = sequencer_get_active(&lp_sequencer); Layout* l = &s->layout; - keyboard_draw(&lp_keyboard); + keyboard_draw(&lp_keyboard, flag_is_set(s->flags, NOTE_HIGHLIGHT_ONLY)); slider_draw(&lp_row_offset_slider, ROW_OFFSET_POS, ROW_OFFSET_COLOR); checkbox_draw(s->flags, SEQ_RECORD_CONTROL, CONTROL_CHECKBOX_POS); @@ -372,6 +373,7 @@ void notes_setup_draw() checkbox_draw(s->flags, SEQ_FULL_VELOCITY, VELOCITY_CHECKBOX_POS); checkbox_draw(s->flags, SEQ_MOD_WHEEL, MOD_WHEEL_CHECKBOX_POS); checkbox_draw(s->flags, SEQ_MOD_CC, MOD_CC_CHECKBOX_POS); + checkbox_draw(s->flags, NOTE_HIGHLIGHT_ONLY, NOTE_HIGHLIGHT_ONLY_POS); number_draw(s->control_code, CC_POS, CC_BITS, CC_COLOR); @@ -441,6 +443,12 @@ uint8_t notes_setup_handle_press(uint8_t index, uint8_t value) if (slider_handle_press(&lp_row_offset_slider, index, value, ROW_OFFSET_POS)) { layout_set_row_offset(l, lp_row_offset_slider.value + 1); + } + else if (checkbox_handle_press( + s->flags, NOTE_HIGHLIGHT_ONLY, + index, value, NOTE_HIGHLIGHT_ONLY_POS)) + { + } else if (checkbox_handle_press( s->flags, SEQ_RECORD_CONTROL, @@ -519,7 +527,10 @@ uint8_t notes_setup_handle_press(uint8_t index, uint8_t value) { keyboard_update_indices(&lp_keyboard); } - else if (keyboard_handle_press(&lp_keyboard, index, value)) { } + else if (keyboard_handle_press(&lp_keyboard, index, value, flag_is_set(s->flags, NOTE_HIGHLIGHT_ONLY))) + { + + } else { return 0; From 834decab44a0ee17da59f1164f26b644cbafbeaa Mon Sep 17 00:00:00 2001 From: codicusmaximus Date: Sun, 9 Jul 2017 18:25:28 -0400 Subject: [PATCH 3/4] Added scales feature, more note mode improvements. Needs cleanup I just realized there is a modifier thing built in so some of my checking for modifiers is unnecessary the way it's made. --- include/checkbox.h | 7 ++ include/colors.h | 1 + include/data.h | 8 +- include/interface.h | 5 +- include/keyboard.h | 3 +- include/layout.h | 3 +- include/scale.h | 10 +++ include/seq.h | 9 +- include/util.h | 26 ++++++ resources/subsequencely.syx | Bin 49891 -> 52883 bytes src/app.c | 57 +++++++++--- src/colors.c | 1 + src/keyboard.c | 12 ++- src/layout.c | 64 +++++++++++--- src/scale.c | 162 +++++++++++++++++++++++++++++++++- src/seq.c | 105 ++++++++++++++++++++-- src/sequence.c | 2 +- src/util.c | 168 ++++++++++++++++++++++++++++++++++++ 18 files changed, 597 insertions(+), 46 deletions(-) diff --git a/include/checkbox.h b/include/checkbox.h index 553fc1a..1ab65c8 100644 --- a/include/checkbox.h +++ b/include/checkbox.h @@ -20,6 +20,13 @@ typedef uint8_t Checkbox; ? CHECKBOX_ON_COLOR \ : CHECKBOX_OFF_COLOR))) +/// c: bitfield where the checkbox lives +/// b: bit the checkbox represents (1 << x) +/// p: the position to draw the checkbox +#define checkbox_draw_inv(c, b, p) (plot_pad((p), (flag_is_set((c), (b)) \ + ? CHECKBOX_OFF_COLOR \ + : CHECKBOX_ON_COLOR))) + /// c: bitfield where the checkbox bit lives /// b: bit the checkbox represents (1 << x) /// i: index of button that was pressed diff --git a/include/colors.h b/include/colors.h index 134e777..c2d9b7e 100644 --- a/include/colors.h +++ b/include/colors.h @@ -11,6 +11,7 @@ extern const uint8_t no_note_color[3]; extern const uint8_t layout_octave_color[3]; extern const uint8_t layout_transpose_color[3]; +extern const uint8_t scale_button_color[3]; extern const uint8_t white_key_color[3]; extern const uint8_t black_key_color[3]; diff --git a/include/data.h b/include/data.h index 635d9ce..c11b853 100644 --- a/include/data.h +++ b/include/data.h @@ -18,7 +18,7 @@ typedef enum LP_NOTES_MODE, LP_SEQUENCER_MODE, LP_USER_MODE, - LP_NUM_MODES + LP_NUM_MODES, } LpState; /// Global program flags. @@ -33,7 +33,8 @@ typedef enum LP_ARMED = 1 << 6, LP_RCV_CLOCK = 1 << 7, LP_RCV_CLOCK_PORT = 1 << 8, - LP_IS_ARP = 1 << 9 + LP_IS_ARP = 1 << 9, + LP_IS_SETUP2 = 1 << 10 } LpFlags; /// The number of notes needed for all 8 sequences. Two of these are used: one @@ -77,6 +78,9 @@ extern PadNotes lp_pad_notes; extern PadNotes lp_pad_highlights; extern Sequencer lp_sequencer; +extern TextDisplayer lp_text_displayer; +extern int8_t lp_quick_scale_current; + // Setup UI elements extern Slider lp_tempo_slider; extern Slider lp_swing_slider; diff --git a/include/interface.h b/include/interface.h index 40de8c8..6302c96 100644 --- a/include/interface.h +++ b/include/interface.h @@ -48,11 +48,14 @@ #define VELOCITY_CHECKBOX_POS (41) #define MOD_WHEEL_CHECKBOX_POS (43) #define MOD_CC_CHECKBOX_POS (53) -#define NOTE_HIGHLIGHT_ONLY_POS (28) #define DRUM_CHECKBOX_POS (45) #define MULTICHANNEL_CHECKBOX_POS (55) #define CONTROL_CHECKBOX_POS (81) +#define NOTE_HIGHLIGHT_ONLY_POS (28) +#define SCALE_HIGHLIGHT_ONLY_POS (48) +#define SCALE_HIGHLIGHT_ONLY_INV_POS (28) + #define MOD_WHEEL_POS (51) #define MOD_WHEEL_X (0) #define MOD_WHEEL_Y (4) diff --git a/include/keyboard.h b/include/keyboard.h index ae3c51c..a01e568 100644 --- a/include/keyboard.h +++ b/include/keyboard.h @@ -30,10 +30,11 @@ typedef struct void keyboard_init(Keyboard* k, Layout* l); /// Toggles a note on or off and updates the layout and scale to match. -uint8_t keyboard_handle_press(Keyboard* k, uint8_t index, uint8_t value, uint8_t is_highlight_press); +uint8_t keyboard_handle_press(Keyboard* k, uint8_t index, uint8_t value, uint8_t y, uint8_t is_highlight_press); /// Draws the keyboard to the grid. void keyboard_draw(Keyboard* k, uint8_t draw_highlighted); +void keyboard_draw_y(Keyboard* k, uint8_t draw_highlighted, uint8_t y); /// When a change is made to the layout or scale, this function updates the /// keyboard to reflect the current state. diff --git a/include/layout.h b/include/layout.h index cbf658b..99610ff 100644 --- a/include/layout.h +++ b/include/layout.h @@ -5,8 +5,6 @@ #include "app.h" #include "buttons.h" #include "colors.h" -#include "keyboard.h" -#include "scale.h" #include "voices.h" #include "util.h" @@ -76,6 +74,7 @@ void layout_toggle_highlight(Layout* l, uint8_t note_highlight); void layout_draw(Layout* l); void layout_draw_scale(Layout* l); void layout_draw_drums(Layout* l); +void layout_draw_transpose_octave_buttons(Layout* l); /// Increases or decreases the root note by a half step. void layout_transpose(Layout* l, int8_t direction); diff --git a/include/scale.h b/include/scale.h index bdd6852..d424eb5 100644 --- a/include/scale.h +++ b/include/scale.h @@ -4,6 +4,7 @@ #include "app.h" #include "util.h" +#include "layout.h" /// Represents a musical scale as a subset of 12 chromatic notes. typedef struct @@ -47,4 +48,13 @@ void scale_toggle_note(Scale* s, uint8_t note); /// Toggles the nth note's highlight void scale_toggle_highlight(Scale* s, uint8_t note); +extern const uint16_t quick_scale_bitfields[32]; +extern const char* quick_scale_names[32]; + +void quick_scale_draw(); +uint16_t quick_scale_convert_notes(uint16_t in); +uint8_t quick_scale_handle_press(Layout* l, uint8_t index, uint8_t value, uint8_t is_highlight_mode); +uint8_t quick_scale_handle_prev_next(Layout* l, uint8_t index, uint8_t value, uint8_t note_held, uint8_t is_highlight_mode); +void quick_scale_apply(Layout* l, uint8_t is_highlight_mode); + #endif diff --git a/include/seq.h b/include/seq.h index 026fe37..7e2c7ae 100644 --- a/include/seq.h +++ b/include/seq.h @@ -69,9 +69,14 @@ void notes_setup_become_active(); void notes_setup_become_inactive(); void notes_mode_draw(); void notes_setup_draw(); -uint8_t notes_mode_handle_press(uint8_t index, uint8_t value); +uint8_t notes_mode_handle_press(uint8_t index, uint8_t value, uint8_t shift_held, uint8_t note_held); uint8_t notes_setup_handle_press(uint8_t index, uint8_t value); +void scales_setup_become_active(); +void scales_setup_become_inactive(); +void scales_setup_draw(); +uint8_t scales_setup_handle_press(uint8_t index, uint8_t value); + void user_mode_become_active(); void user_mode_become_inactive(); void user_setup_become_active(); @@ -86,6 +91,6 @@ uint8_t user_setup_handle_press(uint8_t index, uint8_t value); ******************************************************************************/ /// Switch the mode or switch between normal and setup modes. -void set_state(LpState st, uint8_t setup); +void set_state(LpState st, uint8_t setup, uint8_t shift_held); #endif diff --git a/include/util.h b/include/util.h index 31c1426..2d73bb1 100644 --- a/include/util.h +++ b/include/util.h @@ -3,6 +3,7 @@ #define UTIL_H #include "app.h" +#include "colors.h" /******************************************************************************* * Defines/helpers @@ -101,6 +102,31 @@ void modifier_index_assign(uint8_t index, uint8_t value); void clear_leds(); void clear_pad_leds(); +const uint16_t font_4x4[64]; + +typedef struct +{ + uint8_t active; + const char *text; + char text_visible[3]; + uint8_t y; // 0-4 (0 is bottom, 4 is top) + const uint8_t *color; + + uint8_t text_index; + uint8_t millis_per_frame; // Setting for how many milliseconds each 'frame' of the animation should last + uint8_t frame_millis_remain; // Counter for millisecons + uint8_t frame_offset; // Number from 0 to 3 indicating how many pixels left the current text has moved so far + + void (*callback_finished)(void); +} TextDisplayer; + +void text_display_init(TextDisplayer* td); +void text_display_tick(TextDisplayer* td); +void text_display(TextDisplayer* td, const char *text, uint8_t y, const uint8_t *color, void (*callback_finished)(void)); +void text_display_stop(TextDisplayer* td); +void text_draw(TextDisplayer *td); +void text_draw_letter(char c, int8_t x, int8_t y, const uint8_t *color); + #ifdef VIRTUAL_LPP #include #define LP_LOG(x, ...) printf(x "\n", __VA_ARGS__) diff --git a/resources/subsequencely.syx b/resources/subsequencely.syx index 1c52164a9f17d8c038d4ba224ab08f1e2bb33e81..117fa86bbf7555627029b1a4e8050e2afc263118 100644 GIT binary patch literal 52883 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 Ezo@hKBLDyZ literal 49891 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 diff --git a/src/app.c b/src/app.c index 442f762..41fb862 100644 --- a/src/app.c +++ b/src/app.c @@ -36,11 +36,13 @@ #include "app.h" #include "seq.h" +#include "colors.h" /******************************************************************************* * Event handlers ******************************************************************************/ - +int8_t shift_held = 0; +int8_t note_held = 0; void app_surface_event(uint8_t type, uint8_t index, uint8_t value) { #ifndef SEQ_DEBUG @@ -51,37 +53,59 @@ void app_surface_event(uint8_t type, uint8_t index, uint8_t value) sequencer_play_draw(&lp_sequencer); arp_draw(); + if (index == LP_SHIFT) { + if (value > 0) { + shift_held = 1; + } else { + shift_held = 0; + } + } + + if (index == LP_NOTE) { + if (value > 0) { + note_held = 1; + } else { + note_held = 0; + } + } + if (index == LP_SESSION) { if (value > 0) { - set_state(LP_SESSION_MODE, 0); + set_state(LP_SESSION_MODE, 0, 0); } } else if (index == LP_NOTE) { if (value > 0) { - set_state(LP_NOTES_MODE, 0); + set_state(LP_NOTES_MODE, 0, 0); + plot_pad(LP_TRANSPOSE_UP, scale_button_color); + plot_pad(LP_TRANSPOSE_DOWN, scale_button_color); + } + else + { + layout_draw_transpose_octave_buttons(sequencer_get_layout(&lp_sequencer)); } } else if (index == LP_DEVICE) { if (value > 0) { - set_state(LP_SEQUENCER_MODE, 0); + set_state(LP_SEQUENCER_MODE, 0, 0); } } else if (index == LP_USER) { if (value > 0) { - set_state(LP_USER_MODE, 0); + set_state(LP_USER_MODE, 0, 0); } } else if (type == TYPESETUP && value > 0) { - set_state(lp_state, !flag_is_set(lp_flags, LP_IS_SETUP)); + set_state(lp_state, (shift_held && flag_is_set(lp_flags, LP_IS_SETUP)) || !flag_is_set(lp_flags, LP_IS_SETUP), shift_held); } else if (sequencer_handle_play(&lp_sequencer, index, value)) { } // Don't let tap tempo be used when tempo is controlled by clock. @@ -97,7 +121,7 @@ void app_surface_event(uint8_t type, uint8_t index, uint8_t value) } else if (lp_state == LP_NOTES_MODE) { - notes_mode_handle_press(index, value); + notes_mode_handle_press(index, value, shift_held, note_held); notes_mode_draw(); } else if (lp_state == LP_SEQUENCER_MODE) @@ -120,8 +144,15 @@ void app_surface_event(uint8_t type, uint8_t index, uint8_t value) } else if (lp_state == LP_NOTES_MODE) { - notes_setup_handle_press(index, value); - notes_setup_draw(); + if (flag_is_set(lp_flags, LP_IS_SETUP2)) { + if (scales_setup_handle_press(index, value)) + { + scales_setup_draw(); + } + } else { + notes_setup_handle_press(index, value); + notes_setup_draw(); + } } else if (lp_state == LP_SEQUENCER_MODE) { @@ -244,6 +275,9 @@ void app_timer_event() { #ifndef SEQ_DEBUG sequencer_tick(&lp_sequencer, 0); + if (lp_text_displayer.active) { + text_display_tick(&lp_text_displayer); + } lp_tap_tempo_timer++; if (flag_is_set(lp_flags, LP_SQR_DIRTY)) @@ -282,6 +316,8 @@ void app_timer_event() void app_init() { #ifndef SEQ_DEBUG + text_display_init(&lp_text_displayer); + slider_init( &lp_tempo_slider, TEMPO_RESOLUTION, 60 / TEMPO_MUL + 1, @@ -313,10 +349,11 @@ void app_init() lp_mod_wheel = 0; lp_flags = 0; + lp_quick_scale_current = 1; deserialize_app(); - set_state(LP_NOTES_MODE, 0); + set_state(LP_NOTES_MODE, 0, 0); #else for (uint8_t i = 0; i < 100; i++) { diff --git a/src/colors.c b/src/colors.c index 08adae6..f86ef40 100644 --- a/src/colors.c +++ b/src/colors.c @@ -11,6 +11,7 @@ const uint8_t no_note_color[3] = {0x0F, 0x00, 0x00}; const uint8_t layout_octave_color[3] = {0x00, 0x00, 0xFF}; const uint8_t layout_transpose_color[3] = {0x00, 0xFF, 0x00}; +const uint8_t scale_button_color[3] = {0x3F, 0x1F, 0x00}; const uint8_t white_key_color[3] = {0x0F, 0x2F, 0x7F}; const uint8_t black_key_color[3] = {0x3F, 0x00, 0x17}; diff --git a/src/keyboard.c b/src/keyboard.c index 4e45cae..99bc0a4 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -58,8 +58,9 @@ uint8_t keyboard_index_is_key(Keyboard* k, uint8_t index) return k->index_to_note[index - FIRST_KEYBOARD_PAD] != -1; } -uint8_t keyboard_handle_press(Keyboard* k, uint8_t index, uint8_t value, uint8_t is_highlight_press) +uint8_t keyboard_handle_press(Keyboard* k, uint8_t index, uint8_t value, uint8_t y, uint8_t is_highlight_press) { + index -= y * 10; if (value == 0 || !keyboard_index_is_key(k, index)) { return 0; @@ -80,6 +81,11 @@ uint8_t keyboard_handle_press(Keyboard* k, uint8_t index, uint8_t value, uint8_t } void keyboard_draw(Keyboard* k, uint8_t draw_highlighted) +{ + keyboard_draw_y(k, draw_highlighted, 0); +} + +void keyboard_draw_y(Keyboard* k, uint8_t draw_highlighted, uint8_t y) { const uint8_t* color = white_key_color; @@ -105,11 +111,11 @@ void keyboard_draw(Keyboard* k, uint8_t draw_highlighted) } int8_t deg = (note + NUM_NOTES - k->layout->root_note) % NUM_NOTES; - if (draw_highlighted && !scale_contains_note(&lp_scale, deg)) { + if (color != off_color && draw_highlighted && !scale_contains_note(&lp_scale, deg)) { color = invalid_note_color; } uint8_t is_in_scale = draw_highlighted ? scale_contains_highlight(&lp_scale, deg) : scale_contains_note(&lp_scale, deg); uint8_t dimness = !is_in_scale * 4; - plot_pad_dim(i + FIRST_KEYBOARD_PAD, color, dimness); + plot_pad_dim(i + FIRST_KEYBOARD_PAD + (10*y), color, dimness); } } diff --git a/src/layout.c b/src/layout.c index 3aec9ce..83561ff 100644 --- a/src/layout.c +++ b/src/layout.c @@ -2,6 +2,8 @@ #include "data.h" #include "layout.h" +#include "scale.h" + #define DRUM_RANGE (4 * NUM_NOTES + (16 - NUM_NOTES)) #define DRUM_SIZE (GRID_SIZE / 2) @@ -211,6 +213,7 @@ void layout_light_scale(Layout* l, uint8_t note_number, uint8_t on) uint8_t index = FIRST_PAD; const uint8_t* color = off_color; uint8_t dimness = 3; + uint8_t draw_using_highlights = flag_is_set(sequencer_get_active(&lp_sequencer)->flags, NOTE_HIGHLIGHT_ONLY); if (on) { @@ -258,6 +261,18 @@ void layout_light_scale(Layout* l, uint8_t note_number, uint8_t on) continue; } + if (draw_using_highlights && !layout_is_root_note(l, note_number)) + { + if (lp_pad_highlights[y][x]) + { + color = white_note_color; + } + else + { + color = black_note_color; + } + } + plot_pad_dim(coord_to_index(x, y), color, dimness); index++; @@ -281,34 +296,50 @@ uint8_t layout_handle_transpose(Layout* l, uint8_t index, uint8_t value) if (index == LP_TRANSPOSE_UP) { - if (last_pressed == LP_TRANSPOSE_DOWN) { - layout_transpose(l, 0); // Reset to default + if (!modifier_held(LP_SHIFT)) { + if (last_pressed == LP_TRANSPOSE_DOWN) { + layout_transpose(l, 0); // Reset to default + } else { + layout_transpose(l, 1); + } } else { - layout_transpose(l, 1); + } } else if (index == LP_TRANSPOSE_DOWN) { - if (last_pressed == LP_TRANSPOSE_UP) { - layout_transpose(l, 0); // Reset to default + if (!modifier_held(LP_SHIFT)) { + if (last_pressed == LP_TRANSPOSE_UP) { + layout_transpose(l, 0); // Reset to default + } else { + layout_transpose(l, -1); + } } else { - layout_transpose(l, -1); + } } else if (index == LP_OCTAVE_UP) { - if (last_pressed == LP_OCTAVE_DOWN) { - layout_transpose_octave(l, 0); // Reset to default + if (!modifier_held(LP_SHIFT)) { + if (last_pressed == LP_OCTAVE_DOWN) { + layout_transpose_octave(l, 0); // Reset to default + } else { + layout_transpose_octave(l, 1); + } } else { - layout_transpose_octave(l, 1); + } } else if (index == LP_OCTAVE_DOWN) { - if (last_pressed == LP_OCTAVE_UP) { - layout_transpose_octave(l, 0); // Reset to default + if (!modifier_held(LP_SHIFT)) { + if (last_pressed == LP_OCTAVE_UP) { + layout_transpose_octave(l, 0); // Reset to default + } else { + layout_transpose_octave(l, -1); + } } else { - layout_transpose_octave(l, -1); + } } else @@ -389,11 +420,16 @@ void layout_draw_scale(Layout* l) index += ROW_GAP; } + layout_draw_transpose_octave_buttons(l); + +} + +void layout_draw_transpose_octave_buttons(Layout* l) +{ plot_pad(LP_OCTAVE_UP, note_octave_up_colors[l->octave]); plot_pad(LP_OCTAVE_DOWN, note_octave_down_colors[l->octave]); plot_pad(LP_TRANSPOSE_UP, note_transpose_up_colors[l->root_note]); - plot_pad(LP_TRANSPOSE_DOWN, note_transpose_down_colors[l->root_note]); - + plot_pad(LP_TRANSPOSE_DOWN, note_transpose_down_colors[l->root_note]); } void layout_draw_drums(Layout* l) diff --git a/src/scale.c b/src/scale.c index 8a93072..ef82f5e 100644 --- a/src/scale.c +++ b/src/scale.c @@ -1,6 +1,7 @@ #include "scale.h" - +#include "data.h" +#include "seq.h" void scale_init(Scale* s) { @@ -99,5 +100,164 @@ void scale_toggle_highlight(Scale* s, uint8_t note) s->notes_highlighted = toggle_flag(s->notes_highlighted, 1 << note); } +const uint16_t white_and_black_key_hightlight = 0b1010110101010000; +const uint16_t all_notes_available = 0b1111111111110000; + +/// Semitone bitmaps for each of the 32 scales built in +const uint16_t quick_scale_bitfields[32] = { + 0b1011010110100000, //Minor + 0b1010110101010000, //Major + 0b1011010101100000, //Dorian + 0b1101010110100000, //Phrygian + 0b1010110101100000, //Mixolydian + 0b1011010101010000, //Melodic Minor (ascending) + 0b1011010110010000, //Harmonic Minor + 0b1011110101100000, //BeBop Dorian + + 0b1001011100100000, //Blues + 0b1001010100100000, //Minor Pentatonic + 0b1011001110010000, //Hungarian Minor + 0b1011001101100000, //Ukranian Dorian + 0b1100101101010000, //Marva + 0b1101011100010000, //Todi + 0b1010101010100000, //Whole Tone + 0b1111111111110000, //Chromatic + + 0b1010101101010000, //Lydian + 0b1101011010100000, //Locrain + 0b1010100101000000, //Major Pentatonic + 0b1100110110100000, //Phyrigian Dominant + 0b1101101101100000, //Half-Whole Diminished + 0b1010110101110000, //Mixolydian Bebop + 0b1101101010100000, //Super Locrian + 0b1011000110000000, //Hirajoshi + + 0b1100010100100000, //In Sen + 0b1010010101000000, //Yo scale + 0b1100011000100000, //Iwato + 0b1011011011010000, //Whole Half + 0b1011010110110000, //Bebop Minor + 0b1011100101000000, //Major blues + 0b1011000101000000, //Kumoi + 0b1010110111010000 //BeBop Major +}; + +const char* quick_scale_names[32] = { + "MINOR", + "MAJOR", + "DORIAN", + "PHRYGIAN", + "MIXOLYDIAN", + "MELODIC MINOR", + "HARMONIC MINOR", + "BEBOP DORIAN", + "BLUES", + "MINOR PENTATONIC", + "HUNGARIAN MINOR", + "UKRANIAN DORIAN", + "MARVA", + "TODI", + "WHOLE TONE", + "CHROMATIC", + "LYDIAN", + "LOCRAIN", + "MAJOR PENTATONIC", + "PHYRIGIAN DOMINANT", + "HALF-WHOLE DIMINISHED", + "MIXOLYDIAN BEBOP", + "SUPER LOCRAIN", + "HIRAJOSHI", + + "IN SEN", + "YO SCALE", + "IWATO", + "WHOLE HALF", + "BEBOP MINOR", + "MAJOR BLUES", + "KUMOI", + "BEBOP MAJOR" +}; + +void quick_scale_draw() { + uint8_t scale_number = 0; + for (uint8_t y = 7; y >= 4; y--) { + for (uint8_t x = 0; x < 8; x++) { + plot_pad_dim(coord_to_index(x, y), scale_button_color, scale_number == lp_quick_scale_current ? 0 : 2); + scale_number += 1; + } + } +} + +uint16_t quick_scale_convert_notes(uint16_t in) { + uint16_t out = in; + int s = sizeof(in) * 8 - 1; // extra shift needed at end + for (in >>= 1; in; in >>= 1) { + out <<= 1; + out |= in & 1; + s--; + } + out <<= s; // shift when v's highest bits are zero + return out; +} + +void quick_scale_apply(Layout* l, uint8_t is_highlight_mode) { + if (lp_quick_scale_current < 0) + { + lp_quick_scale_current = 0; + } + if (lp_quick_scale_current > 31) + { + lp_quick_scale_current = 31; + } + + if (is_highlight_mode) + { + scale_set_notes(&lp_scale, quick_scale_convert_notes(all_notes_available)); + scale_set_highlights(&lp_scale, quick_scale_convert_notes(quick_scale_bitfields[lp_quick_scale_current])); + } + else + { + scale_set_notes(&lp_scale, quick_scale_convert_notes(quick_scale_bitfields[lp_quick_scale_current])); + scale_set_highlights(&lp_scale, quick_scale_convert_notes(white_and_black_key_hightlight)); + } + + layout_assign_pads(l); +} + +uint8_t quick_scale_handle_press(Layout* l, uint8_t index, uint8_t value, uint8_t is_highlight_mode) +{ + if (value == 0 || index % 10 < 1 || index % 10 > 9 || index <= 50 || index >= 90) + { + return 0; + } + lp_quick_scale_current = (8 - index/10)*8 + (index % 10 - 1); + quick_scale_apply(l, is_highlight_mode); + if (value <= 60) { + text_display(&lp_text_displayer, quick_scale_names[lp_quick_scale_current], 4, on_color, &scales_setup_draw); + } + return 1; +} + +uint8_t quick_scale_handle_prev_next(Layout* l, uint8_t index, uint8_t value, uint8_t note_held, uint8_t is_highlight_mode) +{ + if (value == 0 || !note_held) + { + return 0; + } + else if (index == LP_TRANSPOSE_DOWN) + { + lp_quick_scale_current -= 1; + } + else if (index == LP_TRANSPOSE_UP) + { + lp_quick_scale_current += 1; + } + else + { + return 0; + } + quick_scale_apply(l, is_highlight_mode); + return 1; +} \ No newline at end of file diff --git a/src/seq.c b/src/seq.c index deb4de1..d25781b 100644 --- a/src/seq.c +++ b/src/seq.c @@ -29,6 +29,9 @@ PadNotes lp_pad_notes; PadNotes lp_pad_highlights; Sequencer lp_sequencer; +TextDisplayer lp_text_displayer; +int8_t lp_quick_scale_current; + // UI Slider lp_tempo_slider; Slider lp_swing_slider; @@ -351,7 +354,7 @@ void notes_setup_become_active() void notes_setup_become_inactive() { - + } void notes_mode_draw() @@ -388,12 +391,21 @@ void notes_setup_draw() CC_OFFSET_COLOR); } -uint8_t notes_mode_handle_press(uint8_t index, uint8_t value) +uint8_t notes_mode_handle_press(uint8_t index, uint8_t value, uint8_t shift_held, uint8_t note_held) { Sequence* s = sequencer_get_active(&lp_sequencer); Layout* l = &s->layout; - if (layout_handle_transpose(l, index, value)) + if (note_held) + { + if (quick_scale_handle_prev_next(l, index, value, note_held, flag_is_set(s->flags, NOTE_HIGHLIGHT_ONLY))) + { + sequence_kill_voices(s, 0); + layout_draw(l); + keyboard_update_indices(&lp_keyboard); + } + } + else if (layout_handle_transpose(l, index, value)) { sequence_kill_voices(s, 0); layout_draw(l); @@ -527,10 +539,73 @@ uint8_t notes_setup_handle_press(uint8_t index, uint8_t value) { keyboard_update_indices(&lp_keyboard); } - else if (keyboard_handle_press(&lp_keyboard, index, value, flag_is_set(s->flags, NOTE_HIGHLIGHT_ONLY))) + else if (keyboard_handle_press(&lp_keyboard, index, value, 0, flag_is_set(s->flags, NOTE_HIGHLIGHT_ONLY))) + { + + } + else + { + return 0; + } + + return 1; +} + + +void scales_setup_become_active() { + +} + +void scales_setup_become_inactive() { + text_display_stop(&lp_text_displayer); +} + +void scales_setup_draw() { + Sequence* s = sequencer_get_active(&lp_sequencer); + //Layout* l = &s->layout; + + quick_scale_draw(); + keyboard_draw_y(&lp_keyboard, 0, 0); + keyboard_draw_y(&lp_keyboard, 1, 2); + checkbox_draw(s->flags, NOTE_HIGHLIGHT_ONLY, SCALE_HIGHLIGHT_ONLY_POS); + checkbox_draw_inv(s->flags, NOTE_HIGHLIGHT_ONLY, SCALE_HIGHLIGHT_ONLY_INV_POS); +} + +uint8_t scales_setup_handle_press(uint8_t index, uint8_t value) { + Sequence* s = sequencer_get_active(&lp_sequencer); + Layout* l = &s->layout; + + if (checkbox_handle_press( + s->flags, NOTE_HIGHLIGHT_ONLY, + index, value, SCALE_HIGHLIGHT_ONLY_POS)) + { + + } + else if (checkbox_handle_press( + s->flags, NOTE_HIGHLIGHT_ONLY, + index, value, SCALE_HIGHLIGHT_ONLY_INV_POS)) + { + + } + else if (quick_scale_handle_press(lp_keyboard.layout, index, value, flag_is_set(s->flags, NOTE_HIGHLIGHT_ONLY))) + { + if (value > 60) { + set_state(LP_NOTES_MODE, 0, 0); + return 0; + } + } + else if (layout_handle_transpose(l, index, value)) + { + keyboard_update_indices(&lp_keyboard); + } + else if (keyboard_handle_press(&lp_keyboard, index, value, 0, 0)) { } + else if (keyboard_handle_press(&lp_keyboard, index, value, 2, 1)) + { + + } else { return 0; @@ -539,6 +614,7 @@ uint8_t notes_setup_handle_press(uint8_t index, uint8_t value) return 1; } + void user_mode_become_active() { @@ -596,7 +672,7 @@ uint8_t user_setup_handle_press(uint8_t index, uint8_t value) * State management ******************************************************************************/ -void set_state(LpState st, uint8_t setup) +void set_state(LpState st, uint8_t setup, uint8_t shift_held) { if (lp_state == st && flag_is_set(lp_flags, LP_IS_SETUP) == setup) { @@ -618,7 +694,11 @@ void set_state(LpState st, uint8_t setup) { if (flag_is_set(lp_flags, LP_IS_SETUP)) { - notes_setup_become_inactive(); + if (flag_is_set(lp_flags, LP_IS_SETUP2)) { + scales_setup_become_inactive(); + } else { + notes_setup_become_inactive(); + } } else { @@ -673,9 +753,15 @@ void set_state(LpState st, uint8_t setup) if (setup) { - notes_setup_become_active(); - plot_setup(on_color); - notes_setup_draw(); + if (shift_held) { + scales_setup_become_active(); + plot_setup(on_color); + scales_setup_draw(); + } else { + notes_setup_become_active(); + plot_setup(on_color); + notes_setup_draw(); + } } else { @@ -723,6 +809,7 @@ void set_state(LpState st, uint8_t setup) lp_state = st; lp_flags = assign_flag(lp_flags, LP_IS_SETUP, setup); + lp_flags = assign_flag(lp_flags, LP_IS_SETUP2, setup && shift_held); } diff --git a/src/sequence.c b/src/sequence.c index 26e92bd..33d7183 100644 --- a/src/sequence.c +++ b/src/sequence.c @@ -23,7 +23,7 @@ void sequence_init(Sequence* s, uint8_t channel, Note* notes) s->x = 0; s->y = 3 * NUM_NOTES; s->zoom = 0; - s->flags = 0x00; + s->flags = 0x8000; // Make note highlight mode default s->notes = notes; sequence_clear_notes(s); diff --git a/src/util.c b/src/util.c index d011f5a..81c626c 100644 --- a/src/util.c +++ b/src/util.c @@ -91,3 +91,171 @@ void modifier_index_assign(uint8_t index, uint8_t value) lp_modifiers = assign_flag(lp_modifiers, flag, value); } + +const uint16_t font_4x4[64] = { + 0b0000000000000000, // space + 0b0100010000000100, // ! + 0b1010101000000000, // " + 0b1010000010100000, // # + 0b0100111011100100, // $ + 0b1001001001001001, // % + 0b0010011110100110, // & + 0b0100010000000000, // ' + 0b0010010001000010, // ( + 0b0100001000100100, // ) + 0b1010010010100000, // * + 0b0100111001000000, // + + 0b0000000000100100, // , + 0b0000111000000000, // - + 0b0000000000000100, // . + 0b0010010001001000, // / (forward slash) + 0b0100101010100100, // 0 + 0b1100010001000100, // 1 + 0b0100101001001110, // 2 + 0b1110011000101110, // 3 + 0b1010111000100010, // 4 + 0b1110100001101110, // 5 + 0b1000110010101110, // 6 + 0b1110001001000100, // 7 + 0b1110111011101110, // 8 + 0b1110101001100010, // 9 + 0b0100000001000000, // : + 0b0100000001001000, // ; + 0b0010110000100000, // < + 0b1110000011100000, // = + 0b1000011010000000, // > + 0b0100101001100100, // ? + + 0b0111101110000110, // @ + 0b1110101011101010, // A + 0b1000111010101110, // B + 0b0110100010000110, // C + 0b1100101010101100, // D + 0b1110100011001110, // E + 0b1110100011001000, // F + 0b0110100010100110, // G + 0b1010101011101010, // H + 0b0100010001000100, // I + 0b0010001000100110, // J + 0b1010110010101010, // K + 0b0100010001000110, // L + 0b1110111010101010, // M + 0b1010111011101010, // N + 0b1110101010101110, // O + 0b1110101011101000, // P + 0b1110101010101111, // Q + 0b1100101011001010, // R + 0b1110100000101110, // S + 0b1110010001000100, // T + 0b1010101010101110, // U + 0b1010101010100100, // V + 0b1010101011101110, // W + 0b1010010001001010, // X + 0b1010101001000100, // Y + 0b1110001010001110, // Z + 0b0110010001000110, // [ + 0b1000010001000010, // \ (backslash) + 0b0110001000100110, // ] + 0b0100101000000000, // ^ + 0b0000000000001110 // _ +}; + +void text_display_init(TextDisplayer* td) { + td->active = 0; + td->text = 0; + td->y = 0; + td->color = on_color; + td->callback_finished = 0; + td->text_visible[0] = ' '; + td->text_visible[1] = ' '; + td->text_visible[2] = ' '; +} + +void text_display_tick(TextDisplayer* td) { + if (!td->active) { + return; + } + if (td->frame_millis_remain > 0) { + td->frame_millis_remain -= 1; + return; + } + // Next frame + td->frame_millis_remain = td->millis_per_frame; + td->frame_offset += 1; + if (td->frame_offset == 4) { + td->frame_offset = 0; + td->text_visible[0] = td->text_visible[1]; + td->text_visible[1] = td->text_visible[2]; + td->text_visible[2] = td->text[td->text_index]; + if (td->text_visible[2] != 0) { + td->text_index += 1; + } + } + + text_draw(td); + + if(td->text_visible[0] == 0) { + td->active = 0; + if(td->callback_finished != 0) { + (*td->callback_finished)(); // Call text display finish callback, if one is set + } + return; + } + +} + +void text_draw(TextDisplayer *td) { + text_draw_letter(td->text_visible[0], -(td->frame_offset), td->y, td->color); + text_draw_letter(td->text_visible[1], 4-(td->frame_offset), td->y, td->color); + text_draw_letter(td->text_visible[2], 8-(td->frame_offset), td->y, td->color); +} + +void text_draw_letter(char c, int8_t x, int8_t y, const uint8_t *color) { + if (x <= -4 || x >= 8 || y > 4) { + return; // Letter not visible + } + if (c < 32) { + c = 32; + } else if (c >= 96) { + c &= 0x5F; // Convert lower case to upper case + } + uint16_t letter = font_4x4[c-32]; + for (int8_t fy = 3; fy >= 0; fy--) { + for (int8_t fx = 0; fx < 4; fx++) { + uint16_t pixel_on = letter & 0x8000; + letter = letter << 1; + if (x + fx < 0 || x + fx >= 8) { + continue; + } + uint8_t coord = coord_to_index(x + fx, y + fy); + if (pixel_on) { + plot_pad(coord, color); + } else { + plot_pad(coord, off_color); + } + } + } +} + +void text_display(TextDisplayer *td, const char *text, uint8_t y, const uint8_t *color, void (*callback_finished)(void)) { + td->active = 0; + + td->text = text; + td->y = y; + td->color = color; + td->text_visible[0] = ' '; + td->text_visible[1] = ' '; + td->text_visible[2] = ' '; + + td->text_index = 0; + td->millis_per_frame = 90; + td->frame_millis_remain = 0; + td->frame_offset = 3; + + td->callback_finished = callback_finished; + td->active = 1; +} + +void text_display_stop(TextDisplayer* td) { + td->active = 0; +} From 053f15262d722d36157f5757696a75f30408bffb Mon Sep 17 00:00:00 2001 From: codicusmaximus Date: Mon, 10 Jul 2017 00:31:50 -0400 Subject: [PATCH 4/4] fixed some bugs and added note mode visual movement udlr, still needs cleanup though --- include/layout.h | 3 ++ resources/subsequencely.syx | Bin 52883 -> 53147 bytes src/layout.c | 59 ++++++++++++++++++++++++------------ 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/include/layout.h b/include/layout.h index 99610ff..f41357a 100644 --- a/include/layout.h +++ b/include/layout.h @@ -44,6 +44,9 @@ typedef struct /// rows. To tune in 4ths for a chromatic scale, this would be set to 5. int8_t row_offset; + /// How many spaces up/down to translate the view + int8_t offset_horizontal; + int8_t offset_vertical; } Layout; /// Initialize the layout data. diff --git a/resources/subsequencely.syx b/resources/subsequencely.syx index 117fa86bbf7555627029b1a4e8050e2afc263118..6827572d04f65a6410de0647c72c6f468272fa76 100644 GIT binary patch literal 53147 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 F{~ugX0`mX> literal 52883 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 Ezo@hKBLDyZ diff --git a/src/layout.c b/src/layout.c index 83561ff..ffa3053 100644 --- a/src/layout.c +++ b/src/layout.c @@ -13,6 +13,8 @@ void layout_init(Layout* l) l->root_note = 0; l->octave = LAYOUT_DEFAULT_OCTAVE; l->row_offset = 5; + l->offset_horizontal = 0; + l->offset_vertical = 0; } /******************************************************************************* @@ -88,29 +90,26 @@ void layout_assign_drums(Layout* l) void layout_assign_scale(Layout* l) { - uint8_t start_scale_deg = 0; - uint8_t octave = l->octave; + int8_t row_start_scale_deg = l->offset_horizontal + (l->row_offset * l->offset_vertical); + int8_t octave; - for (uint8_t y = 0; y < GRID_SIZE; y++) + for (int8_t y = 0; y < GRID_SIZE; y++) { - for (uint8_t x = 0; x < GRID_SIZE; x++) + for (int8_t x = 0; x < GRID_SIZE; x++) { - uint8_t scale_deg = start_scale_deg + x; + int8_t scale_deg = row_start_scale_deg + x; octave = l->octave + scale_deg / lp_scale.num_notes; - - if (scale_deg >= lp_scale.num_notes) - { - scale_deg = scale_deg % lp_scale.num_notes; + if (scale_deg < 0) { + octave -= 1; } - - uint8_t note_number = l->root_note + octave * NUM_NOTES; - note_number += lp_scale.offsets[scale_deg]; - - lp_pad_notes[y][x] = note_number; + scale_deg %= lp_scale.num_notes; + while (scale_deg < 0) { + scale_deg += lp_scale.num_notes; + } + lp_pad_notes[y][x] = l->root_note + (octave * NUM_NOTES) + lp_scale.offsets[scale_deg]; lp_pad_highlights[y][x] = scale_contains_highlight(&lp_scale, lp_scale.offsets[scale_deg]); } - - start_scale_deg += l->row_offset; + row_start_scale_deg += l->row_offset; } } @@ -126,6 +125,24 @@ void layout_toggle_highlight(Layout* l, uint8_t note_highlight) layout_assign_pads(l); } +void layout_shift_view(Layout *l, int8_t delta_x, int8_t delta_y, int8_t reset) +{ + if (reset) { + if (delta_x != 0) + { + l->offset_horizontal = 0; + } + if (delta_y != 0) + { + l->offset_vertical = 0; + } + } else { + l->offset_horizontal = clamp(l->offset_horizontal + delta_x, -4, 4); + l->offset_vertical = clamp(l->offset_vertical + delta_y, -4, 4); + } + layout_assign_pads(l); +} + void layout_transpose(Layout* l, int8_t direction) { if (direction == 0) { @@ -297,13 +314,15 @@ uint8_t layout_handle_transpose(Layout* l, uint8_t index, uint8_t value) if (index == LP_TRANSPOSE_UP) { if (!modifier_held(LP_SHIFT)) { + // Transposing note values in the next/previous musical key onto the same view if (last_pressed == LP_TRANSPOSE_DOWN) { layout_transpose(l, 0); // Reset to default } else { layout_transpose(l, 1); } } else { - + // Shifting the "view" horizontally + layout_shift_view(l, 1, 0, last_pressed == LP_TRANSPOSE_DOWN); } } else if (index == LP_TRANSPOSE_DOWN) @@ -315,7 +334,7 @@ uint8_t layout_handle_transpose(Layout* l, uint8_t index, uint8_t value) layout_transpose(l, -1); } } else { - + layout_shift_view(l, -1, 0, last_pressed == LP_TRANSPOSE_UP); } } else if (index == LP_OCTAVE_UP) @@ -327,7 +346,7 @@ uint8_t layout_handle_transpose(Layout* l, uint8_t index, uint8_t value) layout_transpose_octave(l, 1); } } else { - + layout_shift_view(l, 0, 1, last_pressed == LP_OCTAVE_DOWN); } } else if (index == LP_OCTAVE_DOWN) @@ -339,7 +358,7 @@ uint8_t layout_handle_transpose(Layout* l, uint8_t index, uint8_t value) layout_transpose_octave(l, -1); } } else { - + layout_shift_view(l, 0, -1, last_pressed == LP_OCTAVE_UP); } } else