AudioParam: setValueCurveAtTime() 方法
setValueCurveAtTime()
是 AudioParam
接口的方法,用于安排参数的值根据由值列表定义的曲线进行更改。
曲线是在浮点数值数组中定义的值序列之间进行线性插值,这些值会被缩放以适应从 startTime
开始的给定间隔和特定持续时间。
语法
setValueCurveAtTime(values, startTime, duration)
参数
values
-
一个表示
AudioParam
将在指定的duration
内经历的值曲线的浮点数数组。数组中的每个值都必须是有限数;如果任何值为NaN
、Infinity
或-Infinity
,则会抛出TypeError
异常。 startTime
-
一个双精度数,表示自
AudioContext
首次创建后(以秒为单位)值更改将发生的时间。如果此值小于AudioContext.currentTime
,则将其钳位到currentTime
。 duration
-
一个双精度数,表示参数
value
将根据指定的曲线更改的总时间(以秒为单位)。指定的值在此持续时间内均匀分布。
返回值
对该 AudioParam
对象的引用。此接口的一些较旧的浏览器实现返回 undefined
。
异常
InvalidStateError
DOMException
-
如果指定的
values
数组中的项目少于 2 个,则抛出此异常。 RangeError
-
如果指定的
startTime
为负数或非有限值,或者duration
不是有限的严格正数,则抛出此异常。 TypeError
-
如果
values
数组中的一个或多个值为非有限值,则抛出此异常。非有限值包括NaN
、Infinity
和-Infinity
。
用法说明
当参数的值完成曲线跟随后,其值保证与 values
参数中指定的值集中最后一个值匹配。
注意:Web Audio API 的一些早期实现未确保这一点,从而导致意外结果。
示例
在此示例中,我们有一个具有单个按钮的媒体源(有关源代码,请参阅 webaudio-examples 存储库,或 查看示例)。按下此按钮时,setValueCurveAtTime()
用于在 waveArray 数组中包含的值之间更改增益值。
// 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 之前的版本使用最近邻而不是线性插值。