AudioParam

Baseline 廣泛可用 *

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

* 此特性的某些部分可能存在不同級別的支援。

Web Audio API 的 AudioParam 介面代表一個與音訊相關的引數,通常是 AudioNode 的引數(例如 GainNode.gain)。

AudioParam 可以被設定為一個特定值或一個值變化,並且可以被排程在特定時間以特定模式發生。

每個 AudioParam 都有一個事件列表,初始為空,用於定義何時以及如何更改值。當此列表不為空時,使用 AudioParam.value 屬性進行的更改將被忽略。此事件列表允許我們使用任意基於時間線的自動化曲線排程必須在非常精確的時間發生的更改。使用的時間由 AudioContext.currentTime 定義。

AudioParam 型別

有兩種 AudioParam 型別:a-ratek-rate 引數。每個 AudioNode 在規範中定義了其引數的 a-ratek-rate 型別。

a-rate

a-rate AudioParam 為音訊訊號的每個 取樣幀 獲取當前的音訊引數值。

k-rate

k-rate AudioParam 對整個處理的塊使用相同的初始音訊引數值;也就是說,128 個取樣幀。換句話說,在節點處理音訊時,相同的值適用於每個幀。

例項屬性

AudioParam.defaultValue 只讀

表示由建立 AudioParam 的特定 AudioNode 定義的屬性的初始值。

AudioParam.maxValue 只讀

表示引數標稱(有效)範圍的最大可能值。

AudioParam.minValue 只讀

表示引數標稱(有效)範圍的最小可能值。

AudioParam.value

表示引數在當前時間的當前值;最初設定為 defaultValue 的值。

例項方法

AudioParam.setValueAtTime()

在精確的時間點安排 AudioParam 值的即時更改,該時間點根據 AudioContext.currentTime 進行測量。新值由 value 引數給出。

AudioParam.linearRampToValueAtTime()

安排 AudioParam 值進行漸變的線性更改。更改從 *前一個* 事件指定的開始時間開始,沿線性斜坡變化到 value 引數給出的新值,並在 endTime 引數給定的時間達到新值。

AudioParam.exponentialRampToValueAtTime()

安排 AudioParam 值進行漸變的指數更改。更改從 *前一個* 事件指定的開始時間開始,沿指數斜坡變化到 value 引數給出的新值,並在 endTime 引數給定的時間達到新值。

AudioParam.setTargetAtTime()

安排 AudioParam 值更改的開始。更改在 startTime 引數指定的時間開始,並呈指數級地趨向於 target 引數給定的值。指數衰減率由 timeConstant 引數定義,該引數是以秒為單位的時間。

AudioParam.setValueCurveAtTime()

安排 AudioParam 的值遵循一組值,這些值由一個浮點數陣列定義,該陣列被縮放到適合給定的區間,從給定的開始時間開始,並跨越給定的時間持續時間。

AudioParam.cancelScheduledValues()

取消 AudioParam 所有預定的未來更改。

AudioParam.cancelAndHoldAtTime()

取消 AudioParam 所有預定的未來更改,但將值在給定時間保持不變,直到使用其他方法進行進一步更改。

示例

首先,一個基本示例,演示如何設定 GainNodegain 值。gaina-rate AudioParam 的一個示例,因為該值可以為音訊的每個取樣幀設定不同的值。

js
const audioCtx = new AudioContext();

const gainNode = audioCtx.createGain();
gainNode.gain.value = 0;

接下來,一個示例,演示如何操作 DynamicsCompressorNode 的一些引數值。這些是 k-rate AudioParam 型別的示例,因為值是一次性為整個音訊塊設定的。

js
const compressor = audioCtx.createDynamicsCompressor();
compressor.threshold.setValueAtTime(-50, audioCtx.currentTime);
compressor.knee.setValueAtTime(40, audioCtx.currentTime);
compressor.ratio.setValueAtTime(12, audioCtx.currentTime);
compressor.attack.setValueAtTime(0, audioCtx.currentTime);
compressor.release.setValueAtTime(0.25, audioCtx.currentTime);

規範

規範
Web Audio API
# AudioParam

瀏覽器相容性

另見