Имеет ли setValueAtTime определенную продолжительность?

В документации говорится:

Метод setValueAtTime() интерфейса AudioParam планирует мгновенное изменение значения AudioParam в точное время по сравнению с AudioContext.currentTime. Новое значение указывается в параметре value.

Из того, что можно думать, это делает мгновенное изменение, но когда запустить этот код

...
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 ответ

Это мгновенно, верно, но асинхронно (и предполагается, что это неблокирующая операция), так как оно выполняется в отдельном потоке - обратите внимание на графики слов в описании. Вот почему вы не увидите изменения немедленно.

Обратите внимание, что другой метод обновления valueчерез прямое присвоение соответствующей собственности...

biquadNode.gain.value = 12;

... не является синхронным - и в основном эквивалентно setValueAtTime(newValue, currentTime), как объясняется в этом выпуске.

Другие вопросы по тегам