Mailing List AE-List@media-motion.tv ? Message #50927
From: D <dow.hanson@gmail.com>
Subject: Re: [AE] Inertial bounce expression keeps being disabled randomly...
Date: Wed, 25 Sep 2013 16:38:51 +0100
To: After Effects Mail List <AE-List@media-motion.tv>
Line 12, same line as the other version of the expression (which was line 10).


On 25 September 2013 16:34, Lloyd Alvarez <lists@aescripts.com> wrote:
What line number are you getting the error on?


On Wed, Sep 25, 2013 at 11:30 AM, D <dow.hanson@gmail.com> wrote:
Looks good. I'll try and persuade these guys to buy that script. Also, I've just had more expression failures but still get the divide by zero error when I try to paste your solution above. Is this a bug beyond the expression? 


On 25 September 2013 15:40, Lloyd Alvarez <lists@aescripts.com> wrote:
You can use this to batch update all the expressions in your project: http://aescripts.com/pt_expressedit/


On Wed, Sep 25, 2013 at 9:46 AM, D <dow.hanson@gmail.com> wrote:
Yes, was guessing that. Too many instances to replace with an upcoming deadline though so quick fixing with the aid of your script for now. 


On 25 September 2013 14:35, Lloyd Alvarez <lists@aescripts.com> wrote:
The expression will keep failing unless you account for that divide by zero error.


On Wed, Sep 25, 2013 at 9:23 AM, D <dow.hanson@gmail.com> wrote:
Thanks Lloyd. Funnily enough, I just found your script 'Activate Disabled Expressions'. I purged all memory then applied the script. Emptying the memory seems to allow them back on. Great script. Next time I get a mass disablement I'll try your solution.


On 25 September 2013 12:35, Lloyd Alvarez <lists@aescripts.com> wrote:
As the error suggests, it gets disabled because it tries to divide by zero.. Most probably because you are in negative time due to this: t = time - key(n).time;

You can protect against that in several ways but here's a quick cheeky way:

amp = .1;

freq = 2.0;

decay = 12.0;

n = 0;

if (numKeys > 0){ n = nearestKey(time).index;

if (key(n).time > time){ n--;

}} if (n == 0){ t = 0;

}else{ t = time - key(n).time;

} if (n > 0){ v = velocityAtTime(key(n).time - thisComp.frameDuration/10);

d= Math.exp(decay*t);
if ( d == 0 ) d= 0.0001;

 value + v*amp*Math.sin(freq*t*2*Math.PI)/d;

}else{value}


Cheers,

Lloyd

On Wednesday, September 25, 2013, D wrote:
...confusingly, the expression will sometimes continue to work on other layers in the same comp on both position and scale parameters whilst some get disabled. 


On 25 September 2013 10:40, D <dow.hanson@gmail.com> wrote:
Hi

The expression I'm using looks like this:

amp = .1;

freq = 2.0;

decay = 12.0;

n = 0;

if (numKeys > 0){ n = nearestKey(time).index;

if (key(n).time > time){ n--;

}} if (n == 0){ t = 0;

}else{ t = time - key(n).time;

} if (n > 0){ v = velocityAtTime(key(n).time - thisComp.frameDuration/10);

value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);

}else{value}


It works most of the time then will randomly get disabled across lots of layers and will not allow me to re-enable until I've restarted AE (v5.5). This is the error:


--


After Effects warning: invalid numeric result (divide by zero?)

Expression disabled.


Error occurred at line 10.

Comp: 'XXX'

Layer 17 ('XXX')

Property: 'Scale'


--


I have no real knowledge of how expression code works. I cut and paste when I use them. The project is 4 minutes long and the expression occurs across many comps and typically as the deadline approaches the error is now cropping up often. Any help appreciated.


Thanks.









 
Subscribe (FEED) Subscribe (DIGEST) Subscribe (INDEX) Unsubscribe Mail to ListMaster