Here is a possibility, not optimal since it calculates the whole every frame.
If your keys are not far apart and the param averageChangesPerSec isnt too big, it should be fine
startVal = 0;
endVal = 100; // max copies
t1 = numKeys>0 ? key(1).time : inPoint;
t2 = numKeys>1 ? key(2).time : outPoint;
averageChangesPerSec = 1.5;
seed1 = index+1000;
seed2 = index+2000;
a = 3; // controls time variations (close to 1 = small, bigger=more disparity)
b = 10; // controls value variations (same)
if (time<=t1){startVal;}
else if (t2<=time) {endVal;}
else{
numSteps =Math.ceil((t2-t1)*averageChangesPerSec);
t=0; times = [0];
v=0; values = [0];
for (n=1; n<=numSteps; n++){seedRandom(t+seed1, true);t+=random(1,a); times[n]=t; seedRandom(t+seed2, true);v+=random(1,b); values[n]=v;};
t = (time-t1)/(t2-t1) * t;
x = (endVal-startVal) / v;
a=0; b=numSteps; while(b-a>1){j=Math.floor((a+b)*0.5); if (times[j]<=t){a=j;} else{b=j;};};
startVal + x*linear(t, times[a], times[b], values[a], values[b]);
};
Xavier