poly~ inside poly~ voice allocation issue
So I’ve been scratching my head for a few days now about this issue.
I have an fm granular synthesiser, using 40+ voices to account for overlapping grains, and have recently wanted to integrate this into a ‘playable’ synth controlled by MID input. As such, I have nested this poly~ into a parent poly~ to enable up to 8 voice polyphony. See attached patch + included dependencies. I have had no problems with CPU, and general message and voice allocation seems to be in working order.
However, I have an issue related to voice management that seems related to the communication between the parent and child polys. When I change parameters in the parent (whether using a preset object or manually), some parameters aren’t reflected in the output immediately, but only after the parent poly’s voice allocation has gone through all 8 voices. Where the is most noticeable is in the grain duration parameter.
For example, I am playing with a long grain duration (controlling the ramp through a hanning window). When I change to a setting with a short duration, the first grain of each voice (parent voice) retains the previous length, whilst the rest follow with the new setting. This is true for the rest of the parent voices until the first voice is re-triggered, where the change has taken effect.
I was convinced this was an order of events issue I was over looking, as it seemed like a classic polyphonic voice management issue to me at first. However, after trying a number of approaches, and lots of debugging and troubleshooting, I can’t make heads or tails of the issue.
If anyone would be kind enough to have a look at the patch, fiddle with the settings, and see if they can make something of it, I’d be really appreciative. I’ve also gone through a couple of old threads here: http://cycling74.com/forums/topic.php?id=6544 and here: http://www.cycling74.com/forums/topic.php?id=17423, which are really informative but not helpful for me today :-(
Thanks in advance!
Still wondering if anyone has any thoughts on this issue. I saw a similar post running here also: http://cycling74.com/forums/topic.php?id=47110&replies=8#post-222841
This looks tricky: can you post the steps required to observe/hear the problem?
Sorry, I realise it’s a little convoluted. Here are some steps that should help to make this issue heard:
1. Select the 2nd preset (long, overlapping, fast triggered grains)
2. Play 8 notes on keyboard…
3. Change the preset to preset no.1 (short, sparse, slower triggered grains)
4. Play 8 notes on keyboard – the first grain of each voice sounds longer/louder than the rest (this is the issue I’m trying to resolve)
5. Continue playing – the parameters should now be settled… until another preset change.
The problem occurs when you receive a note-off. Then you start a fade-out and mute the parent poly~. But at that moment there is still some grain active in the nested poly~. When the same parent poly~ receives a note-on later on, the grain finishes where it was cut off. When you change your presets this becomes noticeable.
The solution is to turn off the metro when you receive a note-off. And then you wait untill all the grains in your nested poly~ have finished playing and mute the parent poly~. I recently posted an example here: http://cycling74.com/forums/topic.php?id=47110
Anyway, there are some nice sounds in this patch!
Yes!! Thanks this solved my issue! I’ve implemented a solution that uses the busymap message sent to the child poly~ to ensure all grain voices are inactive before triggering the mute message inside the parent.
Fantastic… really appreciate your help with this one!