AudioParam: setValueAtTime() 方法

Baseline 已廣泛支援

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

AudioParam 介面的 setValueAtTime() 方法會在精確的時間點安排 AudioParam 值的即時更改,該時間點相對於 AudioContext.currentTime 進行測量。新值在 value 引數中給出。

語法

js
setValueAtTime(value, startTime)

引數

value

一個浮點數,表示 AudioParam 在給定時間將更改到的值。

startTime

一個雙精度浮點數,表示值更改將發生的 AudioContext 首次建立後的時間(以秒為單位)。如果時間小於 AudioContext.currentTime,則更改會立即發生。如果此值為負數,則會引發 TypeError

返回值

對該 AudioParam 物件的引用。在某些瀏覽器中,此介面的舊實現會返回 undefined

示例

這個簡單的示例包含一個媒體元素源和兩個控制按鈕(有關原始碼,請參閱我們的 webaudio-examples 倉庫,或線上檢視示例)。按下按鈕時,currGain 變數會增加/減少 0.25,然後使用 setValueAtTime() 方法將增益值設定為等於 currGain,時間在 1 秒後(audioCtx.currentTime + 1)。

js
// create audio context
const audioCtx = new AudioContext();

// set basic variables for example
const myAudio = document.querySelector("audio");
const pre = document.querySelector("pre");
const myScript = document.querySelector("script");

pre.textContent = myScript.textContent;

const targetAtTimePlus = document.querySelector(".set-target-at-time-plus");
const targetAtTimeMinus = document.querySelector(".set-target-at-time-minus");

// Create a MediaElementAudioSourceNode
// Feed the HTMLMediaElement into it
const source = audioCtx.createMediaElementSource(myAudio);

// Create a gain node and set its gain value to 0.5
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.5;
let currGain = gainNode.gain.value;

// connect the AudioBufferSourceNode to the gainNode
// and the gainNode to the destination
source.connect(gainNode);
gainNode.connect(audioCtx.destination);

// set buttons to do something onclick
targetAtTimePlus.onclick = () => {
  currGain += 0.25;
  gainNode.gain.setValueAtTime(currGain, audioCtx.currentTime + 1);
};

targetAtTimeMinus.onclick = () => {
  currGain -= 0.25;
  gainNode.gain.setValueAtTime(currGain, audioCtx.currentTime + 1);
};

規範

規範
Web Audio API
# dom-audioparam-setvalueattime

瀏覽器相容性

另見