controlling 96 dmx channels efficiently
I’ve been using DMX with Max for a while, thanks to the amazing objects by David Butler. But everything I did was extremely simple (most of it controlling 4 rgb pars, 3 channels each).
Now I’m starting to develop a project that is much bigger. I will use 32 independent led strips, 3 channels each = 96 dmx channels. I want to control it via Max for Live, to integrate it in my Live setup in sync with sound.
Controlling everything via 96 knobs in Ableton Live can get really messy. I’m thinking about making it more efficient, maybe using a modular system with several devices. Another option is using jitter matrices and operations. I’m not quite sure. So I decided to get some inspiration from the greater minds of this forum.
How do you approach this problem? How to control many DMX channels in a efficient way?
If you want direct control over every single channel, there’s no other way than exposing every channel as a parameter.
However, if you’re willing to define blocks of functionality, you could write an interface to your DMX channels via an intermediate ‘Effects Engine’. This would be a Max For Live device which automatically adjusts your channels based on Ableton parameters.
For example, a simple sine wave effect could have parameters of frequency, amplitude and spread. This would then produce a sine wave of intensity value which spreads across the DMX channels.
You could build multiple units of these effects and have them each output to a separate imp.dmx stream, then maintain a single device which mixes them all together and outputs them via DMX hardware or Art-Net.
This is essentially what I’m doing for the next version of DMaX.
Matrices, definitely. Store each bar in a cell/pixel. Also handy for visualizing/previewing. I’ve done very similar things that way.
DTR and David, thank you.
I think the best solution is a combination of those two ideas: creating individual Max for Live devices with effects and different controls (one will be 96 individual knobs, another one generating textures, a third one with jit.catch~ and so on). Each one of those will generate a simple 16x2x3 matrix. A master device will receive all the matrices and combine them in different ways, using different operations that can be selected and programmed. What you think about this approach?
DTR, could you share an example of how you deal with matrices? I’m currently testing it with simple jit.fill and jit.spill objects (and mxj list.Multiplex to concatenate the output in dmx order). I wonder if this is the best way to do it.
imp.dmx actually already uses jitter matrices to store data. Essentially the concept behind imp.dmx was to create wrappers around jit.matrix objects which allow easy setting of DMX values.
Look inside the abstraction patches and you’ll see the names that get applied to the matrices, you can access them via normal jit.matrix objects if you wish.
I’m sorry, these are old projects and I’d have to dig into them to extract examples. No time for that any time soon.
Here’s some footage though:
David, thanks for the tip. I found out that the standard matrix is imp.dmx, but as far as I understood, those are 512 x 1 x 1. I think that using a three plane matrix, as DTR suggested, can be pretty handy for generating some complex RGB graphics.
DRT, are those led strips covered with some kind of acrylic? That’s exactly what I’m working with. What a coincidence. (By the way, amazing work! I just found out that I have already seen some footage of Integration 04 somewhere in the internet. Fantastic. Glad to meet the man behind the work.)