效果图
将线性关键帧积分器应用于 wiggle() 的时间属性(而不是频率属性),生成平滑的频率斜坡。
控制摆动(wiggle)速度
当试图控制 wiggle() 函数的速度(实际上是频率)时,您将面临与本文前面示例完全相同的挑战。函数具有内置的频率和振幅参数。通常,您只需将这些参数设置为所需的值,然后保持它们不变。例如,你可以为旋转属性设置一个简单的每秒 5 次摆动,振幅为 10 ,如下所示:
freq = 5;
amp = 10;
wiggle(freq,amp)
这将给你如下图所示的摆动波形。
这是由静态频率参数产生的摆动波形
不过,您迟早会放弃将这些参数设置为动画的诱惑。事实证明,振幅参数的动画化没有任何问题。然而,频率参数是一个熟悉的故事,却有一个不幸的结局(AEJoy —— 表达式之速度和频率控制(一)【JS】)。到目前为止,你可能并不惊讶于将频率参数直接与滑块绑定的方法存在致命缺陷:
freq = effect("Slider Control")("Slider");
amp = 10;
wiggle(freq,amp)
在下图中,您可以看到结果。滑块控件(粉色线)的关键帧坡道从 0 到 5 ,接着保持在 5 ,然后沿坡道下降回到 0 。你会希望摆动频率会跟随,但不幸的是,你得到了下面看到的丑陋的结果。
将频率参数直接绑定到滑块控件会得到预期的不可接受的结果
你的下一个本能反应可能是将我们的线性关键帧积分表达式应用到频率参数上:
freq = effect("Slider Control")("Slider");
amp = 10;
n = freq.numKeys;
if (n > 0 && freq.key(1).time < time){
accum = freq.key(1).value*(freq.key(1).time - inPoint);
for (i = 2; i <= n; i++){
if (freq.key(i).time > time)
break;
k1 = freq.key(i-1);
k2 = freq.key(i);
accum += (k1.value + k2.value)*(k2.time - k1.time)/2;
}
/// @note 累加 “梯形面积” —— 上下底为不同关键帧 freq,高为时间差
accum += (freq.value + freq.key(i-1).value)*(time - freq.key(i-1).time)/2;
}else{
accum = freq.value*(time - inPoint);
}
wiggle(accum,amp)
下图显示了这个不幸的结果。
将线性关键帧积分器应用到频率参数上得到了这个可怕的结果
呵。差得远了!事实上,它甚至比之前的尝试更糟糕。现在应该很清楚,我们不能动画化频率参数并希望成功。然而,并不是一切都完了。结果表明,我们可以将积分器表达式应用到很少使用的 wiggle() 的第五个参数 —— 时间,得到我们想要的结果。如此:
freq = effect("Slider Control")("Slider");
amp = 10;
n = freq.numKeys;
if (n > 0 && freq.key(1).time < time){
accum = freq.key(1).value*(freq.key(1).time - inPoint);
for (i = 2; i <= n; i++){
if (freq.key(i).time > time) break;
k1 = freq.key(i-1);
k2 = freq.key(i);
accum += (k1.value + k2.value)*(k2.time - k1.time)/2;
}
accum += (freq.value + freq.key(i-1).value)*(time - freq.key(i-1).time)/2;
}else{
accum = freq.value*(time - inPoint);
}
wiggle(1,amp,1,.5,accum)
现在我们得到了一个美丽的频率斜坡从 0 到每秒 5 次,然后又回到 0 。(如果您想知道 wiggle() 的第三和第四个神秘参数,请参阅本文引用部分。)
将线性关键帧积分器应用于时间参数,可以使摆动频率动画化
其具体示例效果可从上方效果图上看到。
这样做的原因是我们使用积分器来计算总的经过时间,其基于频率滑块的值。我们将实际的频率参数设置为每秒摆动一次后保持不变。我们使用时间参数以一定的(通过滑块控件所确定的)速率在时间中移动。
wiggle 的第四个参数,倍频乘法器,决定每个倍频有多少被加到产生的波形中。此参数的默认值为 0.5,这意味着每个连续的八度音阶的影响将是前一个八度音阶的一半。