Mixing multichannel audio with jit.matrix
Hello everybody,
I am working on a patch, in which I got a large multichannel (100+) piece of audio streaming. Its levels should be independently modified, then the whole should be mixed down to mono and the operation should be done several times, in order to create a display of the whole on several loudspeakers. In order to do the level corrections I used mc.gain~ in multislider mode, which worked. Problem though: the multislider mode only works if the object is visually wide enough, which makes it super big, plus it draws way too much CPU in the end.
So I am trying to find a simpler way, using for instance a jitter matrix with all the mixing info going from 0. to 1, on several planes for each final output. I would then like to multiply each cell from the matrix to the whole multichannel audio piece, as a simple way to mix plane by plane. Unfortunately I couldn't find a way to do just that so far.
So my double question: is there a simpler way to use mc.gain~ as an object without any visual representation? And/or how can one multiply a mc.sig~with a jit.matrix in the simplest way?
Thanks in advance!
[matrixctrl] / [(mc.)matrix~] ? Or [mc.*~] ?
[matrix~] should be your friend. Then anything of your choice to feed the 0/1 values.
Thank you for your quick replies. I did try with [mc.*~] but that required to transfer my mix info (all values between 0. and 1.) to [mc.list~], which also worked but then also became very costly.
Now about [matrix~], I do see the point but haven't found a clean way as of yet. If I am right, I'd use the 100+ channels audio as input, send messages of the type 0 0 0.5 200 (x y level ramp) for each channel and mix that down to 8 outputs for instance. That represents a huge amount of messages, also coming from a simple list I'd need to find an efficient way to generate those. I mean, is there a simpler way to input a list of values already set in the right order?
Sorry for the naive question. If that is blurry I can send a code example of what I mean.
Managing one by one 100 individual channels will always require many data, I'm afraid ;-).
(setvalue 0 X ) sends X to all channels at once. Playing with a combination of [mc.target], [zl.iter n] and [uzi 100] or [counter n], for instance, may ease the workload. You may consider [coll] as well. But it all depends, of course, on what exactly you want to achieve.
is there a simpler way to input a list of values already set in the right order?



If I understand correcty, you need 8 mono mixes of 100+ channels,
in minimum that makes 800 values, no matter how you create and execute them.
if adjustments are needed ony once, till all levels are ok,
it should be no problem, this or the other way , but if you
want to mix live 800 channels, then it is a bit of challenge
in first place GUI for adjusting 800 values.
Problem with multislider is that it sends the whole list out even if only single slider changed.
but that is not a big deal, one can send only on mouse release.
here is old good matrix~ with 100 channels, CPU 0 %

one could reuse same multislider, store 8 lists into coll,
and populate the multislider when mixdown 1 - 8 gets selected.
should be easy to do
i would use 100 [*~] objects.
it might take 1 minute to patch that, but it´ll save you from doing 2 hours of research.
you mean 800 [*~] objects & 800 GUI elements to set values,
then 800x something to smooth level changes ... ???
I don't know what time saver would that be.
Thank you so much for the replies, I will test it all (not the 100 [*~] objects though, mostly because I tried already with [mc.*~] and couldn't see this as a proper solution) - I think @source audio is right, at least it looks like what I was trying to do. But I will dig into the different ways to get there and report, didn't think of the coll thing either - I was going to use several multisliders actually but that is probably even more efficient. Again, thanks!
Edit: the multislider going into coll and into a matrix~ was an appropriate solution. Thank you so much for your inputs, I am far from being done with this project but this was really helpful.