MAX/MSP/Jitter: basic concepts
A workshop, January 19, 2012
Max/MSP/Jitter is a “do-anything” construction kit that uses numbers as building blocks to do many different things: numbers that control things, numbers that represent sounds, numbers that represent video. It has a rich array of input-output methods, from keyboard and mouse input to MIDI messages to controllers like the Arduino microcontroller, and even video itself, once broken down into manageable numbers.
There are a number of excellent resources available for learning MAX and solving problems while programming. These are:
Documentation; reference pages
"back" button functionality
esp the "object" box in the lower right corner
Built-in help features: Clue window, object auto-fill and “=” lists
Max Object Thesaurus
Website: Cycling74.com - community forums etc.
Sharing with others ("save as text"; storing/mailing .zip files).
Elements and principles
The special province of MAX is real time, indeterminate activity – i.e. it is not a time based player/recorder like Pro Tools or an editor like Final Cut, or an editing-&-rendering program like Photoshop, though those functions can be emulated in MAX. (NB - sequencing events is now done in MAX-world by combining it with Ableton Live, which is used as a sequence based front end for max via the app Max4Live.
Basic building blocks of MAX
Numbers (float or integer), MAX objects, bangs, symbols (i.e. words and text that do something), & comments (which do nothing).
Bangs: the GO button
Objects: many different objects and types
Connections that may be drawn between all these things in the screen interface. Connections for audio and video are distinguished by color.
Modes of operation
Edit mode yes/no; presentation mode yes/no.
Streaming numbers, in and out
Simple example: typing on a keyboard generates numbers (ASCII codes).
Each MIDI note is a list of numbers for pitch, velocity, MIDI channel.
control items like program change, etc.
streaming controller data
Arduino and microcontrollers – see arduino.cc
sensors, etc. flow, pressure, switches, bend/twist
“Symbols” in MAX are bits of text that can have meaning in terms of determining what the program does; either as commands and arguments, or labels, or names of files, etc. They can be single words or codes, lists, 2-dimensional tables, or larger arrays.
("arguments" are messages entered directly into the object box)
assembling messages using set, prepend, append; sending them places with route objects
Lists: sets of associated numbers
collect collects a stream of numbers into a non-temporal, but sequential list: a one-dimensional array
Objects seq and mtr collect and play back performed MIDI data in real time (i.e. timed the way it was timed when it went in).
Table storage and manipulation: more than one-dimensional data
table and itable collect pairs of integers into editable tables
coll object collects items and lists of anything – including symbols – into a table
MSP: streaming numbers
Signals are fast streaming numbers (44.1K per sec and up). Max/MSP objects can do numerical operations on streams of numbers.
MSP features special objects but also some of the same types as regular MAX objects: add, subtract; multiplication by ±1.0 = a volume control, etc.
Things Max can do with streams of audio data: generate, scale, record/playback, modify in RT (filter, compress, etc.), modify in time (delay, stretching pitch &/or time), and analyze
Special functions with readymade objects: FFT, compression/limiting, granulation, filters
Jitter basics: fun with matrices
Video is matrices: multidimensional arrays of data. Matrix math.
Video is a series of 3 dimensional matrices: 640 x 480-pixel tables of R, G, B, and alpha data, sequenced at a rate of 12-60 fps.
Jitter data matrices: jit.cellblock
Helpful and confusing things.
communicating with the program
Hiding and showing things
Creating Hints and Clues
Messages to MAX: show/hide menubar, cursor, etc.
data in leftmost inlet initiates action, while data in other inlets are stored; bang in left inlet also initiates; right to left activation
often it will take two or more objects to get a technique to work.
special objects: loadbang and loadmess
commas in message boxes vs commas in coll lists
super useful swiss army knife objects
expr and expr~: use regular expression syntax to build equations
zl process streaming lists
poly~ spawn multiple instances of a patcher