Get root note from chord
Hello! I am searching for a M4L(!) patch that recieves a chord and passes over only the chord root note, similar to what Yamaha keyboards do!
If it’s complicated, there can be an easier variant: only passes the lowest note played.
I tried to do this with zones, i know how to do it, but i want to be able to play the chords everywhere.
Can somebody create it please?
I am willing to pay a small amount. Thank you!
that would be monophonic output, with lowest note passed
if there is more than 1 note held.
If you hold 2 notes and add next one it will get played only
if it is current lowest one.
Or you want to retrigger lowest held note on each key press ?
I am sure someone allready did this ...
-----
For chord detection with all inversions or even chords with missing
root note taken into account,
things will become more complicated.
a midi chord looks like that:
"64 127", "68 127", "85 127"
1.) split the note values on from their velocity values. now you can only work on the notes
64, 68, 85
2.) split the note number into two numbers for octave (1-11) and key (0-11). now you can work on the keys (C-Bb)
4, 8, 1 (key)
(6, 6, 8 (octave))
3.) now normalize all keys so that the lowest note becomes 0, and keep the offset in mind. this way you got rid of the "inversions" issue.
3, 7, 0 (the form of the chord)
-1 (the base note of the chord: C#)
this is where you will later reconstruct the chord from again, in case that is needed.
4.) now you can collect the keys into a list and compare what you got against premade patterns, for example 0 3 7 is "minor" and 0 4 7 is "major". and you now know which incoming note is the root note of the chord, because it is always the 0.
"0 3 7"
for "the lowest note played" version only 1.) is required.
after you collected the note values into a list, send them into [minimum] - and the output is the lowest note.
alternatively you could [zl.sort] the list, then the lowest value is always the first one.
Take a look at that midi monitor max4live device, which works as Roman described and is allready included into live.
and is fun to look at - it displays notes using sharps, but chords as flats....
If it displays results that you can accept, then it should not be difficult to
make it output the lowest note, or chord root note that it thinks is right one.
but ... that example with 64, 68, 85 ?
is lowest % note within one octave allways dictating the root of the chord ?
E G# C# - I would rather take it as E6 .... or A maj7 instead of Db minor
so in this case there are 3 choices at least.
and what if 3 notes are C D G within same octave?
Cadd9, Gsus4, D11 (call it whatever D7sus4 dropped 5) ?
or maybe Am 7/9 ?
As a guitar player I drop root notes in chords whenever I can
in for example trio with bass player or pianist.
detecting chords is allways problematic if tonality is not given.
In first place if you want to create non existing root note from the recognised chord.