Jun 6, 2012 at 9:03pm


What is the difference between arguments, messages and attributes?

And why do the types (int, float, list, setloop) bear no resemblance to types in modern programming languages?

I am looking at the groove~ documentation at the moment and trying to work out if I can make it loop from the loop start without starting from the start of the sample.

I started to drill into the docs and found it all very confusing/inconsistent.

Or am I just stupid?

Jun 6, 2012 at 9:04pm

for instance in the right click object help for groove~ it shows a -1 message going into a sig~ and saying that it makes it go backwards.

But I tried this and it doesn’t make it go bacwards at all!

Jun 6, 2012 at 9:11pm

-1 into sig only seems to make it go backwards when you start it with startloop (found this by error and trial).

Jun 6, 2012 at 11:35pm

not sure I understand the problem. The number going into sig~ determines the playback speed not loop start/stop. I agree though the references can be confusing until you get the hang of them.

– Pasted Max Patch, click to expand. –
Jun 7, 2012 at 12:22am

An argument is some data entered into an object’s box after its name

A message is some data sent into an inlet

An attribute is a property set in the inspector.

General suggestions (from somebody who complains about this stuff all the time)

- The datatypes (afaik setloop is not a datatype, I think this is a message you send to groove~) are inherited from C/Lisp. They have not been updated since the dawn of Max to preserve compatibility. A number of “modern” languages still do strict static types, which is a pain in the ass as far as I’m concerned.

-Max is not a programming language. This fact still trips me up a lot more than I would like. The best way to think of it imo is as a bunch of DLLs and a thing to load them. The objects in and of themselves are “programs”. In this way of thinking,

-Messages are inputs to a running program
-Arguments are commandline parameters
-Attributes are settings in a config file loaded when the program starts

Think of an OS and daemons/services. A daemon/service sits in ram and waits for some input. If the input is what it expects it does what you want, if the input is not what it expects it does something other than you want.

Do not be fooled by the fact that you can change these on the fly. This simply means that max “reloads” this stuff quick enough that you don’t notice.

Check out the tutorials. In particular, until you understand message structure and message wildcards ($whatever) your progress will probably be slow.

Jun 7, 2012 at 11:19am

Check this

In the messages section there are things that seem to suggest the type of the message such as int and float (because sending these as literals surely does nothing useful).

But in this same messages section underneath the int and float we have setloop etc..

Which I would have thought are strings.

This is confusing – maybe it should have the heading – allowed values and leave off the int, float stuff.

And what does ‘anything’ mean in this context? You can put anything in there and it does something useful? Surely not.

Thanks for the distinction on the messages, arguments and attributes and also for the information on dlls versus language.

Are there any tutorials/documents on the design of the max/msp system?

For someone like me this would help – I didn’t know it wasn’t a programming language – messages make much more sense in this context!


Jun 7, 2012 at 4:28pm

This is straightforward. Int is a message consisting of nothing but an integer. Float is a message consisting of nothing but a float. setloop is a maessage consisting of the string “setloop” followed by two numbers.

Arguments to a message are anything following the message “name”. Again, find the tutorial that talks about $ in messages – it’s one of the early ones.

Make a message that says setloop $1 $2. Connect a message with two ints to the setloop message’s left inlet and a blank message’s right inlet to setloop’s outlet. Ctrl+click the two int message. See what happens?

Anything containing more than 1 item (string, int, float, whatever) qualifies as a list.

In the context of “groove~”, “anything” means that any symbol followed by 3 ints will be handled as a command to the transport. This enables patches to be more easily understood by allowing users to arbitrarily name cue points.

Jun 7, 2012 at 4:35pm

Yeah I know what ints and floats and lists are (in ‘normal’ programming) but in the context of the documentation what is the literal string ‘anything’ supposed to mean?

Why is the documentation structured like this?

Mixing up what seem to be data types with a type called ‘anything’ seems to be always contradictory.

Normally you say that the type of an input can be of some type to show the user of the object (dll, script, small program, applet call it what you will) that it will not accept a string in this place or that if you supply a float in the case of type int any decimals will be lost.

What the documentation seems to suggest to me as a professional computer programmer of more than 20 years is that if the type of the variable is ‘int’ then it surely cannot be ‘anything’!

Jun 7, 2012 at 4:51pm

Dude, seriously, they’re not datatypes. They’re inputs. Your email daemon does not recognize datatypes. It doesn’t care if your email address is composed of letters, numbers, or ancient egyptian heiroglyphics. It looks at the address, parses it to the best of its ability and tries to use it to deliver the message. If it fails, it says so. Same with your dns. Sure, it needs some help to go from a numerical ip to an alphanumerical url, but _even if it doesn’t get that help_ it doesn’t complain of a type miscast, it simply says “I couldn’t resolve this URL/IP” and continues to go about its business, waiting for a url or IP it actually can resolve.

The helpfile explains the inputs that groove~ will handle, and how it will handle them. In some cases, the inputs are consistent with generally-recognized datatypes. In others, they consist of a symbol (alphanumeric string), specified in the helpfile (such as setloop), followed by some other stuff (arguments). Therefore a valid setloop input may look like “setloop 1 2″.

Your programming experience is only mildly useful here. If you truly cannot progress without understanding this from a programming perspective, download the max sdk. It contains c code for everything. However, I would strongly urge you to go through the tutorials first.

Jun 7, 2012 at 5:00pm


… as a professional computer programmer of more than 20 years …

so you should have a look on the SDK ( and you will be able to understand well how type/arguments are managed ;-)

Jun 7, 2012 at 5:03pm

Yes, but that will take maybe longer :). IMO it’s probably better that he understand the Max nature first :).

Jun 7, 2012 at 5:13pm

I went through a lot of the tutorials – not difficult to understand and are quite useful.

All I am saying is that the documentation imo is confusing.

That’s my opinion – probably because of what I do – other people don’t seem to complain so much.

Again in my opinion I would prefer not to see words like int and float mixed with words like anything because of their historic significance for programmers.

Anyway, it seems I am very much in the minority – so I will shut up and just get lost.

Jun 7, 2012 at 5:24pm


i don’t know if you are in the minority ; and i am agree with most of the points in previous posts ; it seems that backward compatibility is a golden rule for cycling74 : so inconsistencies in syntax, names for objects (atoi, sprintf etc …) and symbols ($f1, $1, %, # …) ; a soup of good old K&R C with objective-C attributes … maybe it is a good choice : the work for a big change will be huge for a small company ; and it will have more complains than doing nothing (hey, it worked, it doesn’t work now !).

Jun 7, 2012 at 5:45pm

halsallian, Dont get me wrong, I have a lot of the same problems you do (strict static typing in particular) but I would disagree with you on this. If something in my computer is called a “tree” I will not complain because it is not brown with green leaves on it. Simply because some messages share names with datatypes does not mean that the entire system works in a datatype paradigm. Some of it does, and some of it doesn’t.

Jun 7, 2012 at 7:07pm

I think it’s depend on what “Max Object” that you’re working with.
and don’t thinking “int,float,list,etc..” was datatype but thinking all of them act like name of “function,method,property” then i think you get & clear all of them .

Jun 7, 2012 at 7:18pm

I know I said I was bowing out but if the meaning of the documentation depends on the object that’s a worry!

Jun 7, 2012 at 8:34pm

it does not, you’re likely to meet again that mysterious “anything” elsewhere in the documentation

Jun 7, 2012 at 8:46pm

Nope, the meanings of all the terms are consistent, even between messages and objects. An argument is always an argument. A property is always a property. A message is always a message.

“Anything” is a wildcard. Messages are never typed. Their contents are, but not the “containers”.

The more you cling to programming paradigms, the more painful the transition will be for you. This is not coding, this is sysadmin. Somewhere between connecting stuff together you maybe write some code, but mostly you simply make sure that everything is talking to each other correctly, changing config files, and routing data.

Jun 7, 2012 at 11:04pm

are you sure the meanings of all terms are consistent?

have I found perfection at last?

Jun 8, 2012 at 6:08am

Sure, only not between programming and Max :).

Jun 9, 2012 at 12:48pm

anything is like object,id ….. you can custom cast to whatever you want


You must be logged in to reply to this topic.