To manipulate videos in real time we are going to use an advanced patching systems called Vizzie which is in turn built upon Jitter, the video module of Max (just so you know when people mention it).
Vizzie has a lot of building blocks that you can figure out only by playing around with them.
Open a new patcher and open the file browser. File>new file browser to drag an drop audio and video files from your library.
To add Vizzie object, right click and do something like this:
We are going to start with a simple patch:
PLAYR -> BRCOSR -> VIEWR
Programs in MAX are called patches. The metaphor based on analog patch synthesizers.
The patcher typically appears as a window with a lot of boxes with lines connecting them. The boxes are called objects and the lines are patch cords.
Each object represents a process.
The results of the process are passed along the patch cord to the next object.
At the end of the chain there’s generally an object that sends audio, video or data to the world.
Several patches can be open and working at the same time.
Patches can be saved, and then entered as an object in another patch.
If the lock button (command + e) is on you won’t be able to edit the patch but you’ll be able to control objects like buttons or toggles.
The name of the object determines what it does like the name of a function.
There are a few hundred objects included with Max, from simple math to complex functions.
Arguments (the number in this case) specify initial values for the object to work with.
Data flows from the top to the bottom, it comes into the object via the inlets, and results are put out the outlets.
Each inlet or outlet on an object has a specific meaning.
The description is be displayed on rollover, on click and in in the documentation panel.
Objects may have several arguments and the function may change according to the number of arguments. Like with functions in programming languages, the order is important. Check counter object.
Some objects have a special type of argument called attribute. An attribute is a internal variable with a name @prefixed to it. The order of the attribute doesn’t matter.
Data flowing between objects is called message.
Messages have types that are similar to the variable types: int, float: numbers symbol: a string list: similar to an array but containing values of different kinds separated by spaces bang: an instantaneous event that triggers an action
There’s a completely different type of data also transmitted through chords, they are the signals we’ll cover later.
Understanding bangs and messages
My first musical patch
You change the display of the number object to visualize the note in the inspector panel.
Let’s control the speed with a number object or a slider (or a fancy dial).
Let’s change the random range with a list message.
In Max you can perform all the operations you normally have with procedural programming but they may be executed non-linearly. It’s important to figure out when certain processes are activated and when certain messages are read and produced.
Message boxes and objects may contain tokens like $1, $2 etc (to $9).
They refer to the values in the inlets numbered from left to right.
User interface inputs
Max patches are often controlled by external devices using protocols like MIDI or OSC or by sensors from Arduino, cameras, kinect etc. However, you can create your own software interfaces in Max.
Since synthetic sounds are the root of Max, it’s good to know some basics.
Some object use a different kind of data called signal which is specific for audio. Signals can’t be mixed with normal messages, they even have a different cord color.
Here are some objects processing signals:
Pro-tip: the object scale is the equivalent of the map function in processing.
Let’s play with the interfaces elements and make some noise.
Max can manipulate sound samples as well.
The easy way is to use sfplay~ sending “open” messages and a trigger.
We are going to use an advanced object called groove~ that plays loops coupled with buffer~ that loads sound filed.
We’ll also need sig~ an object that converts numbers into signals.
Let’s try to control looping speed and looping points using the interface elements.
Max/MSP is a visual language originally created in the mid-80 as a tool for electronic music composition. Due to its modular nature, through the years it has been expanded into a flexible multimedia environment focused on real time Audio/Video manipulation.
Some things you can do with MAX/MSP/Jitter:
Pop(ish) Electronic Music
The English IDM duo Authechre creates music using Max/MSP (the music video is unrelated)