I would like to thank Chris, Geert and Ferdinand (no particular order!) for their help and patience and responding to my questions while I tried to get Max/EigenD integration working properly. I did also figure out and solve the problem I was having with continuous events.
As of now, I have a basic (but elegant by my own definition!) model running that integrates cleanly to the rest of my environment.
The goal is that a workable patcher can be created very quickly using a few abstractions.
For anyone interested, take a look at this picture
http://i.imgur.com/bUnOw.jpg
There are two "keygroups" (I'll probably change the name to "split" soon) defined, one for row 1 to 8 and another for row 10 to 20. The output from keygroups consist of the Row/Col of the key pressed (always normalized to zero by the way) along with note on/off and X, Y, Z parameters)
Each keygroup feeds into an [Eigen.Scale.Guitar] object which imposes guitar-string tuning (top 5 strings). The arguments are the starting note number and the MIDI channel to be used. If you wanted each key to generate two notes a fifth apart (say) you could just use two [Eigen.Scale.Guitar] objects with different starting note numbers. Clearly, creating other scales can be done by replacing [Eigen.Scale.Guitar] with something else. An obvious enhancment would be to allow just the "highest" note in each column to play, thereby supporting bar chords.
These then can feed into an external MIDI instrument or into a VST using my [GenericVST] object which is a useful helper object to hide some of the more bizarre control requirements.
Essentially, once the Max backend stuff is running, one can create really simple patchers to get useful results very quickly.
Using this technique, I have already been able to duplicate my "Lament" performance which uses a few keys in one group to trigger chords in a sequence and then another group to play the melody.
http://i.imgur.com/Riifx.jpg
I haven't had much time (probably two full days worth spread over two weeks) but I'm very encouraged. I still haven't figured out how best to detect initial velocity and those experiments will start as soon as I have more time, but to paraphrase the possibly apocryphal comment by Galileo at his trial... "damn it, it works"
Thanks, again.
David