Page 1 of 1

Poly channel selection

Posted: Sat Apr 10, 2021 7:07 pm
by jgillmanjr
Hello!

I dropped this question on the Facebook group a week or two ago, but I wasn't able to get an answer, so I figure I'd ask it here in the off chance one of the devs might see this.

How are the poly channels (for lack of a better term) selected? Based on testing (see: https://www.youtube.com/watch?v=-LI3AxVmGak), it seems like certain channels are tied to certain notes, as compared to using the lowest indexed one that isn't currently being used.

In the example above, I would have expected every note to play the saw wave, since I was only playing one at a time.

Thanks for any insights!

- Jason

Re: Poly channel selection

Posted: Sat Apr 10, 2021 10:58 pm
by honki-bobo
Hi Jason,

you can think of poly voices as an array of slots, e.g. if polyphony is set to 8, your array has 8 slots. A pointer initially points to the first slot.
If you press a key, this key will be put into the slot the pointer points to and the pointer will move on to the next slot. If you release a key it will remain in its slot and change its state to "not playing". When you press the same key again, it will still remain in that slot and change its state back to "playing". So if you play 9 keys in a row the 9th key will be put into the same slot as the first key.
When the pointer points to a slot where the key is still playing, a "secondary" pointer will move on and search for the first "free"/"not playing" slot and put the new key there. If all slots are taken, the most recently pressed key will be released and replaced by the new key.
I had to dig deep into poly voice management when I was developing my Polyphonic Unison module, where I needed to build new poly voice arrays from scratch and it took me some time to figure out how polyphony is handled in VM.
I hope this answers your question. If not, let me know.

Best regards,
Martin

Re: Poly channel selection

Posted: Sun Apr 11, 2021 1:04 am
by jgillmanjr
Martin,

I think I understand! To me (as a python goon), it sounds like a size limited ordered dictionary hybrid that's keyed by note.

* Time Elapses *

So I ended up testing this and found it interesting that the index pointer gets maintained through patch changes.

See this quick video: https://www.youtube.com/watch?v=ruqFDUnNIpE

Of course, now that I've also just glanced at the Programmers Guide and the SDK documentation, presumably the "default behavior" can be overridden by the module developer given the signature I'm seeing for the SetPolyValue method.

Sounds like I need to get a better understanding of Java and start poking at module development more (only thing I've done to this point is the simple little volume control example module).

Thanks again!