Max/MSP, Max4Live, & RNBO (the thread)

No, not that I know of. The instruments can be broken out. But one of the FX and the sequencer are tied to the standalone and don’t send out midi.

1 Like

Question for the experienced Max patchers here:

I’m slowly but surely building up a nice library of tools / abstractions / subpatches, and am feeling the need to develop some personal “standards” (for lack of a better term) so that everything can play nicely together without me having to think about it too much (in other words, I’m trying to avoid the need to add scale objects every time I load one of my tools in to a subpatch).

Thinking first about modulation sources and sequencers, and the two obvious systems would be to have everything be a float between -1 and 1 (or 0 and 1 in the case of unipolar stuff), or to have everything be ints between 0 and 127 (because midi, slider default ranges, etc.). I think I’m leaning towards the former, since I use gen~ pretty heavily, and having modulation signals and audio signals be “the same” seems like a powerful thing, but I’m wondering if there are any tradeoffs that I’m not aware of. Any advice from those who have been patching for a while would be most welcome!

3 Likes

I guess using signal between -1 and 1 would be the best.
That said, to be sure, I would simply check how @stretta did this in Beap, as he probably came with the best solution.

1 Like

I’m committed to 0-1 for modulation and sequencing (scaling after) more than anything because I use ease and ease~ everywhere these days.

2 Likes

I had not come across ease and ease~ before and they look like exactly the sort of thing I’ll make heavy use of. Thanks!

3 Likes

i think that the best way is use a normalization algorithm by Gregory Taylor from some of his tutorial.
example via the link

it takes maximum value and automatically scales it to -1 1 range. havent really used it yet so dont know how to automatically scale in reverse, so you stay in range of -1 1 even when you lower the signal, but its still a very good start

2 Likes

For those who, like me, were surprised to find no ease or ease~ object when attempting to take a look in Max :

6 Likes

the need to develop some personal “standards”

in a way, this is what abstractions should always aim at.

i wrote some 5000 abstraction in the last 22 years - and i also deleted or updated 1000 of them later, mainly because these things you are talking about were missing in them.

simple example:
i have almost totally stopped creating MSP patches where half of its content is in data rate, only for the sake of saving CPU.
while it can surely make sense for a certain patch, it just doenst make sense anymore to have hundreds of audio patches at your hands where each one works differently, so you always have to create and later read notes about its accepted data type at inlets.

i´ve also stopped using hertz between objects. i use note numbers in floating point for data rate as well as for signals. it is the required or useful domain in 80% of the use cases.

but I’m wondering if there are any tradeoffs that I’m not aware of.

0-127 is almost useless except when the abstraction actually does somehting which is midi only.
my basic slider is multislider since it exists.

if you use a float control and you think it is important ot have a linear movement, just make it 128 or 256 pixel high and you are done.

i´d like to remember you of the existence or “prototypes”.
you dont need to adopt your patching style to GUI objects, you can do it the other way round.

and map ranges when needed. why do you want to avoid it? it is not like it would be difficult to use mapping and distortion and type changes here and there.

i´d like to add a few more, new aspects.

you might want to share your stuff. maybe later and maybe only with 3 people but you will share it.
so the paradigm your stuff has should be understandable for everyone, not only for you.
what comes to mind first in this context is to use a paradigm similar to the vanilla compiled objects.

dont underestimate helpfiles. you will create stuff but then you dont use it for 10 years.

dont underestimate object names and naming conventions.

guess what the difference between [110.something-i] and [110.something-f] is or what “thing” might be about when there is also a [thing-s] and a [thing-f].

guess what the extra tag in [name.po.mypatcher] means or why some things are called [110.fft.doesnotwork~]

repeat your patterns. [110.manygates] is 16 gates with individual controls and [110.multigate] is 16 gates with only a master control inlet.
when you know this, you now also know what [manytrigger] is about.

keep old versions, sketches and derivations. they will show you in 10 years how you came up with this longer expression or with those 20 gates connected to each other.

quite important when you want to update it or fix a bug.

if it is called [name.abstraction_OLD] it will not even be in the way when you keep it in the search path. plus you know what to look for.

a good abstraction is something which is generalized and should serve in many contexts.

weird stuff which is very specialized and unique should be treated as “project specific abstraction” and go elsewhere. i name mine after the project instead of using a nametag.

14 Likes

thanks for all the thoughtful responses!

i have almost totally stopped creating MSP patches where half of its content is in data rate, only for the sake of saving CPU

this has been my approach also. the benefits of doing everything at signal rate are numerous. i’ll deal with performance issues if and when i run in to them. it doesn’t seem likely on these fancy modern apple cpus!

i´ve also stopped using hertz between objects. i use note numbers in floating point for data rate as well as for signals

do you use midi note numbers? or some other scheme? I’m interested in alternative scales such as 19 and 31 EDO, as well as just intonation. i think for the latter, hertz may actually be the ideal system. i need to do some more thinking and research on this particular aspect

i´d like to remember you of the existence or “prototypes”.
you dont need to adopt your patching style to GUI objects, you can do it the other way round.

i was not aware of prototypes! this is a huge deal. thank you!

and map ranges when needed. why do you want to avoid it? it is not like it would be difficult to use mapping and distortion and type changes here and there.

of course, it’s not difficult, and of course it’s probably unavoidable in some situations. however, i have two rather distinct patching “modes” - i spend a lot of time building “tooling” or “modules”, and then i have a separate “creative” patching phase where i am using these modules and tools together to “compose” (for lack of a better term). when i’m in the creative flow, i am easily distracted, and so the less i have to think about scaling signals between modules, the more i can stay in the creative zone and focus on the music!

2 Likes

Very much appreciate this knowledge dump. I had imagined having Prototypes without knowing they existed and what they were called. So appreciate getting pointed to the name.

When do you create help files? For all abstractions? If only, some/significant ones, is it based on the complexity of the patch? Also can help files be created for things that are not Max packages?

I’m also curious to know about how you are organizing abstractions on disk. When do you just drop them in ~/Documents/Max /Library and when do you create a package (presuming you use packages)?

1 Like

this looks very handy. thanks for sharing!

edit: that said, i’m not sure i understand the use case for the leak parameter. it seems to allow you to clip the signal, but i’m not sure why you’d want that in such a patch. any ideas?

edit again: i’ve just realised that this is probably exactly how you can bring lower amplitude signals up to the -1 1 range

it doesn’t seem likely on these fancy modern apple cpus!

i mostly develop on a G4 and i still do it this way.

it is like you said: when you later think you need to save some CPU, you can still create a new one, but then only for this project.

of course it could also be a good idea to allow numbers AND signal as input, like many externals do. but this can get quite complicated - and wont save anything. :slight_smile:

i think for the latter, hertz may actually be the ideal system.

i use note numbers and i use them for arbitrary scales, too. if you pregenerate the scale anyway, you can also transform them to linear and use those.

the main reason is processes like transposition, LFO, or portamento.

60.33 + 12 = 72.33

now imagine that in hertz!


When do you create help files? For all abstractions?

i have quote complex and idiosyncratic abstractions - and i have a [gate] with reversed inputs.

the latter does not need one but the plan is to make them always.

the truth is i am often too lazy and then i have to pay the price 10 years later.

but it can be worse, sometimes old patches stop working or they are vanished.

If only, some/significant ones, is it based on the complexity of the patch?

a tone generator with inputs for note on and frequency wont really need a helpfile, even if it has complex code inside.

and the best rules when to make helpfiles are worthless when you dont obey your own rules, like i do. :frowning:

Also can help files be created for things that are not Max packages?

the helpfile for [patchy] is found by its name, so [patchy.maxhelp] will always open when you call it, even if it is a textfile.

i use max 4.x and when i move my stuff to max 8.x i will put the helpfiles in the same package for a number of reasons. but i dont think it is requried. you should also be able to use the main /help folder in the application bundle.

in MacOS9 i have my personal abstractions in a subfolder inside /externals. that is from day 5, when i didnt know the difference. :slight_smile:

(your personal abstractions == “vanilla content PLUS”, as opposed to my other patches which are in /patches)

(presuming you use packages)?

if i would use max 8.x for coding i would have 3 packages for MAX, MSP and JIT, each with their own helpfiles in the package.

what i often do i that i have the same helpfile for a whole group of objects.

for example for 20 different flavours of range mapping or the stereo and the mono version of a filter i will only have one.

there are several ways how to organize and call those multi-helpfiles. normally the alphabetically first one is the “original” and then i make copies for the other objects.

when i create the workflow or the GUI of software, i look at myself as a third person, the “user”. i do the same for helpfiles.

7 Likes

Would anyone happen to have a copy of Darwin Grosse’s IDM-5 patch? I’d like to take a look at it for an upcoming project.

Cheers!

I think this is it? idm-5.maxpat (106.0 KB)

3 Likes

Thanks!

I’m not in the studio until tomorrow but will dl it then.

Cheers again!

1 Like