ok, this is 'theoretically' trivial... what we can do is reuse the voice allocation done by axoloti, as midi channel allocation.
(building your own allocation scheme, would require a more complex patch, or your own object, and probably not necessary for your use)
the most efficient way to do this is with a midi script, but then it just ends up as C code,
... so i'll show another way
a) create an embedded subpatch, make it poly with (e.g.) 16 voices
b) in this subpatch connect a midi/in/keyb to midi/out/note
ok, now what we want to do, is use the voice's index (aka polyIndex) as the midi channel,
now you'll say, the issue is I cannot change the channel, on midi/out/note - correct
so what we need to change the midi/out/note object... and create a specialisation.
so, select the object, and select embed as object.
now here I have a choice, i could just 'hack it' or make a reusable (for me) variation, lets look at both approaches:
a) the 'hack' approach
i) edit the object
ii) delete attribute channel
iii) in the midi code , replace attr_channel - 1 with parent->polyIndex
(note: polyIndex is already 0 to 15, so we dont need the minus 1)
thats it, done
b) the improved object approach
i) edit the object
ii) delete attribute channel
iii) add a new inlet, called channel, and type int32 positive
iv) in the k-rate code , replace attr_channel - 1 with inlet_channel
(again polyIndex is already 0 to 15, so we dont need the minus 1)
v) then add a polyIndex object to the patch, and attach it to the channel inlet
thats it, done
both things do the same, just the latter allows you to mess about with channels, in the patch rather than editing the code.
the reason Ive shown this is, ... you can see, it takes 15 seconds to create variations,
so in axoloti, we dont need 100's of varieties of objects in the factory (etc), with every possible variation... its so trivial to create our own variations.
I use this approach all the time. I don't bother saving these variations in my library (unless I plan to use on many project), I just simply embed the object. ... you can even cut n paste them between patches, if you need to reuse in one or two patches.
hopefully this is helpful
Mark
ps. I didn't actually test the above, so there may be some oddities I've not considered... but should give you basically what you need