I seem to have a love/hate relationship with Max. Every time I have an idea that for a Max patch the same thing happens: 1) bang out a rough working first iteration; 2) fix the obvious issues; 3) iterate, and get even more enthused about the project as things start sounding better. That's usually when the patch just stops working as expected or even at all. Turns out there are a few non-obvious things about Max that you need to be mindful of. For example, the position of elements in your patch will have an effect on the order in which events are processed. At first this seemed insane but I think I'm coming to see this as a useful feature (or maybe it's just a bad idea?) Another thing that I recently discovered is that the send and receive objects used for passing data around without cables makes that data available in the global scope, which is just asking for trouble. Then there's the naming of the objects in Max. Seriously, who the hell thought zl would be an appropriate name for an object that does list processing? And uzi for sending out a series of events in quick succession (I guess this was Cycling's idea of a joke?) This weird naming scheme (if you can call it that) makes finding the right object for the job incredibly frustrating at times, though the documentation seems to have improved. While these quirks do cause occasional frustration I'm finding that working with Max is getting easier. I've also realized that a key factor in keeping one's sanity while developing and especially for maintaining a patch over time is to keep things as clean as possible. There's nothing worse than trying to untangle a knot of a patch when fixing a bug. That said, I'm giving Max another chance. Let's see how long the relationship lasts this time.
Oh and as my first foray into the world of Max this year was to revisit an old Max for Live patch I started a few years ago. As expected, the patch was a total mess, in fact it didn't even work. So I re-started it and now it works again (for now). The inspiration for the patch came from reading about analogue shift registers, devices which were occasionally found in modular systems. Basically such devices allow you to route identical voltage (or MIDI) values to multiple sources in sequence. The concept is relatively generic so you can achieve all sorts of effects using it. In Live routing is done with velocity since I haven't found a way to take advantage of MIDI channel data. I recently uploaded a demonstration of what it can sound like, but I suggest just downloading it and trying it out for yourself to see what happens. Basically all you need is a Live set that consists of a single MIDI channel with: 1) the effect followed by 2) an instrument rack with chains configured to receive single velocity values between 1 and 8. Play some MIDI into the channel and you should hear the effect immediately. It can be subtle or profound depending on the input so be sure to try different sequences and note lengths.