I had a thought on chord and note handling that would preserve chord progressions and melodies across all possible scales:
In 7 note scales, there are predictable basic chord shapes - there is a i, ii, iii, iv, v, vi, and vii chord - in a major scale, these are maj, min, min, maj, maj, min, diminished - in a minor scale they are min, diminished, maj, min, min, maj and maj. These chords are easy to find from the notes in the scale - simply take the root note of the chord, and add the notes that are 2 and 4 notes up from the root, looping around to start of the scale if necessary. eg: in C major, the notes are C D E F G A B - chord i is C major - C x E x G x x . Chord iv is G major - x D x x G x B - etc, etc. I believe this rule holds for all 7 note scales, and a friend who is much more of a music theory expert than I am says that the “2 steps up + 4 steps up” rule would produce good-sounding note combinations even in pentatonic or whole note scales, or other non-7 note scales.
Sometimes you might want to add a 7th, a 9th, an 11th, or a 13th - those notes would be easy to find algorythmically from a scale as well.
The SEQ’s force to scale feature defines a key and a scale root note.
I was thinking that a new track type could be developed for the SEQ - call it a ChordNum track type. Force to scale would always be active for this track type. With this type of track, in edit view for the main parameter layer, each step could be set to number 1 to 7, with an octave offset. That 1-7 number would be used to find the corresponding chord in the selected scale.
eg: If force-to-scale was set to C major, a “3” chord would play as E minor. If the user changed the force-to-scale setting to E natural minor, the 3 chord would now play as G major (the iii chord in the scale of E nat. minor) - this way, chord progressions would be preserved across different force-to-scale settings, but with the chords changed relative to the selected scale.
#############
New types of trigger layers could be added that would add 7ths, 9ths, 11ths, or 13ths to the chord. Again, these notes would be calculated based on the root note of the chord, and the force-to-scale setting.
Trigger layers could also be used to decide whether to play the 1st, 3rd, and 5th notes (the notes that make up the basic chord itself) - that way a user could choose to play only the chord root note and the 5th, for example.
If these 1st, 3rd, 5th, add7, add9, add11, and add13 trigger layers were parameter layers instead, an octave offset could be set, and “—” could mean “don’t play this note”. This would allow users to specify different chord shapes/variations.
##############
The advantage of this is that chord progressions would be preserved across different scales (eg: a i - iv - v would be a i - iv - v to fit whatever scale was selected), and only the key would change with the force-to-scale setting.
Currently, the way the chord track type is implemented, if you choose a chord type A with force-to-scale set to off, you’d get a c major chord. If you set force to scale to on, and choose the C major scale, you’d still have a C major chord. But of you change the force to scale setting (for example, moving up the major scales - C#maj, Dmaj, etc.), then the chord changes - it doesn’t stay a major chord (C# major, D major, etc.) because the force-to-scale rules are being applied to the component notes, changing the chord type. This means that if you set up, for example, a i-iv-iv chord progression, and then change the force-to-scale setting, you won’t have a i-iv-v progression anymore.
#################
It would also be useful to have a NoteNum track type - where instead of setting an absolute note (C#, F, A, etc), the user could choose numbers 1-7, representing the relative position of the note in the selected scale. These notes could also have an octave offset. When the force-to-scale setting is changed, the note played would be the note in the selected position relative to the selected scale, rather than the current implementation which takes an absolute note and moves it up or down one semitone to fit the selected scale.
EG: a “3” note in the scale of C major would be an E. If force to scale was changed to G harmonic minor, the note would become Bb (the 3rd note in that scale).
This would preserve melodies across all scales.
#################
I’m not sure how transposing should work with this sort of chord/note implementation. You’d want to transpose a chord or note up or down within the selected scale, clearly (so a “v” chord/note would become a iii or vii chord/note, etc.) - I’m just not sure how the input notes should be applied to accomplish this in an intuitive way.
Maybe these relative chord/note track types shouldn’t be transposeable. Since they are tied to the selected scale, maybe they would be best used as either fixed tracks to be played out to a synth without transposition, or as sources rather than targets for transposition/arpeggiation (ie: sent to a bus to arpeggiate or transpose another track).
#################
Thoughts?