[PD] help cloning max's scale

Alexandre Torres Porres porres at gmail.com
Sat Jun 20 03:47:26 CEST 2015


yeah, I see all that, but the problem is trying to clone it as it is in Max
for the sake of compatibility.

I wouldn't say that the classic mode is "wrong", it may be not good for the
purpose, but it's an arbitrary mathematical formula, so it is what it is.

The problem is that I'm not being able to get the result the object spits
out with the formula given in the reference.

So my question is just making it sure that the given formula is wrong, and
that it doesn't give what the object actually does.

moreover, the idea is to keep compatibility, at first, with Max5. In Max7
the scale object will still give the same results (as default, by the way),
so even if it was for the sake of making it compatible with Max7, we'd
still need to make it work. But the thing is that the new "not classic"
mode was introduced only in Max6. So, for the actual purpose, we're only
caring about the classic mode compatibility.

did you check if the formula in the reference is actually wrong, in the
sense it won't give the results given by the object? Were you able to spot
a parenthesis out of place or something that, if changed, would give the
expected result?

thanks

cheers

2015-06-19 22:25 GMT-03:00 Joel Matthys <jwmatthys at gmail.com>:

>  You're using the [scale] formula from @classic_mode in Max7, which exists
> for compatibility with IRCAM, but it's clearly wrong. (There's no way
> mapping 13.3 from 0-127 to -1 to 1 should result in something so close to
> -1. Just try a few different exponents and you'll see that there's a bug in
> the Max code. And there are lots of bug reports out there about it.)
>
> That's why they introduced an alternate mode for [scale] in Max, which can
> be switch in the Inspector.
>
> For non-classic (modern) mode, the documentation gives you this equation:
>
> ((x-in_low)/(in_high-in_low) == 0) ? out_low :
> (((x-in_low)/(in_high-in_low)) > 0) ? (out_low + (out_high-out_low) *
> ((x-in_low)/(in_high-in_low))^exp) : ( out_low + (out_high-out_low) *
> -((((-x+in_low)/(in_high-in_low)))^(exp)))
>
> Translated to expr as:
>
> [expr if ((($f1-in_low)/(in_high-in_low)==0), out_low, if
> ((($f1-in_low)/(in_high-in_low)>0),
> out_low+(out_high-out_low)*pow(($f1-in_low)/(in_high-in_low), power),
> out_low+(out_high-out_low)*-1*pow((-1*$f1+in_low)/(in_high-in_low),
> power)))]
>
> Switch off classic mode in the inspector in Max7, and you get the same
> result as expr above, the very sensible -0.817072.
>
> Joel
>
>
> On 06/19/2015 05:39 PM, Alexandre Torres Porres wrote:
>
>  Howdy, so I'm cloning the scale object from Max, to make an object and
> include in the cyclone library. It converts range input (low_in / high_in)
> to a range output (low_out / high_out). It has a logarithmic curve for
> rescaling according to a fifth argument/inlet. I did copy into expr the
> formula described in the reference of Max6/7 (max's 5 was just wrong,
> copied from [linedrive]) - well, it didn't work! Would anyone know if I'm
> doing something wrong or if the reference is not telling the truth?
>
> The formula, as described in the reference is: (out_low + (out_high-out_low)
> * ( (out_high - out_low) * exp(-1 * (in_high-in_low) * log(power)) * exp(x
> * log(power)) ))
>
>
>  Here's my patch with that formula into expr. The output with the
> parameters I have should be -0.997347 - as that's the output I get in Max.
> But instead, it's giving -0.994694...
>
>
>  thanks
>
>
>
>
>  =================
>
>
>  #N canvas 24 23 488 340 10;
>
> #X obj 215 154 v out_low;
>
> #X obj 233 132 v out_high;
>
> #X obj 288 110 v power;
>
> #X obj 152 130 v in_high;
>
> #X obj 115 153 v in_low;
>
> #X floatatom 58 248 0 0 0 0 - - -;
>
> #X obj 58 197 expr (out_low + (out_high-out_low) * ( (out_high - out_low)
>
> * exp(-1*(in_high-in_low)*log(power)) * exp($f1*log(power)) ));
>
> #X msg 115 102 0;
>
> #X msg 152 102 127;
>
> #X msg 215 99 -1;
>
> #X msg 249 97 1;
>
> #X msg 288 86 1.06;
>
> #X obj 90 31 loadbang;
>
> #X obj 90 60 t b b;
>
> #X msg 58 107 13.3;
>
> #X connect 6 0 5 0;
>
> #X connect 7 0 4 0;
>
> #X connect 8 0 3 0;
>
> #X connect 9 0 0 0;
>
> #X connect 10 0 1 0;
>
> #X connect 11 0 2 0;
>
> #X connect 12 0 13 0;
>
> #X connect 13 0 14 0;
>
> #X connect 13 1 11 0;
>
> #X connect 13 1 10 0;
>
> #X connect 13 1 9 0;
>
> #X connect 13 1 8 0;
>
> #X connect 13 1 7 0;
>
> #X connect 14 0 6 0;
>
>
>
> _______________________________________________Pd-list at lists.iem.at mailing list
> UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20150619/128236a5/attachment.html>


More information about the Pd-list mailing list