modulation matrix with audio rate control of connections
Hello all! Longtime max user here but have not posted in some time.
I have been dabbling with MC recently and simultaneously got it in my head to explore modulation matrices. I am familiar with the matrix~ object but am interested in having the connections / intersection points controllable with audio rate signals. Perhaps a bit ambitious. :)
I tried setting up a matrix using MC objects but found that the matrix patch with nothing connected to it has the CPU at about 12%. See attached patches.
A few questions:
- Is there a way to use the mc.noteallocator or mc.voiceallocator objects to reduce the CPU load? Though it is a large matrix (16x16), not all connections will be use at all times so it should be possible to turn off parts of the matrix. I tried inserting the the mc.noteallocator but could not get it to work. Most likely due to user error. The included patch is without mc.noteallocator.
- Second question is in regards to sending single channel audio signals into the matrix to control the connections. This too has proved to be heavy on the CPU. Using MC, a single audio signal needs to be duplicated by the number of possible connections in the matrix (256 in the case of a 16x16 matrix) and then individually multiplied by a value to activate it at a specific connection. Here too I am wondering if it is possible to use the mc.noteallocator (perhaps with a named busy map) to reduce the CPU load. Any help on this would be greatly appreciated. Are there any other ways to send "targeted" audio signals?
Having run into the CPU wall I went back to more familiar patching territory using poly~. I managed to set up a 16x16 matrix with virtually no load on CPU by muting voices. Voices are activated only when a connection is activated. I could keep working with this but found an older forum post that alluded to possible instabilities with sending audio in and out of poly~ with send~ and receive~ objects.
Sorry for the lengthy post. Thank you in advance for the help!
you basically only need *~ and +~, and i would build it that way first, before switching to mc.
Thank you for the reply! Do you mean that I should build the matrix without using send~ / receive~ objects and wiring everything directly? Are the send~ / receive~ objects responsible for making the patch more CPU heavy? thanks again.
s/r does not make a difference, and i dont think that mc. itself would make a difference regarding CPU.
in my signal matrix mixers i make one poly~ patcher per row (or it could be column) - and these polys are only turned ON when at least one of the volumes is > 0. . i think that is a good compromise between efficiency and design.
but i would suggest to build a super simple example using basic objects and regular connections first, you will need to look at that later when you experiment with alternative approaches.
Thanks again, Roman.
This is how I solved it with poly~. The example is a 4x6 matrix but can be scaled up (see attached).
I made two separate patches that use poly~. One for the main matrix and one for the "buses" to get control signals into the matrix to control the connections. This approach uses a separate voice per matrix connection - in this case 24 for a 4x6 matrix.