Articles

Max 8.3 and The Ramps That Make Music

Most "non-integer" releases of Max tend to be a grab bag of bug fixes, a few scattered features, and if we're lucky, a new object or two. Max 8.3 includes over 20 new Max objects, and most of them are built around the idea of making music in Max - with special attention given to MSP audio signals as a medium for driving musical parameters. Some of these objects were inspired by modular synthesis and avant garde music ideas, and others are just obvious solutions that came up as we explored this territory. Like a lot of Max features and patches we make, some of these are simply an answer to, "What happens if we try this?"

Rethinking the phasor~

A big theme of these new tools begins with a phasor~ as a source of musical information. A phasor~ is the simplest of oscillators in Max, generating ramps from 0-1 over some amount of time. This simple signal might not sound great hooked up to your speakers, but you can derive lots of useful information about time from these ramps if you have the right tools that respond to it. Imagine you have a phasor~ set to the length of a measure and you can do some simple math to subdivide that ramp into notes. The new subdiv~ object allows you to do this simply, with a couple of very useful bonus features - probability and patterns - that make it an object that will find its way into many patches.

Using subdiv~ to break down a ramp signal, using probability and a subdivision pattern.


Once you have a musically interesting ramp signal, the next step is thinking about how that could be used to actually generate sound. The most obvious might be to connect that ramp to a wave~ and play back some sample material, but Max 8.3 also offers up a few new ways to respond to this ramp. The shape~ object works similar to line~ with input from a function but is driven by a ramp signal to generate its envelope, and updown~ provides an output similar to trapezoid~ but uses millisecond ramp times instead of scaling to the ramp itself. The simple twist~ also provides a drop-in solution to add a little curve to your ramps and envelopes.

Shape~ is driven by a ramp to create remapped control signals, even using function in curve mode.

The classic table object now also has a signal-based sibling called table~ that can easily remap incoming signal values and even generate random numbers from incoming pulses similar to how table responds to bang messages.

Further Explorations

Among other new ways to store and recall signal values are stash~, mc.pattern~, mc.assign, and mc.chord~. If you're looking for new ways to generate those ramps check out mc.snowphasor~ and ramp~, and don't overlook the new attributes for phasor~ as well.
MC also got some serious attention in this update, with new useful objects like mc.generate~, mc.assign, mc.pattern~, and mc.chord~, as well as new easing and randomness functions for generating values across MC signals.
I've only scratched the surface, so be sure to dive into help patches, make experiments, and keep an eye on our Instagram for weekly demos of the new objects in action. We look forward to seeing and hearing what you create with these new objects.

A simple signal-driven sequencer built with Max 8.3

by Andrew Benson on April 29, 2022

Creative Commons License
Jack.Lion's icon

C74 never ceases to amaze me with all their efforts. Can't wait to try these out!

Iain Duncan's icon

Very nice, thanks! :-)

christianlukegates's icon

Revisiting Max after many years hiatus, so am incredibly rusty. These patches are inspiring- is there a working example of the last one (simple signal driven sequencer) to have a look at? Can work most of it out by sight apart from the contents of the parse-matrix subpatcher

Martin Leduc's icon

Following the previous question from ChristianLuke, i've been exploring [VST~] a lot loading synths like Vital, Phase Plant etc... Using Stochas, Riffer as probabilistic MIDI generators and had problems using those "MIDI generators" INSIDE Max 8.3, even if it was working well when outside of Max, using IAC bus 1 sending into Max but had trouble using the IAC bus 2 to "talk" back to change "pattern" or "riff" number.

I'm new to 8.3 and don't like the MIDI mapping approach, so i wonder if there is another way to make generative music with a more ambient flexible aesthetic, not stuck with the Cage-Bach complexity, and neither with the fast-sequencing styles and short term variations coming with the Stochas and Riffer paradigms (closer to techno than ambient) ?

I'm a little rusted with Max also, never used MIDI that much, and rusted in my english (from Montréal), so i hope my message is clear enough.

Thanks for your attention,

Martin