Garth Paine Patches for Max 8.3, Part 3

    Editor's note: This was the piece that our friend Darwin Grosse was working on at the point of his untimely passing. It's about as perfect an example of Darwin at work as we can imagine, geeking out with a friend about something wonderful done in Max. Our friend Garth Paine wrote to say that he sees this series as a tribute to Darwin and his warm and generous mentorship of the community at large.
    Darwin: All right. Let’s take a look at the Cycling Three project, which is the only one that you've done that opens up in presentation mode. And I think if you do, in fact, go look at patching mode, it's because there's a lot of complexity in there. But just even in presentation mode, it's clear there's something going on here that we just simply aren't used to seeing in your everyday Max patch. This pattern mechanism is almost a mini language of some sort. What does that mean and what object is using this stuff?
    Garth: The mc.assign object is using the pattern messages. As I’ve done before, I kind of think about this in the modular synth-type environment, where you might have a mixer that's actually panning across multiple inputs and so you could use a control voltage to randomize the feeds that are coming from different modules. You could do that rhythmically. You could do that linearly. You could do that randomly. You could change your time. It seems to be that's how I understand the MC assign object — it's taking a whole bunch of messages there, but it treats them within three separate modes.
    You've got just your normal mode, and then the step mode where it'll step through the instructions that have been sent, or the list iteration mode, which gives you, again, a different kind of output. So you can really switch up the way it's responding. And then, all of these kind of cryptic messages are telling it which inputs to bring up in this case to turn it up. And so, I'm sending it a seven-channel audio file. Well, there's two assign objects running here. One with percussion on it and one with kind of melody stuff that I made in Ableton. And so, it's turning up and down the volume on those seven channels, so we hear different combinations of them.
    Oh, okay. Got it. So both of those audio files are seven-channel audio files?
    No, the melody one is seven channels. The other one is just -
    Oh, just two channels. Yeah. Okay. I see it. Now, what's interesting is that you didn't really have to create snapshots as you’ve been doing in this series because all of the action in this case just comes from selecting different pattern messages. I think that you've done kind of a great service here just by showing us kind of a breakdown of what the language is with the asterisks, the plus, the up carat, and the dollar sign. Each has their own purpose within the pattern set. I was surprised at the variations that came from this. It was really quite remarkable… when you first look at the patch, it kind of belies the fact that some real complexity can come out of it.
    I completely agree with you. And actually, one of the things that I love — even though I've written a few pattern messages that I think are interesting — one of the things that I found even more interesting is the variations on randomness that you can send. The plus pattern alone is going to kind of go through without repeating any, or the asterisks pattern, and so on and so forth. So I actually find myself kind of playing the patch, going between the patterns that I've written and then sending random instructions so that the patch mixes it up itself. I've also linked some of the melodic patterns to the percussion patterns so that when you send some of the melodic patterns, it automatically switches the percussion patterns automatically switch.
    And you could have any number of assigned objects here with different content, of course. You could use this not only as a way of creating a performance patch, but you could use it as a way of structuring a whole performance — like a whole gig, a whole set. You'd have a pattern which would be your first section, another pattern for your next one, and so on. You could actually have it as a kind of really complex routing system for a whole set rather than just for a single-performance environment.
    Interesting. I've seen a lot of people who do live coding performances, and quite a lot of their work has this kind of nature to it. You have this compact language that represents pattern management and you can kind of type those in and group them and fling them out in real-time.
    Yeah, I guess it is a bit like that. Here I chose to use. Going back to the MIDI stuff, I played around a little bit with that and then I decided that I actually wanted to make some sample material as a source that I was manipulating that also all locks temporarily together. I decided that was a more interesting way of going about it in this patch. And I really love the way... I never know what those straight up and down lines are called, but I love the fact that you can combine channels with those-
    Oh yeah, the little bar things you mean? I don't know what they're called either.
    I'm sure they have a proper name. But I like the fact that you could then just group any set of channels actually. Whatever's between those all get played at the same time.
    When you're in step mode, can those be treated as one step? So you could have different groups of combinations all in a row, then?
    Exactly. So you see there, I've got one, two, and I've got five, six… I've got a single channel seven. But the ones with the asterisks… If you're in step mode, they'll step through one and then two and then three based on the delay time that you set.
    Ah. I Got it. Interesting. This is really quite fascinating. One question I have, though, is this: The mechanism that you're using to adjust the volume — it looks like you're using an mc.adsr~. Is that right? Do these patterns send out a pulse or something? Why are they using ADSRs to control the volume?
    The mc.assign object is basically triggering an ADSR and they're both multi-channels, so the ADSR is per channel. And then, the mc.* is basically multiplying that ADSR on the incoming seven-channel file. So the reason that I've got a pattern volume meter there is so that you can actually see the effect of that ADSR bringing up the volume and down again. The timings that are set in the ADSR are the envelope and is what’s generated when that pattern is being triggered.
    I see. Oh, okay.
    So none of the audio goes through a sign. A sign is just basically organizing using ADSR.
    Right. It basically tells the ADSR which channels to receive messages.
    Right. And how fast to turn them up, and how long to leave them up, and so on.
    That's much, much clearer. That's awesome.
    You know, I still don't think ADSR makes sense in the way it's set up….
    Again, the kind of the development of it kind of goes back to the idea of the original ADSR. It was meant to be sort of like a keyboard-played device. You have an "on" and an "off," and the sustained thing has no duration assigned to it. It's directly related to the key being pressed.
    Yeah, so I guess you could look at it another way and say that it's interesting because you can trigger the attack and decay part of the envelope, and then separately trigger a sustain and release. When you leave sustain at zero, it just runs through -
    It just runs through the AD, right?
    Well, it goes ADR, basically.
    No, I don't think it does. I think it goes AD, and then your sustained level is zero, so it'll sit at zero then.
    Okay. I think it might do the release. I have a sense it just jumps sustained, but as soon as you put a number in sustain, you have to trigger the sustain-release separately.
    Right. Yeah. All right. Well, I'll be digging into that a lot more. Thanks so much for providing us with these really cool patches. It was really, really neat to dig into it, and really fun to hear inside the way your brain works.
    It's all noise.
    It's all noise. All right, man.