Moving GUI to poly object
Posted: 28 Oct 2024, 18:48
In previous versions of my wkp, I have tried using a single poly object for most of the interface, since my paradigm is a mixer with a set of functionally identical channels.
The advantage is that if I make an architectural change to a channel, I can just reset polyphony and the whole UI is rebuilt with the new features on every channel. The disadvantage has been a huge number of busses, and too much CPU required. Plus in V3 and V4 there were issues that would cause crashes with extremely complex poly objects. Never tried in V5, but haven't had a poly issue for a while.
I have tried scripting a process to remove all but one channel, and then copy that channel across to all the other tracks. But that has been buggy for me. Some copies were not perfect. Again, haven't tried since V4.
Wondering if the new global arrays would make this approach less CPU expensive and more reliable. What do you think? Any thoughts about pitfalls in re-architecting this way?
Things I know how to do:
dynamically name UI control busses based on channel number. Dynamically change layout object position/color based on channel number. Make sure all audio and midi keyboard input for a particular track goes straight through without busses, so there is not added latency. A block of latency on data coming from the UI is okay. I run the GUI slow anyway, as I am near CPU capacity. But maybe global arrays would reduce this latency?
Things I am not sure of:
Latency and CPU of global arrays.
Currently I'm sending vst parameters via traditional array sends from track to track. Some of these arrays are pretty big. Wondering if using global arrays would save CPU/reduce latency here?
Any thoughts or resources welcome. I will go re-read up on global arrays now.
cheers!
-eric
EDIT: It's been more than a year since I last did any major development on my WKP (although I use it every day!) and I had forgotten about Usine Objects. Is this a possible approach for a poly UI? It definitely cleans up the patching space. I use it to save and load control settings from files, but I don't know if it is fast enough for live performace.
The advantage is that if I make an architectural change to a channel, I can just reset polyphony and the whole UI is rebuilt with the new features on every channel. The disadvantage has been a huge number of busses, and too much CPU required. Plus in V3 and V4 there were issues that would cause crashes with extremely complex poly objects. Never tried in V5, but haven't had a poly issue for a while.
I have tried scripting a process to remove all but one channel, and then copy that channel across to all the other tracks. But that has been buggy for me. Some copies were not perfect. Again, haven't tried since V4.
Wondering if the new global arrays would make this approach less CPU expensive and more reliable. What do you think? Any thoughts about pitfalls in re-architecting this way?
Things I know how to do:
dynamically name UI control busses based on channel number. Dynamically change layout object position/color based on channel number. Make sure all audio and midi keyboard input for a particular track goes straight through without busses, so there is not added latency. A block of latency on data coming from the UI is okay. I run the GUI slow anyway, as I am near CPU capacity. But maybe global arrays would reduce this latency?
Things I am not sure of:
Latency and CPU of global arrays.
Currently I'm sending vst parameters via traditional array sends from track to track. Some of these arrays are pretty big. Wondering if using global arrays would save CPU/reduce latency here?
Any thoughts or resources welcome. I will go re-read up on global arrays now.
cheers!
-eric
EDIT: It's been more than a year since I last did any major development on my WKP (although I use it every day!) and I had forgotten about Usine Objects. Is this a possible approach for a poly UI? It definitely cleans up the patching space. I use it to save and load control settings from files, but I don't know if it is fast enough for live performace.