setValueAtTime有特定的持续时间吗?

时间:2018-01-29 20:29:00

标签: web-audio web-audio-api

在文档中说:

  

AudioParam接口的setValueAtTime()方法在精确的时间安排对AudioParam值的即时更改,根据AudioContext.currentTime进行测量。新值在值参数中给出。

从人们可以认为它可以立即改变,但是当运行此代码时

...
biquadNode.gain.setValueAtTime(12, this._AudioContext.currentTime);
console.log("biquadNode.gain " + biquadNode.gain.value);
console.log("biquadNode.frequency " + biquadNode.frequency.value);
setTimeout(() => {
    console.log("biquadNode.gain " + biquadNode.gain.value);
    console.log("biquadNode.frequency " + biquadNode.frequency.value);
}, 100);
...

输出:

0
12

我不确定为什么......

1 个答案:

答案 0 :(得分:1)

它是即时的,正确的,但是异步的(并且被假定为非阻塞操作),因为它是在一个单独的线程中执行的 - 请注意描述中的 schedule 。这就是为什么你不会立即看到变化的原因。

请注意另一种更新value的方法,通过直接分配到相应的属性......

biquadNode.gain.value = 12;

...也不是同步的 - 基本等同于setValueAtTime(newValue, currentTime),如in this issue所述。