Forums > MaxMSP

[pitch] object for Max

Apr 04 2012 | 7:02 pm

Hi Guys,

First post, long time Pd user. Using Max for some teaching. I created an abstraction based on the [pitch] object available in Pd by Olaf Matthes, which organises incoming MIDI note numbers into pitch-class, pitch-class distance and register. So, I thought I’d share:

Rather than using the two [if] statements, I would like to know how to program this function in one [expr]-based statement.



  1. pitch.maxhelp
Apr 04 2012 | 7:16 pm

with expr: [expr min(max($i1,127),0)]

with clip: [clip 0 127]

choose one.

i have chosen -110.

Apr 04 2012 | 7:18 pm

weird. in the above post i first forgot the commas in the formula – after sending it to the forum the zero had vanished – the forum does not like "backslash 0"

Apr 04 2012 | 7:25 pm

send "$0" must read "send #0" in max or you cant instantiate the abstraction.

Apr 04 2012 | 10:08 pm

Good to know. Thanks Roman. I have updated the patch. So, [expr] cannot take an [if] statement in Max? and [if] cannot take multiple/nested instances?



Apr 05 2012 | 9:01 am

Hi Ricky and welcome to the forum

Sometimes we WANT our objects to do stuff, which they won’t and it’s frustrating to have Max tell you "sorry, won’t work dood"; in my experience the [if] object can only have ‘binary’ output

if apples or bananas then pig else goat

but not

if apples then pigs, elseif bananas then goats.

I’m almost 99.9% sure [if] in Max doesn’t do elseif.

But an [expr] ninja will surface soon with a solution; Roman’s [clip] is simplest.


Apr 05 2012 | 2:36 pm

Cheers, good sir. Yes, I have gathered all of the points above through "enactive research." Actually, using min and max within inspector is the easiest solution for that particular statement, but I would like to get [expr] working beyond what I have already implemented (if possible).

I should add, when I enter a backslash into an [expr] object in Max 6, it disappears completely (much like like Roman’s issue with this forum).

Nice to meet your virtual Max-based acquaintance. Coffee soon?


Apr 05 2012 | 6:48 pm

Try [zmap 0 127 0 127] too;

QUB coffee on Monday perhaps

Apr 06 2012 | 7:21 pm

Sure. I will drop you a mail.


Apr 07 2012 | 1:26 am

"So, [expr] cannot take an [if] statement in Max? and [if] cannot take multiple/nested instances?"


there is absolutely no if in [expr] (dont tell me there is one in pd!) and you cannot have nested outputs with [if].

the only thing what works is using multiple conditions on the input of if:

[if $i1>100 && ($i1+5)%12>$i2 then bang]

what you of course can do in expr is using boolean/comparison operators to sum up conditions.

so instead of

[expr min(max($i1,127),0)]

you could write

[expr ($i1>=0) && ($i1< =127)] ... and control a [gate] with it.


Apr 07 2012 | 3:20 pm

"(dont tell me there is one in pd!) "

Yes, there is! :)

Thanks for the clarification, Roman.


Apr 07 2012 | 4:36 pm

so i learned something new about PD, thats fine. i wish there would be some kind of expr overview or tutorial, i have gathered everything by trial error and sometimes i think i still miss something.

btw, using min and max to the numberbox is the worst you can do. GUI objects have nothing to do inside abstractions, they need to much CPU.

Apr 07 2012 | 5:03 pm

Yep, sure. GUI objects are expensive no matter what the environment. I said it was the easiest solution, not the best solution ;) Thanks again for your clarification.

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

Forums > MaxMSP