AudioParam: setValueCurveAtTime() 方法

基线 广泛可用

此功能已发展成熟,可在许多设备和浏览器版本上运行。它自以下时间起在浏览器中可用 2021 年 4 月.

setValueCurveAtTime()AudioParam 接口的方法,用于安排参数的值根据由值列表定义的曲线进行更改。

曲线是在浮点数值数组中定义的值序列之间进行线性插值,这些值会被缩放以适应从 startTime 开始的给定间隔和特定持续时间。

语法

js
setValueCurveAtTime(values, startTime, duration)

参数

values

一个表示 AudioParam 将在指定的 duration 内经历的值曲线的浮点数数组。数组中的每个值都必须是有限数;如果任何值为 NaNInfinity-Infinity,则会抛出 TypeError 异常。

startTime

一个双精度数,表示自 AudioContext 首次创建后(以秒为单位)值更改将发生的时间。如果此值小于 AudioContext.currentTime,则将其钳位到 currentTime

duration

一个双精度数,表示参数 value 将根据指定的曲线更改的总时间(以秒为单位)。指定的值在此持续时间内均匀分布。

返回值

对该 AudioParam 对象的引用。此接口的一些较旧的浏览器实现返回 undefined

异常

InvalidStateError DOMException

如果指定的 values 数组中的项目少于 2 个,则抛出此异常。

RangeError

如果指定的 startTime 为负数或非有限值,或者 duration 不是有限的严格正数,则抛出此异常。

TypeError

如果 values 数组中的一个或多个值为非有限值,则抛出此异常。非有限值包括 NaNInfinity-Infinity

用法说明

当参数的值完成曲线跟随后,其值保证与 values 参数中指定的值集中最后一个值匹配。

注意:Web Audio API 的一些早期实现未确保这一点,从而导致意外结果。

示例

在此示例中,我们有一个具有单个按钮的媒体源(有关源代码,请参阅 webaudio-examples 存储库,或 查看示例)。按下此按钮时,setValueCurveAtTime() 用于在 waveArray 数组中包含的值之间更改增益值。

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

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

const valueCurve = document.querySelector(".value-curve");

// 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;
const currGain = gainNode.gain.value;

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

// set button to do something onclick

const waveArray = new Float32Array(9);
waveArray[0] = 0.5;
waveArray[1] = 1;
waveArray[2] = 0.5;
waveArray[3] = 0;
waveArray[4] = 0.5;
waveArray[5] = 1;
waveArray[6] = 0.5;
waveArray[7] = 0;
waveArray[8] = 0.5;

valueCurve.onclick = () => {
  gainNode.gain.setValueCurveAtTime(waveArray, audioCtx.currentTime, 2);
};

规范

规范
Web Audio API
# dom-audioparam-setvaluecurveattime

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

Chrome 46 之前的版本使用最近邻而不是线性插值。

另请参阅