Actually Guys, i jumped the gun there – the actual corrected expression from dan should look like this:
it stops the weird behaviour at keyframes
delay = .1;
tDelay = delay*textIndex;
n = 0;
if (numKeys > 0){
n = nearestKey(time-tDelay).index;
if (key(n).time > time) n--;
}
if (n == 0){
t = 0;
}else{
t = time - key(n).time - tDelay;
}
if (n > 0){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
amp = .05;
freq = 2;
decay = 2.0;
valueAtTime(time-tDelay) + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{
valueAtTime(time-tDelay);
}