AudioParam: свойство value
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Свойство value интерфейса AudioParam получает или устанавливает значение этого AudioParam в текущий момент времени. Изначально значение устанавливается в AudioParam.defaultValue.
Установка value эквивалентна вызову AudioParam.setValueAtTime с временем, возвращаемым свойством AudioContext currentTime.
Значение
Число с плавающей запятой Number, указывающее значение параметра на текущий момент времени. Это значение будет находиться между значениями, указанными свойствами minValue и maxValue.
Описание
Точность и вариативность значения
Тип данных, используемый для хранения value внутри, — это число с одинарной точностью (32 бита), в то время как JavaScript использует числа с двойной точностью (64 бита). В результате значение, которое вы считываете со свойства value , может не совпадать точно с тем, что вы установили.
Рассмотрим этот пример:
const source = new AudioBufferSourceNode(/* … */); const rate = 5.3; source.playbackRate.value = rate; console.log(source.playbackRate.value === rate);
Вывод лога будет false, потому что параметр скорости воспроизведения, rate, был преобразован в ближайшее к 5.3 число с плавающей запятой одинарной точности, что дает 5.300000190734863. Одним из решений является использование метода Math.fround(), который возвращает эквивалентное значение с одинарной точностью для заданного 64-битного JavaScript значения — при установке value, так:
const source = new AudioBufferSourceNode(/* … */); const rate = Math.fround(5.3); source.playbackRate.value = rate; console.log(source.playbackRate.value === rate);
В этом случае вывод лога будет true.
Значение свойства, меняющегося со временем
Значение value AudioParam может быть постоянным или изменяться со временем. Это отражается в методе-геттере value, который возвращает значение параметра по состоянию на последний квант рендеринга аудио-движка, или момент, в который обрабатываются и обновляются аудио-буферы. Кроме обработки аудио-буферов, каждый квант рендеринга обновляет value каждого AudioParam по мере необходимости, исходя из текущего времени и любых установленных изменений значения параметра, основанных на времени.
При первом создании параметра его значение устанавливается в его значение по умолчанию, заданное в AudioParam.defaultValue. Это значение параметра в момент времени 0.0 секунд и оно сохраняется как значение параметра до первого кванта рендеринга, в котором значение изменяется.
Во время каждого кванта рендеринга браузер выполняет следующие действия, связанные с управлением значением параметра:
- Если был использован метод-сеттер
value, значение параметра изменяется на заданное значение. - Если текущее время равно или превышает время, указанное в предыдущем вызове
setValueAtTime(), значениеvalueизменяется на значение, переданное вsetValueAtTime(). - Если были вызваны методы изменения значения с плавным переходом и текущее время находится в диапазоне времени, в течение которого должен происходить плавный переход, значение обновляется на основе соответствующего алгоритма. К этим методам плавного изменения значения относятся
linearRampToValueAtTime(),setTargetAtTime()иsetValueCurveAtTime().
Таким образом, значение параметра поддерживается, чтобы точно отражать состояние параметра со временем.
Примеры
В этом примере мгновенно изменяется громкость GainNode на 40%.
const audioCtx = new AudioContext(); const gainNode = audioCtx.createGain(); gainNode.gain.value = 0.4; // which is identical to: gainNode.gain.setValueAtTime(0.4, audioCtx.currentTime);
Спецификации
| Спецификация |
|---|
| Web Audio API # dom-audioparam-value |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
value |
14До версии 66 значение усиленияGainNode выполняло плавную интерполяцию для предотвращения «разорванного» звука (вместо мгновенного изменения). |
12 | 25["До Firefox 134, установкаvalue игнорировалась, когда выполнялась одновременно с запланированными событиями автоматизации.", "До Firefox 69, value не учитывало запланированные или градиентные изменения значения параметра; вместо этого возвращались только явно установленные значения."] |
15До версии 53 значение усиленияGainNode выполняло плавную интерполяцию для предотвращения «разорванного» звука (вместо мгновенного изменения). |
6 | 18До версии 66 значение усиленияGainNode выполняло плавную интерполяцию для предотвращения «разорванного» звука (вместо мгновенного изменения). |
25Firefox for Android в настоящее время не учитывает запланированные или градиентные изменения значения параметра; возвращается только начальное значение или последнее явно установленное значение. |
14До версии 47 значение усиленияGainNode выполняло плавную интерполяцию для предотвращения «разорванного» звука (вместо мгновенного изменения). |
6 | 1.0До версии 9.0 значение усиленияGainNode выполняло плавную интерполяцию для предотвращения «разорванного» звука (вместо мгновенного изменения). |
≤37 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/AudioParam/value