Articles

Garth Paine Patches for Max 8.3, Part 2

For the second article in our series on Max 8.3 patching, Garth Paine has created a patch that can claim an ancestry from the astounding player piano work of Conlon Nancarrow and gives a nod to its Black MIDI cousins: Cycling Two Black MIDI train (if you're new to the genre, this article will help you get up to speed) It's quite remarkable because it brings Max users something they may have not even thought they needed — an audio rate midi player, which is really cool. Buckle up!

Cycling02-BlackMidiTrain.zip
application/zip 15.87 KB
download the patch used in this article

Note: this patch also requires the installation of the JC_rev~ object from the PeRColate package, which you can download using Max's Package Manager.


Darwin: Can you explain a little bit what captured your attention about MIDI at audio rates and why you decided to build a performance system out of that tool?

Garth: I really love taking — even in the modular environment — instruments that are really designed to do one thing and then driving them much faster, and seeing how they self-modulate or what other timbres they produce. And the whole no-input mixing desk practice of resonating the actual infrastructure of the device itself is super interesting to me. I see this kind of black MIDI approach as, in the past, being a little clunky, but this player, and I guess with the computational pair that we have now, suddenly opens up this amazing ability to trigger it with the phaser at audio rate. And again comes back to this idea of just getting these incredibly rich timbres.

I started playing with that and I was really interested. You'll see that I'm feeding like 10 notes as a kind of basic structure, or 12 I think, in there. And I was getting these really interesting timbres out of there and started changing those a little bit. And you can see the velocity is driven also by a cycle object, so we're getting a little bit of randomization or variation in the tamp, so it's not too static.

And then, I started thinking, "Okay, if we're playing those, how do we change the distribution of pitch so that we can really bring the timbre alive so it becomes kind of fluid?" It becomes kind of compositional tool. That's why I use the ease object. Basically, the ease object is allowing me to do non-linear transformations of the pitch sets. If you change the ease function, you get completely different sound even with the same pitch set that's coming out because you're redistributing that pitch set.

Right. So, what the ease function kind of does is you have a note that says, "This is the distribution curve for the pitches," but it's kind of acting like a mixer, right? A formula-based mixer?

I guess you could see it that way when the distribution of those pitches is really low, for example. You're right, but it's going back into the note numbers, so you are actually changing the frequencies themselves.

The frequency that's dissolved....

Right. You've kind of got this really nonlinear ability to change the whole timbral makeup of the sound, even with the same note input at audio rate. And then you can move that midpoint, as well. So, in this patch, I started finding that if I just started moving that midpoint, even though it doesn't really show for quite a while in the graph itself, you hear this amazing timbral variation. And I was thinking, "Oh my God, I could write a whole film score just with this patch."

Because it's changing the MIDI, it's actually changing the harmonic content of what's being generated. That's wild.

It's not even shifting at a full MIDI pitch and we're still getting these amazing variations. I found that, again, once we get that main sound content, and then we kind of manipulate that so we can more fluid, it's just the opportunity to vary things that's extraordinary. And then, you could put any VST object you like in there really. At the moment, we are just running a basic, general midi object there and that does a great job.

I loaded up the Arturia DX7 emulator and stuff, and it's different, but it's an incredibly weird sound. What's funny is when I saw what you did, I sort of expected it would sound like running a fork across a rake or something. And sometimes it does. But sometimes it doesn't. Sometimes it has this like real structural chordal sound, and sometimes it has a very ethereal, kind of foggy sound.

Yeah.

Going through the snapshots for this patch was a real treat. Is there something in the snapshots that was particular to how you liked engaging with this program?

In this patch, the snapshots are even more varied than the other patches because of the amount of variation that's possible here. And like you say, in the early snapshots, it's almost Stravinskyesque in the kind of Rite of Spring, like big chord or kind of rhythmic things, right?

Yeah.

But I actually like some of the ones that are more minimalist, and I like the kind of Different Trains reference, which comes back to the famous Steve Reich piece. Because it sounds almost ensemble-like, there's such a richness to the sound that it really sounds like you've got a whole orchestra there or a whole ensemble of instruments there. Iin the latter one, slowed the frequency of triggering down and you start getting this whole kind of unfolding of the sound. So some of the cross rhythms that come out with that are super interesting.

In the "cycling 01" patch you created that we looked at last time, you used generate to sort of create a function that worked across channels. In this case, basically you used the ease function spread across an MC line. Is that what I'm seeing?

Yeah.

That's really interesting. What drew you into this sort of mathematical function use?

That's a very difficult question. I guess I wanted really very fine control. The approach of sweeping the midpoint for instance is set with a step rate of... I'd have to check it, but it's like .00001, right? So it's almost microscopic. It's like watching grass grow, but you can really hear it. I think it's just that level of control that we can get by doing that. I was kind of interested in sweeping as I listen to it... I guess it's informed by really listening to it. As I was sweeping through, I felt like I wanted to go back and have these ranges sweeping through these timbre spaces... almost like ocean waves.

It's so interesting. And it's neat, because you think of these functions as having a high level of precision, but it had a very organic sound to it — especially as I played around with some of the different curve functions and with that varying center point. It was really cool.

Right. Yeah. The ease function itself — because the resolution is really just the 12 pictures that have been put in there — is pretty coarse. But then you have this ability to really tune that in terms of the higher and lower range, so you can bring the whole function down in range, and then sweep that midpoint, it starts getting super interesting.

Learn More: See all the articles in this series

by Darwin Grosse on May 31, 2022

Jimbobaloobob's icon

sorry I'm new to Max, I'm getting a 'no such object' message for JC_rev~ should I be saving the patch somewhere specific?

Max Gardener's icon

That's because - as a new person - you may have not had the time or the opportunity to explore that astounding collection of useful third-party objects in the Package Manager (many of which are so widely installed and used that it doesn't necessarily occur to someone to mention them). I'll add a mention that you'll need this to Darwin's article.

Download and install the PeRColate package from the Package Manager, which you can access by clicking on that box with the little dot floating in front of it at the top of the left toolbar in any patcher window. After that, you should be good to go!

Jimbobaloobob's icon

Splendid- you are right, I haven’t- thanks Max :)

Max Gardener's icon

No problem, J. And I think you may enjoy meeting JC_rev~'s pal munger~, too. :-)

aleksuuu's icon

fascinating! how does mc.midiplayer~ interpret a note number larger than 127 and/or is a float value?