10 Random Tips & Tricks for Max/MSP

10 Random Tricks i’ve found that are useful for saving time, troubleshooting or when generally trying to use/understand Max/MSP.

1. Hold ALT whilst dragging a box over cables with the mouse to select them all at once. Holding ALT and clicking an object also duplicates it.

2. SHIFT-CMD-Y aligns selected cables to dodge nearby objects.

3. Panels. When creating large patches with multiple sections use different panels to frame the various sections and then add the panels to the background layer and lock it (ALT-CMD-L) so that they cannot be moved.

4. Comment EVERYTHING. Ok, not EVERYTHING, but a few succinct comments in relevant places can help massively when trying to remember how to operate a patch you made some time ago.

5. Learn the keyboard shortcuts. (n) creates a new object, (i) creates an integer box, (f) creates a float box, CMD-E locks and unlocks the patch, CMD-Y for standard object/cable aligning, SHIFT-CMD-E encapsulates all selected objects in a sub-patcher, CMD-K hides the selected object/cable on locking the patch.

6. Know the difference between ints and floats. Although its only a marginal computational difference in large patches you’ll need all the power you can get. An integer (int, i) refers to whole numbers (100, 12, 5 etc.) whilst a float (f) refers to decimal numbers (2.1, 400.819 etc.). Using floats costs more in processing power so only use them when you need more precision than integers afford.

PS. Putting a ‘.’ after a number in Max automatically makes it a float. This is useful when you need to tell an object what type of data to expect eg. (scale 0. 1. 0 127) tells the scale to expect floating point numbers between 0 and 1 and to scale them to the nearest integer values between 0 and 127.

7. Variables and $$$$’s. The dollar symbol in Max refers to a variable, a number or symbol which will change. Loop $1, which is often needed when using the Groove~ object, means take the first incoming number as the loop argument. Multiple $’s work in exactly the same way but allow you to dismantle lists. ($1. $2) when used with the bline object for example would allow you to send pairs of numbers to the object for its arguments. In this case the first variable represents the line target whilst the second variable is how many events (bangs) to observe before reaching the target.

8. Experiencing latency or lag? This can be down to a few things. Firstly visual objects such as: meters, float/int boxes and bangs use more computing power to present and in many cases they can be removed and the patch will still operate fine. Secondly audio latency may be down to a buffer size that is too small. FInally if you still have problems then try splitting your patches into various smaller ones. The Send~ and Receive~ objects work if you need to send information to and from separate patches.

9. The trigger object is brilliant for scheduling various processes. An example being if you have built a patch that goes through a series of procedures every time a bang is hit however every cycle the objects need to be initialised. The trigger object can be given various arguments for this purpose. ( T 0 Clear Erase ) would trigger the output of the messages (from right to left remember): Erase Clear 0 which could be connected to a counter, a coll and a text file for example. The trigger object is also useful for cutting down on the number of actual Bang objects you use which will keep the patch computationally efficient.

10. The ‘if’ object can save time as you can, more or less, write things in plain English rather than computer speak. ( If $i1 == 0 then Out1 ‘Zero’ else Out2 ‘Not Zero’ ). Translated: If the incoming integer is 0 then send the message ‘Zero’ out of output 1, otherwise send the message ‘Not Zero’ out of output 2.

Let me know if this was helpful and i’ll do more tips and tricks posts when i can think of things.