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

浏览器兼容性

另见