在文档中说:
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
我不确定为什么......
答案 0 :(得分:1)
它是即时的,正确的,但是异步的(并且被假定为非阻塞操作),因为它是在一个单独的线程中执行的 - 请注意描述中的 schedule 。这就是为什么你不会立即看到变化的原因。
请注意另一种更新value
的方法,通过直接分配到相应的属性......
biquadNode.gain.value = 12;
...也不是同步的 - 基本等同于setValueAtTime(newValue, currentTime)
,如in this issue所述。