Okay wow I didn’t realize my design choices would be so controversial! I just wanted a module that plays nice chords that mostly go together. I invite you to suggest a better chord layout if you have a preference.
Think of the module as providing a limited artists palette. With a limited palette you can push your creativity, you are meant to explore the chords with the buttons and invent new compositions in this space.
I happen to like the m9 chord and the m6 and the sus2, these are very colorful open chords that make the guitar shine and can be played over a wide variety of other chords.
In my testing I found it was too easy to play a diminished chord at the wrong time just by clicking something, and random sequencing led to mostly dissonant sounds. With all the diminished chords in a row they really didn’t sound so nice. So I replaced the row with m6, which contrasts better with the adjacent chords. I felt it was hard to decide how to arrange the banks best, and the end result is highly subjective and personal, I just picked the chords I play the most and tried to make it so the selection would be interesting and not always repeating the same voicings just transposed up the neck.
So back to my tastes not aligning with yours, it’s pretty simple to implement some different chord-bank/button layout options in the context menu, but the suggestions need to be very specific since I did poor in music theory class: There are 4 rows of 7 buttons, and the two gate inputs I and II select between 4 banks.The 7 buttons can even be mapped to different notes, I can have it change the panel labels.
Here is the basic data structure. The left column is the default chord bank, and going to the right we get the alternative chord banks for each button. I tried to design all sets of 4 that would work out as simple chord progressions both going through banks and switching rows:
const std::array<std::array<std::string, 4>, 7> Row1_Names = {{
{"B7", "B" , "Bsus4", "Badd9"},
{"E7", "E" , "Esus4", "Eadd9"},
{"A7", "A7-Bar", "Asus4", "Aadd9"},
{"D7", "D7-Bar", "Dsus4", "Dadd9"},
{"G7", "G7-Bar", "Gsus4", "Gadd9"},
{"C7", "C7-Bar", "Csus4", "Cadd9"},
{"F7", "F7-Bar", "Fsus4", "Fadd9"}
}};
const std::array<std::array<std::string, 4>, 7> Row2_Names = {{
{"A" ,"A-Bar" ,"Amaj7" ,"Aaug"},
{"D" ,"D-Bar" ,"Dmaj7" ,"Caug"},
{"G" ,"G-Bar" ,"Gmaj7" ,"Gaug"},
{"C" ,"C-Bar" ,"Cmaj7" ,"Caug"},
{"F" ,"F-Bar" ,"Fmaj7" ,"Faug"},
{"Bb","Bb-Bar","Bbmaj7","Bbaug"},
{"Eb","Eb-Bar","Ebmaj7","Ebaug"}
}};
const std::array<std::array<std::string, 4>, 7> Row3_Names = {{
{"Em" ,"Em-Bar" ,"Em7" ,"Em6"},
{"Am" ,"Am-Bar" ,"Am7" ,"Am6"},
{"Dm" ,"Dm-Bar" ,"Dm7" ,"Dm6"},
{"Gm" ,"Gm-Bar" ,"Gm7" ,"Gm6"},
{"Cm" ,"Cm-Bar" ,"Cm7" ,"Cm6"},
{"Bb7","Bb7-Bar","Bbm7","Bb7sus2"},
{"Ab" ,"Ab-Bar" ,"Ab7","Ab6sus2"}
}};
const std::array<std::array<std::string, 4>, 7> Row4_Names = {{
{"Asus2" ,"A6" ,"A7sus4" ,"Am9"},
{"Dsus2" ,"D6" ,"D7sus4" ,"Dm9"},
{"Gsus2" ,"G6" ,"G7sus4" ,"Gm9"},
{"Csus2" ,"C6" ,"C7sus4" ,"Cm9"},
{"Fsus2" ,"F6" ,"F7sus4" ,"Fm9"},
{"Bbsus2","Bb6","Bb7sus4","Bm9"},
{"Ebsus2","Eb6","Eb7sus4","Em9"}
}};