AudioParam:exponentialRampToValueAtTime() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

exponentialRampToValueAtTime() 方法是 AudioParam 介面的一個方法,用於安排 AudioParam 的值進行漸變的指數增長或衰減。該變化從前一個事件指定的時間開始,沿著指數斜坡增長或衰減到 value 引數給定的新值,並在 endTime 引數給定的時間達到新值。

注意: 指數斜坡在改變頻率或播放速率時比線性斜坡更有用,因為這更符合人耳的工作方式。

語法

js
exponentialRampToValueAtTime(value, endTime)

引數

value

一個浮點數,表示 AudioParam 在給定時間將要變化的最終值。

endTime

一個雙精度浮點數,表示變化停止的確切時間(以秒為單位)。

返回值

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

示例

在此示例中,我們有一個媒體源,帶有兩個控制按鈕(有關原始碼,請參見 audio-param repo,或 即時檢視示例)。當按下這些按鈕時,exponentialRampToValueAtTime() 分別用於將增益值漸入到 1.0 和漸出到 0。這對於淡入/淡出效果非常有用。

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

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

const expRampPlus = document.querySelector(".exp-ramp-plus");
const expRampMinus = document.querySelector(".exp-ramp-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();

// connect the AudioBufferSourceNode to the gainNode
// and the gainNode to the destination
gainNode.gain.setValueAtTime(0, audioCtx.currentTime);
source.connect(gainNode);
gainNode.connect(audioCtx.destination);

// set buttons to do something onclick
expRampPlus.onclick = () => {
  gainNode.gain.exponentialRampToValueAtTime(1.0, audioCtx.currentTime + 2);
};

expRampMinus.onclick = () => {
  gainNode.gain.exponentialRampToValueAtTime(0.01, audioCtx.currentTime + 2);
};

注意: 在最後一個函式中,用於衰減到的值使用了 0.01 而不是 0,因為如果使用 0,則會丟擲無效或非法字串錯誤 - 該值需要是正數。

規範

規範
Web Audio API
# dom-audioparam-exponentialramptovalueattime

瀏覽器相容性

另見