granddad: I suspect that the note octave positions were fixed in your design.
Moving the 49 note key array up and down across the entire 128 note range was not needed?
Correct me if I'm wrong. If you needed to do that, you'd simply set a starting offset into the EEROM key table.
In this case, I need to provide two functions (well... 3 if you include layering.):
1 ) the user needs to be able to transpose notes played.
2 ) The user also needs to move the controller through the octave positions.
The 3rd function is to allow the keyboard to be split. (i.e. the lower range plays notes on the first MIDI channel, and the upper range needs
to play notes on a different MIDI channel.)
Layering is another nice effect; When a key is struck, it produces two separate MIDI events on different channels.
That means Transposing and Key range need to be stored for each of the MIDI channels involved in the Split / layering.
Another issue that needs to be handled is MIDI congestion. You don't want too many note on events going out for the same key number
without a corresponding note off being sent first. That needs to be handled in the code as well.
So, you only have about 80% of the info when the timer tick is completed.
Then there's system event handling, as well as MIDI clock.
I should be done with the schematic in a few hours.
I'll post it as soon as it's complete.