Forums > MaxMSP

[route list] fail?

March 16, 2013 | 4:01 pm

Shouldnt this come out of the left outlet?

Many thanks in advance


– Pasted Max Patch, click to expand. –

March 16, 2013 | 4:13 pm

Technically, this is a message with arguments. I’m not sure if this worked the way you expect in the past, but it doesn’t seem to in Max 6.

March 16, 2013 | 4:15 pm

*facepalm* why, c74, why?

Say something in the helpfile, at least

March 16, 2013 | 4:55 pm

This is covered in this thread:

It probably would help out if basic tutorial 3, which states:
"A combination of numbers and text is called a list; the list is a mechanism for keeping data together into a single message that can be send via patchcords to other objects."

was a little clearer that it must start with a number (or the symbol ‘list’)to be a real list….


March 16, 2013 | 5:10 pm

Not a bad idea, Matt. I guess someone thought that it was too obvious. I’ll make Basic Tutorial 3 more obvious. :-)

March 16, 2013 | 6:03 pm

Well, she do say "basic" =P

March 16, 2013 | 7:53 pm

mzed: isn´t 1 2 3 4 5 also just a number with 4 arguments? thats what [printit] says, at least.

if his example does not work in max 6 i would call this inconsistency, if not more.

March 16, 2013 | 8:22 pm

Roman; they ay in another thread that a list must start with a number. Free beer to anybody who finds that in any documentation.

March 16, 2013 | 10:57 pm

well i know that we dont ‘_call it a "list" if it begins with a symbol, but why did it work in previous version of max to treat those as lists? :)

March 17, 2013 | 12:24 am

Well, I didn’t. My point is, surely it is documented somewhere?

March 17, 2013 | 2:32 am

My printint calls 1 2 3 4 a list:

printit Version 0.4, by Matt Wright.
Copyright (c) 2000-06 Regents of the University of California. All rights reserved.
printit: received LIST with 4 argument(s):

I didn’t make these rules, but that’s how it is.

March 17, 2013 | 12:23 pm

@roman what is different from previous version? I got the same result in Max 4/5/6 here:

#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P newex 229 173 68 196617 loadmess set;
#P window linecount 0;
#P message 135 212 52 196617;
#P message 69 213 52 196617;
#P window linecount 1;
#P newex 135 166 62 196617 prepend set;
#P newex 69 166 62 196617 prepend set;
#P newex 69 137 142 196617 route list 1;
#P message 69 94 52 196617 1 2 3 4 5;
#P connect 6 0 4 0;
#P connect 6 0 5 0;
#P connect 3 0 5 0;
#P connect 2 0 4 0;
#P connect 1 1 3 0;
#P connect 1 0 2 0;
#P connect 0 0 1 0;
#P window clipboard copycount 7;

March 17, 2013 | 12:25 pm


afaik, [route list] never let a generic message (a b c d) through its left outlet. It surely hasn’t since Max 4.6.
[trigger] is a different story – [t l] will let _anything through (be it an int, a float, a list or a generic message) – hence a lot of confusion…

… my humble opinion is that all this message type-checking stuff is one of the most obsolete and convoluted parts of Max. It made things faster on the slow machines of the days of old, but if Max was created now I’m pretty sure it wouldn’t exist. But of course throwing it away would mean breaking the compatibility with 20+ years of patches made by people around the world, and this would definitely be a very bad idea…

my 2 cents

March 17, 2013 | 12:51 pm

To my understanding the trigger object is much more like type conversion; [t l] will convert the input to the type list—whatever that means. But I feel the same. Only the ministry of silly walks can explain this:

– Pasted Max Patch, click to expand. –

>this would definitely be a very bad idea…

Maybe at some point the price of retaining backward compatibility becomes too high. Maybe that point is near…
I wouldn’t mind.

March 17, 2013 | 1:20 pm

In fact, thinking that [t l] converts everything to a list is not accurate… it really outputs everything as it was received.
Look at this:

– Pasted Max Patch, click to expand. –

hope this sheds some light…

March 17, 2013 | 1:33 pm

ok guys, i might have been wrong, as it seems i only had luck the last 10 years by not running into a [route list] issue.

but like andrea says, trigger handles it that way. zl does, too.

so [route] and [select] seem to be the exceptions, and most other objects treat quasi-lists "wrong"? interesting idea. :)

what i find even more strange is that there is no [list symbol] (at least in max v4), which means that you need the rightmost outlet to find symbols. so on the one hand [route] is anal about what is technically a list and what not – but on the other hand it can not even filter all types of messages.


March 17, 2013 | 1:51 pm

@andrea : damn… so a list really has to begin with a number to be a list ?… how broken :/
here’s what printit says of the 3 message boxes in your patch :

printit Version 0.4, by Matt Wright.
Copyright (c) 2000-06 Regents of the University of California. All rights reserved.
printit: received an int: 1
printit: received LIST with 4 argument(s):
SYMBOL "c" (0x6a7d60, s_thing 0×0)
SYMBOL "d" (0x6a7d68, s_thing 0×0)
printit: received MESSAGE "a" (0x6a7d50, s_thing 0×0) with 3 argument(s):
SYMBOL "b" (0x6a7d58, s_thing 0×0)
SYMBOL "c" (0x6a7d60, s_thing 0×0)
SYMBOL "d" (0x6a7d68, s_thing 0×0)

March 17, 2013 | 1:54 pm

so i tried this :

– Pasted Max Patch, click to expand. –

obviously, the output is not of type "message"

March 17, 2013 | 2:19 pm

Certainly it is possible to select by negation:

– Pasted Max Patch, click to expand. –

March 17, 2013 | 3:32 pm
– Pasted Max Patch, click to expand. –

March 17, 2013 | 4:03 pm

Well, here is what happens under the hood: Max messages are always composed by a symbol, followed or not by other things – integers, floats or other symbols. This first symbol is called "message selector". In some cases the message selector is explicit: if you send the message A B C, then
A is the message selector, B C are the arguments.
In other cases, the message selector is hidden, and automatically chosen for you by Max. In particular, an integer’s message selector is always int; a float’s is always float. This means that whenever you send around a number (say, 74) what actually travels through your patch cords is int 74. Only, you don’t usually see the "int" part.
Now, if your message is made up of several elements there are two cases:
- the first item is a symbol (as in the A B C example above). In this case, the message selector is A, and all that follows are the arguments.
- the first item is a number (as in 1 2 3, but also in 1 B C). In this case we need a message selector, and so Max puts one for us: this message selector is "list".
Most objects (e.g. zl) hide these gimmicks from the user. So, [zl len] of A B C and [zl len] of 1 2 3 will both be 3, regardless of 1 2 3 actually being list 1 2 3.
The route object is a different story: it really lets you work with message selectors. So [route foo] means "output everything that has foo as its message selector", while [route list] means "output everything that has list as its message selector". Then, new appropriate message selectors are added to the output if needed.
[A B C]->[route A] will recognize the message selector A. So the stuff to output is B C: message selector B followed by the argument C.
[A 2 3]->[route A] will recognize the message selector A. So the stuff to output is 2 3: message selector list followed by the arguments 2 3.
[1 2 3]->[route list] will recognize the "hidden" message selector list. The stuff to output is 1 2 3, which again requires the message selector list.

There are also some things that you technically can do to make Max unhappy – sometimes triggering error messages, sometimes not, but potentially disrupting the good operation of the objects that wil receive them:

– Pasted Max Patch, click to expand. –

… does it all make sense?!?

March 18, 2013 | 3:34 pm

@andrea : thanks, indeed it does and it’s clear now. In short, a message must always begin with a symbol in Max, and that symbol has always to be a message type identifier.

March 18, 2013 | 5:06 pm

If only there was some files that were distributed with max, that were meant to contain all this fascinating information =P.

March 18, 2013 | 5:14 pm

There’s no reason in the universe that you couldn’t add something about this to the Wiki. Knock yourself out.

March 18, 2013 | 7:05 pm

the maxmspish conjunctive: someone should write about it in the wiki.

Viewing 25 posts - 1 through 25 (of 25 total)