Имеет ли 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)
, как объясняется в этом выпуске.