[PD] help cloning max's scale

Joel Matthys jwmatthys at gmail.com
Sat Jun 20 03:55:45 CEST 2015


I just don't see the value of trying to make it compatible with broken 
code in Max.

Joel

On 06/19/2015 08:47 PM, Alexandre Torres Porres wrote:
> 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 
> <mailto: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  <mailto: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/42810c00/attachment-0001.html>


More information about the Pd-list mailing list