Idea for Minor MidiPal Mod - Help

I just got my new MidiPal for CHristmas yesterday, I LOVE it

but being me…I have alrady found the one thing that (to me ) would be really useful…and I am hopeing that someone on here with coding knowlage agrees with me and makes this idea of mine a reality.

I would call this mode " force to white-keys" mode :slight_smile:

Let me explain, if I play in the root of C and use Major, obviously the White Keys are all perfect and the bkack keys are forced to scale…

By extention of this, if I play in the root of C and pick Minor…I can use all the white keys beginging at my chosen root…and due to the force to scale …all my white keys are foced to play C MIINOR …perfect !

Now…if I was to choose the root of D and Major… if I use my same playing technique from the D and up…it is correctly constrained to scale…but the E and F notes are identical with the next note on the F# with again the B and C identical with the next note on the F#…this hinders me as i dont know where these duplicate intervals come in in every scale.

In my proposed idea the scales would be manipulated so that the chromatic changes are arranged to conform to the white keys of the keyboard.

so in the above example;

D,E ,(F# shifted DOWN to white key F),G,A,B,(C# shifted down to C), D

this would let me build a custom controler that consists of JUST the white key values which i can then play in a modal way where all increments are relative to mavements up and down the fingerboard regardless of scale selected ( ie I dont have to “know” where the black keys are for each scale).

does that make sense…and can anyone help me???

thanks in advance and Merry Christmas


ok, replying ot my own post cos no one seems to beon board for this one…I have looked at the programming as best as my skills allow and I am wondering,

am I right with this thinking…

So this is CHROMATIC (all notes black and white… so if you set root as C, then C= 0 , C# = 1 , D = 2 etc

+const prog_uint16_t lut_res_scale_0[] PROGMEM = {

  • 0, 1, 2, 3, 4, 5, 6, 7,

  • 8, 9, 10, 11,

This one is MAJOR so C = 0 and C# ALSO = 0 etc

+const prog_uint16_t lut_res_scale_1[] PROGMEM = {

  • 0, 0, 2, 2, 4, 5, 5, 7,

  • 7, 9, 9, 11,

So, the Good news is I GET IT, but the bad news is, the same transposition direction is always applied… the only thing that is altered is what note = 0 …this is set by whatever note is defined as root

…so my question now is, would anyone dare set me off on how to re write this so that in Major and Minor where there are seven tones per octave… the transposed notes ALWAYS get moved OFF the black keys and ONTO the white?

I would happily see this as a separate app if memory meant it would not sit alongside the current one…alternatily I would be perfectly happy ot sacrifice all other APPs, not that I dont like them, just tha tthis is the holy grail for me.



Just another thought,

there is the Transpose settings too within this app, could a compunation of the transpose logic and the current major / minor key contraint tables to get what I want in one step?


I would do that:

take the MIDI note number
% 12
get an index in {0, 0, 2, 2, 4, 5, 5, 7, 7, 9, 9, 11 } (The “round black keys to the nearest white key table”).
do a lookup in the scale table using this index
add back the octave part

Sorry I’m too busy to work on that at the moment…

Thanks for the tip,

I totally understand that you are probably too busy to work on it your self so i really appreciate you just clarifying the idea to me.
I will have to do it the hard way and begin learning from the ground up whilst also looking for someone maybe a bit more skilled who i could team up with.