AudioParam: value 屬性

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

AudioParam 介面的 value 屬性用於獲取或設定該 AudioParam 在當前時間的引數值。初始時,該值會被設定為 AudioParam.defaultValue

設定 value 與呼叫 AudioParam.setValueAtTime 的效果相同,此時的時間引數為 AudioContextcurrentTime 屬性返回的時間。

一個浮點型 Number,表示引數在當前時間的取值。此值介於 minValuemaxValue 屬性指定的值之間。

描述

值的精度和變化

內部用於儲存 value 的資料型別是單精度(32 位)浮點數,而 JavaScript 使用的是 64 位雙精度浮點數。因此,您從 value 屬性讀取的值可能並不總是與您設定的值完全相等。

考慮以下示例

js
const source = new AudioBufferSourceNode(/* … */);
const rate = 5.3;
source.playbackRate.value = rate;
console.log(source.playbackRate.value === rate);

控制檯輸出將是 false,因為播放速率引數 rate 被轉換為最接近 5.3 的 32 位浮點數,結果是 5.300000190734863。一個解決方案是使用 Math.fround() 方法,該方法返回指定 64 位 JavaScript 值等效的單精度值——在設定 value 時,例如:

js
const source = new AudioBufferSourceNode(/* … */);
const rate = Math.fround(5.3);
source.playbackRate.value = rate;
console.log(source.playbackRate.value === rate);

在這種情況下,控制檯輸出將是 true

隨時間變化的屬性值

AudioParamvalue 可以是固定的,也可以隨時間變化。這反映在 value getter 中,它返回引數在音訊渲染引擎最近一次 **render quantum**(音訊緩衝區處理和更新的時刻)時的值。除了處理音訊緩衝區外,每次 render quantum 都會根據當前時間和任何已建立的基於時間的引數值更改來更新每個 AudioParamvalue

在首次建立引數時,其值設定為由 AudioParam.defaultValue 指定的預設值。這是引數在時間 0.0 秒時的值,並且將保持此值,直到第一次修改引數值的 render quantum 發生。

在每個 render quantum 中,瀏覽器會執行以下與管理引數值相關的操作:

  • 如果使用了 value setter,引數的值將被更改為指定的值。
  • 如果當前時間等於或超過先前呼叫 setValueAtTime() 指定的時間,則 value 將更改為傳遞給 setValueAtTime() 的值。
  • 如果呼叫了任何漸變或斜坡值更改方法,並且當前時間在漸變變化應發生的事件範圍內,則值將根據適當的演算法進行更新。這些斜坡或漸變值更改方法包括 linearRampToValueAtTime()setTargetAtTime()setValueCurveAtTime()

因此,引數的 value 會被維護,以準確反映引數隨時間的狀態。

示例

此示例將 GainNode 的音量立即更改為 40%。

js
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

瀏覽器相容性

另見