ADOBE AFTER EFFECTS: Forum Expressions Tutorials Creative Cloud

# variable minimum value

FAQ   •   VIEW ALL
 variable minimum value on Mar 11, 2008 at 2:55:23 pm

Hi every body,

I have a good knowledge of AF but none of expressions. :(

My problem is needed to know how to assign a minimum value to a variable (I think). I am using "Jerzy Drozda Jr : Using Expressions to Create a Volume Meter" (witch is amazing btw) I have modified slightly to get a speaker cone to scale up and down with the music. It works fine but I donâ€™t what the level to drop below 15% (I want it to move between 15% and 100%) if you know what I mean. so the speaker is still visible.

Any ideas??? I would love it if you guy could help me,

Thanks Paul

 Re: variable minimum valueon Mar 11, 2008 at 3:17:26 pm

I'm not familiar with the specifics of your expression. If you post what you have, then others can give you the right answer for your specific expression. However, I can tell you that you'll probably want to use the `linear()` function somewhere.

`linear()` works this way:

``` linear(x, inputMin, inputMax, outputMin, outputMax); ```

As 'x' ranges from 'inputMin' to 'inputMax' the value returned by `linear()` will range from 'outputMin' to 'outputMax.'

So, for example:

`linear(x, -48, 0, 15, 100)`

When 'x' is equal to -48 the above linear function would return 15, when 'x' is equal to 0 the above linear function would return 100. The steps in between are interpolated linearly, so when 'x' is equal to -24 (half way between -48 and 0) the returned value would be 57.5 (half way between 15 and 100).

Darby Edelen
Designer
Left Coast Digital
Santa Cruz, CA

 Re: variable minimum valueon Mar 11, 2008 at 3:52:56 pm

Thanks for that its put me on the right lines now,

This expression is connected to my key frames from the audio i am using.

thisFrame = timeToFrames(t = time + thisComp.displayStartTime, fps = 1.0 / thisComp.frameDuration, isDuration = false);
compDuration = timeToFrames(thisComp.duration, fps = 1.0 / thisComp.frameDuration, isDuration = false);

max = 0;

for(i = 1; i < compDuration; i++){
ftt = framesToTime(i, fps = 1.0 / thisComp.frameDuration);
sld = effect("Both Channels")("Slider");
val = sld.valueAtTime(ftt);
if(val > max) max = val;
}

linear(sld, 0, max, 0, 100);

then this is my layer that scales

vol = comp("music 2").layer("Audio Amplitude").effect("Final")("Slider");

mlp = thisComp.layer("Multiply").effect("Slider Control")("Slider") / 1000;
[vol, vol, vol * (mlp + 1)]

I know I have one a linear function already but that dose something ells, I want variable 'vol' to have the full range but not do anything one it goes be low 15 so I am guessing something like this

linear(vol, 0, 100, 15, 100);

Maybe? Would this have the full range input and limit the output from 15 to 100?

cheers

Paul

 Re: variable minimum valueon Mar 11, 2008 at 6:07:30 pm

[Paul Evans] "Maybe? Would this have the full range input and limit the output from 15 to 100? "

Yes, but it would scale the range 0-100 into the range 15-100. If you just want any value below 15 to be chopped off at 15 then you could use:

``` Math.max(vol, 15); ```

Which would return either 'vol' or 15, whichever has a higher value.

Darby Edelen
Designer
Left Coast Digital
Santa Cruz, CA

 Re: variable minimum valueon Oct 14, 2009 at 7:23:25 am

Thanks. You saved my day.

 Re: variable minimum valueon Mar 11, 2008 at 6:04:09 pm

cheers for that it worked like a charm :)

Paul

 Re: variable minimum valueon Apr 23, 2008 at 10:39:23 pm

I know you have this solved already, but I thought I'd post this for others who happen by.

Since the data you're working with is from 0 to 100, if you use Math.max(value, 15), you're losing 15% of your range.

Another way to handle it would be to multiply your value by 0.85, then add 15:
scalefactor = (value * 0.85) + 15;

This would scale your range of data to your range of motion, and guarantee that your minimum would be at 15 (since at a value of zero, it comes out to 0 + 15)

I hope someone finds that useful.