Max featured image

Max/MSP: The History and Utility of this Iconic Language from Cycling ’74

ProducingSound DesignSynthesis

The history of Max/MSP began almost 40 years ago as a project initiated at IRCAM (Institut de Recherche et Coordination Acoustique/Musique) in Paris by Miller Puckette. This article will provide an outline of major developments in the Max programming environment over the past 4 decades. For specifics on how to program in Max/MSP, I encourage you to visit the resources available on the Cycling ’74 site or explore the numerous tutorials on YouTube and elsewhere.

It was originally called The Patcher until the idea was licensed by Opcode in 1990 and renamed Max, after Max Mathews, a pioneer in digital audio research and technology who spent much of his career at Bell Labs where he developed the first widely used program for sound generation, MUSIC. Puckette would later create PD (Pure Data), an open-source version of the concept.

At Opcode, David Zicarelli developed the program, eventually acquired the rights, and founded a new company called Cycling ’74. While Opcode ultimately went out of business in the late 90’s, Cycling ’74 continued to grow buoyed by a vibrant community of Max users and third-party developers.Max/MSP graphic

Max manual cover image from the 90’s

In 2017, Cycling ’74 was acquired by Ableton Live, which had already opened the doors to collaboration with Max for Live integration and the ability to build plugin devices in Max that function in the Ableton environment. Around that time I wrote an article called, “Ableton Live and Cycling ’74: The Holy Alliance or Dynamic Duo?“ for the Pro Audio Files. At present I can happily announce the duo is thriving and the partnership has blossomed, resulting in more creative potential for both Ableton Live and Max users.Ableton Max for Live

From the Ableton site

WHAT IS Max/MSP?

Max/MSP is a graphic object-oriented language that allows users to create custom software by connecting onscreen objects (basically sub-programs) together via virtual patch cables or sometimes cable-less connections. Although the objects themselves are coded in C++, programming in Max requires no knowledge of low-level code. It opens the programming door to artists who want to spend their time making content instead of reams of arcane code.

Example Synth Patch

Example Synthesizer Patch

Building in Max is a fast and intuitive process that is highly satisfying and empowering. You can build a custom synth or audio processor in minutes starting with a blank screen. No longer are you limited by what a particular piece of software can or cannot do. Rather than spending time rifling through manuals to figure out how to do want you want to do, you design the software around your creative impulse. The idea comes first, or it emerges or unfolds with the act of playful programming. The Max environment is ripe for experimentation of all sorts. You can’t break it…believe me, I’ve tried.

Guts of a Max patch

The guts of a disorganized Max patch

MAJOR DEVELOPMENTS

To be completely thorough, this section would have to be book-length. Instead, I’ll outline the major developments over the years with some examples of how Max can be used.

Max

The first iteration, marketed by Opcode as described above, was a control message system that used MIDI and control messages to drive external sound sources. This was my introduction to the program back in the mid-90s. My first version was 3.5 (I kept the CD-ROM for the sake of nostalgia):

Max CD-ROM

Max CD ROM from the mid-90’s

Although today it would be viewed as highly limiting, this MIDI-based application was used to create all sorts of interactive music and sound installation work. My very first piece written with Max was performed in NYC in 1997 and was called Music for Typist. It involved an onstage performer typing on a computer keyboard. The Max patch translated the ACSII code into MIDI data driving a hardware synth while letters and words were projected and animated on a translucent screen in front of the performer. Although the performance went smoothly, the patch was crashing up until the day before the event, partly because I was pushing my computer to its processing limits and partly due to my programming butchery.

MSP

As CPUs became more powerful in the late 90s, in-the-box sound generation and processing were realized with the introduction of MSP (which might stand for Max Signal Processing or Miller Smith Puckette). This was revelatory on many levels and it remains a powerful environment for experimenting with and learning synthesis and signal processing. MSP objects communicate at the signal rate which is based on the sampling rate as opposed to Max objects which are limited to message rates (1ms at the fastest). This along with exponential increases in computing power led to all sorts of new developments. Below is a demo of one of my patches from a few years ago:

NATO.0+55+3d

This was a collection of 3rd party objects that could be used in the Max environment for realtime video control. It was a liberating moment for the visually-inspired, and the mystique behind the anonymous developer fueled a curious fascination. The Netochka Nezanova collective whose name comes from Fyodor Dostoyevsky’s first novel Netochka Nezvanova (1849), translates as “nameless nobody”. I remember visiting the NATO website for the first time and having my entire screen unexpectedly turn black followed by some message from the developer.

Jitter

With the introduction of Jitter in 2003, the Max environment became a complete multimedia platform. This builtin package of image-based objects allows for realtime video manipulation as well 2d and 3d image generation. The examples of Jitter usage are numerous but here is one selected at random that demonstrates the use of shaders in OpenGL.

Having connectivity between Max/MSP and Jitter objects in the same patch opened the possibility to audio-driven video and video-driven audio and all points in-between. Here’s an example of reactive generative video made with Max/MSP/Jitter.

Pluggo

One obvious limitation of Max had been the inability to write plugins or applications that could be used with traditional DAWs. Although you could (and still can) create stand-alone apps that could be shared with non-Max users, writing VST or AU plugins with Max was not an option.

Pluggo device - Squirrel Parade

In the mid-2000s, Pluggo was introduced which included over 100 effects and instruments ported as VST, Audio Units, and RTAS devices. Although there were many novel and unusual devices in the collection, the idea was relatively short-lived, partly because creating your own devices remained a significant barrier for mid-level Max programmers.

Review of Pluggo by Paul Sellars in SOS back in 2005.

Max for Live

In 2009, the barrier limiting DAW integration was crushed by Ableton Live when Max for Live was introduced. Now, even beginner Max programmers could create a plugin that would work in a major DAW. Beyond that, you could even open the hood of prewritten devices that came with Ableton to modify or borrow existing patches to implement in your own work. It gave unprecedented access to signal flow and processing once the exclusive domain of code-based plugin developers. This portended the logical marriage between Ableton and Cycling ’74 mentioned above.

In Ableton Live 12, the company released its internal tools for developing and maintaining the Max devices that ship with Live. Learn more about Ableton’s in-house guidelines and resources here.Max for Live

Max for Live Devices

gen~

This group of objects introduced in 2011, operates in a dedicated window inside the Max environment. While users of Max will find commonality in terms of using patch cables and objects, gen~ compiles the software as if were a single object using efficient native binary code. While MSP objects operate on blocks of samples, gen~ objects can operate on every individual sample. “Since the entire patcher is compiled at once, many optimizations can be applied to simplify or make the generated code more performant”. In addition to improved efficiency, “…it is much easier to implement algorithms that require sample-accurate timing, including microsonic techniques such as granular and waveset synthesis” (source). The gen~ environment even allows actual code to be entered for the geeksters. Below is a demo of a patch I wrote inspired by the book, Generating Sound and Organizing Time (mentioned at the bottom of this article). Gen~ is used to trigger events to drive Spitfire Studio Solo Strings and generate multiple streams of CC data.

MIRA

Around 2013, MIRA was introduced which allowed for control of Max patches via iPad. Not all GUI objects are useable through the protocol, but you can still easily turn your iPad into a useable Max patch controller for live performance or improvisation.

Node for Max

The Node JavaScript engine was integrated with Max/MSP around 2018 with the introduction of Max 8. It allows for JavaScript code to used inside of Max but still requires 3rd party JavaScript editor. While not for everyone, if you already possess a facility with JavaScript this could be a powerful addition to your creative possibilities.

RNBO

Perhaps the one of biggest developments in recent years in Max is RNBO. In 2022 this collection of objects which, like gen~, operate in a unique patching window, allow for Max patches to be exported in a variety of formats including, VSTs, Audio Units, Max External, Raspberry Pi, C++, and Web Export. This idea decimates all the barriers that have existed for so long for Max implementation in other contexts. Although the VST and AU implementations lack visual sophistication in terms of GUI design, I predict that will eventually improve. The Web export option is particularly interesting to me and is one avenue I plan to fully explore. One obvious omission from the export list is an AAX option. Avid–big surprise–sigh….

Some cool web-based stuff made with RNBO here.

PACKAGES AND 3RD PARTY COLLECTIONS

Throughout the years, 3rd party developers have been busy creating all sorts of Max Externals and Abstractions for use in the Max environment. Quick side note for some definitions:

Max External – Objects accessible in a standard object window and are written in C++ code.
Max Abstraction – Objects that look like externals, but are created from Max External objects. Double-clicking on an Abstraction will expose the externals under the hood. Abstractions can be edited or bits and pieces can be copied and pasted into other patches. Externals are locked and the code is not accessible
Max Bpatcher – A Max Abstraction that loads with a pre-built UI

Below is a list of some of my favorite 3rd party objects/collections I’ve used over the years:

fiddle~ – a pitch detection object created by Miller Puckette (also check out sigmond~ and bonk~).

FFTease a great collection cross-synthesis and FFT-based externals created by Eric Lyon and Christopher Penrose.

RTC-Library The Realtime Composition library is a collection of extremely useful abstractions by Karlheinz Essl.

Jeff Kaiser patches work by the composer and technologist (full-disclosure Jeff is also a contributing author to Waveinformer) Check his jk.push 2 and upcoming version for Push 3 for interacting with this iconic controller. Also, if you own the Keith McMilan Softstep you need to have jk.softstep as well.

ICST Ambisonics – anyone working with multichannel audio should check out this versatile collection for specialization
.

CNMAT Externals – from the Center for New Music and Audio Technologies at UC Berkeley is a robust collection of amazing and useful externals.

BACH – externals focused on real-time computer-assisted composition and notation-based graphics by Andrea Agostini and Daniele Ghisi.

MaxCookbook Christopher Dobrian’s collection of programming examples available from the UC Irvine site is an enormous library of patches for educators and creators.

With the introduction of the Max Package Manager in 2015 with Max 7.1, many of these collections are available for download from within the Max environment while others you may have to hunt for. The Max Objects Database is another source of interesting Max resources. Although it has not been updated for a few years, you still may find some gems there.

Virtual-Sound patches these are abstractions and patches that accompany the awesome series of books called Electronic Music and Sound Design (vol. 1-3) by Alessandro Cipriani and Maurizio Giri.

Native Packages

There are a few packages that come preloaded with Max and are accessible from the left side menu in a patcher window.

BEAP this is an incredible collection of abstractions that are designed to emulate modular synthesis operations. These are bpatchers, which are abstractions with visible user interfaces (UIs). These patches were written by Matthew Davidson and Peter McCulloch at Berklee, hence the acronym, BEAP (Berklee Electro Acoustic Pedagogy).

Vizzie this is a collection of video-based bpatchers that will keep you busy for hours even if you’re not into video. You can get immediate visual effects without any knowledge of Jitter.

In addition to these collections, many hardware devices have dedicated Max/MSP implementation allowing you to interact with and program the device to control the external world or vice versa. These include:

Arduino and Raspberry Pi microprocessorsArduino micro-controller

Arduino Microprocessor

Raspberry Pi microcontoller

Raspberry Pi Microprocessor

Owl Pedals and Eurorack Modules by Rebel Technology

Owl Modular

Programmable Eurorack Module

Interactivity for Live Performance

Many have built custom devices for gestural control of Max over the years. Below is a video by Liza Seigido that demonstrates the basic clip-launching abilities of her custom-built Wireless Controller Glove powered by a hacked computer keyboard microcontroller and Max/MSP. The Max patch she constructed for her glove can also control software synths, DMX light fixtures, and trigger live audio effects. 

It is also extremely easy to implement game controllers in Max.

WHAT CAN YOU DO WITH Max/MSP/JITTER?

So if you’ve gotten this far you might be wondering–so what exactly can I do with Max? Here’s a shortlist:

  • Generate, record, and manipulate MIDI data to control internal and external synths and devices as well as virtual instruments and effects in any DAW.
  • Generate, manipulate, playback, and record audio
  • Interact with the external world by integrating sensor data (photocells, accelerometers, touch sensors, etc.)
  • Interact with the external world by controlling external devices (motors, lights, MIDI controllable hardware devices, etc.)
  • Interact with the external world using programmable microprocessors
  • Generate, manipulate, playback, and record video.
  • Generate, manipulate, playback, and record 2D and 3D animation
  • Create VST, AU, and Max for Live plugins
  • Create web-based applications
  • Generate C++ code using RNBO~
  • Create and interact with iOS control interfaces for Max patches using MIRA
  • Create interactive systems for live performance
  • Create live interactive video projections
  • Create all sorts of interactive and generative systems for multimedia installations and live performance
  • Integrate JavaScript in a Max patch
  • Control audio data at the individual sample level with gen~
  • If it has anything to do with audio or video you can probably do it in Max

BOOKS

Many great books to help you find your way in Max can be found here. Below are some of my favorites:

Electronic Music and Sound Design Vol. 1 – 3 by Alessandro Cipriani and Maurizio Giri

Electronic Music and Sound Design Vol 1-3

Step by Step: Adventures in Sequencing with Max/MSP by Gregory Taylor

Step by Step

Generating Sound and Organizing Time: Thinking with gen~ by Graham Wakefield & Gregory Taylor

Generating Sound and Organizing Time

CONCLUSIONS

This article was not intended as an introduction or tutorial, but as an overview of Max/MSP–to provide an historical context and outline the potential of this amazing programming environment. Anyone with the desire to create can be a Max programmer even if you’ve never written a line of code. And therein lies the beauty of this paradigm. That is not to say the learning curve isn’t steep, it is. But it is by no means insurmountable and the amount of tutorials available from Cycling ’74 and all over the internet makes access that much easier. Coupled with an enthusiastic and vibrant community of users the possibilities are limitless.

For more examples of my work in Max/MSP visit my YouTube Channel.

EXTRAS

Want to win a free version of Kontakt 7? Be one of the first 1000 followers to our Instagram Page for a chance to win a full version of Kontakt 7 from Native Instruments. More details here.

Assess your knowledge of essential audio concepts using our growing catalog of online Quizzes.
Explore more content available to Subscribers, Academic, and Pro Members on the Member Resources page.
Not a Member yet? Check the Member Benefits page for details. There are FREE, paid, and educational options.