Multichannel polyphony with 1 voice per channel possible?


#1

Is it in any way possible to create a midinote module/firmware alteration through which you can select the lowest-highest midichannel AND have each midichannel control it's own single voice (so each channel functions monophonically without stealing voices from another channel).

I like to control 6 voices as if each voice is it's own string, but the current firmware/module just uses all the midinotes as belonging to the same "pool", muting the wrong voices..
I've tried multichannel polyphony, but also here it cuts voices played by other channels..


#2

best i have come up with is 6 (or 4 in my case) copies of the module/subpatch each with a midi channel selector and set to mono. this works for "guitar-midi" mode quite well, but i am not sure that is exactly what you want. @thetechnobear said, he would add a new polyphonic mode that explicitly allows channel mapping in a 1:1 manner (channel = voice) but i don't think that is done yet.


#3

Thing is, when I tried with a subpatch, set to polyphony=6, I was able to go live, though with the wrong voice-stealing.
When I tried making 6 different mono subpatches, I went over the available memory big time..
The polyphonic subpatch should in theory be able to behave the right way of voice-stealing if the code was modified "correctly" (adding as an extra voice-stealing option), without creating this excessive use of memory.

I'm now trying out a different approach.
If I'm right, voice-stealing will use the same voice if note-values are already in the polyphony pool (at least, I think I can remember reading a post of Johannes about this somewhere..).
So what I'm now trying is to send over 6 different channels, each using their own note-value.
Together with this I send a midi bend message on the respective channels.
This way each channel should re-use it's own voice as it's the same note, but give it the actual note-offset thanks to the bend message.

then again... it's still not working.. somehow now I only have a single voice while polyphony is set to 6.. hahaha
guess all voices are playing the same note or something..


#5

ok, got the polyphony back again, bend is correctly adjusting the pitch, but the voices still get stolen by other notes, even though you'ld say it would re-use a voice when playing the same midinote..


#6

does anyone where this voice allocation is coded in the firmware?? I can't find it and I've read all the files one by one by now...


#7

Haven't got any answers but rbrt posted some polyphony objects recently here:

I haven't had a chance to play with them yet, so don't know, but may be useful?


#8

...basically, this is what my approach to polyphony is about,

the concept is one voice per instance of the polyphonic subpatch:
a note that is played will 'stick' to an instance of the subpatch as long as
it's being held down or is in 'release-state'.

this information is handled by a 'polymaster' - object outside of the polyphonic subpatch.
inside the polyphonic subpatch,there needs to a 'polyslave' - object that provides
the 'polymaster' with information about the playback-state of the different instances of the subpatch.

'polymaster' has a 'voice-stealing' - option, where notes that are not 'on hold', but in 'release-state'
can be stolen.

thus, as opposed to axo's polyphony-model,
you can create polyphonic, multitimbral setups (i.e. different sounds for different notes/keys)
and achieve 'latching' (a sound gets started with a note-on, and stopped with the next note-on)

PS:there's a help-patch for 'polymaster' , I don't know if it's maybe to specific...I'll help if I can..


#9

I only saw the picture and looked through the modules which was a bit hard to understand how to use them, but I didn't check the help file, so I'll do that.
Not sure yet if your modules will do what I need. I really want 1 voice per midi-channel and no way of voice-stealing between channels, just like creating 6 embedded patches, each on mono on their own channel. Problem is, creating 6 seperate patches just takes a lot more memory..

Atm I just created my own module containing the 6 oscillators, envelopes, vca and filters. All the memory, like phase, filter position etc, are used as tables (eg. phase[6]) and the midichannel select to which part of the table the midi is send to. In the end probably saves even way more memory like this as there's no module or code to be copied and put into the memory. It just reuses the same code 6 times with different values.
So now I've got a 6 voice fixed wavetable synth plus 3 extra voices using 1D/2D wavetable-morphing oscillators.
Lot's of beautiful harmonics :slight_smile: