you dont have to use midi
you can also use tables.... (or any adhoc use of the voice)
I did this on out very first patch challenge ( 3 years ago , wow!) where i wanted a polyphonic sequencer
its not the simplest example, but the essence is simple
put a table in the top patch, which you then read using an index based off of poly voice index.
so simple example
[alloc mydata 16]
various [table/set] to set your data...
[polyindex]->[table/read] -> your voice data
you can also put some stuff in the voice patch , if you can infer what you need from polyindex
I guess the main thing here is...
if you create a polyphonic sub patch, the code of the voices is continually 'running' regardless of midi or not.
all that the 'voice allocator' is doing is translating which voice to use for a particular note, and then directing the midi to the appropriate midi handler instance.
so if you dont have midi, then you just have to decide on the 'allocation' scheme yourself