Maybe like this:
freq = 1;
loopTime = 3;
mid = (key(1).time + key(numKeys).time)/2;
t = time % loopTime;
wiggle1 = wiggle(freq, mid, 1, 0.5, t)-valueAtTime(t);
wiggle2 = wiggle(freq, mid, 1, 0.5, t - loopTime)-valueAtTime(t-loopTime);
w = linear(t, 0, loopTime, wiggle1, wiggle2);
w + mid