AudioParam 是 Web Audio API 的接口,表示与音频相关的参数,通常是 AudioNode 的参数(例如 GainNode.gain)。AudioParam 可以被设置为特定的值或值的变化,并且可以将其安排为在特定时间按照特定模式发生。
有两种 AudioParam,a-rate 和 k-rate 参数:
a-rate 的 AudioParam 会获取音频信号的每个样本帧的当前音频参数值。
k-rate 的 AudioParam 在整个处理的块中使用相同的初始音频参数值,即 128 个样本帧。换句话说,当节点处理音频时,音频中的每个帧都应用相同的值。
每个 AudioNode 在规范中定义了它的参数是 a-rate 还是 k-rate。
每个 AudioParam 都有一个事件列表,这些事件最初是空的,用于定义何时以及如何更改值。当此列表不为空时,将忽略 AudioParam.value 属性的更改。这个事件列表允许我们使用任意的基于时间的自动化曲线来安排必须在非常精确的时间发生的更改。使用的时间是在 AudioContext.currentTime 中定义的时间。
属性
表示由创建 AudioParam 的特定 AudioNode 定义的属性的初始音量。
表示参数的标称(有效)范围的最大可能值。
表示参数的标称(有效)范围的最小可能值。
表示截至当前时间的参数当前值;最初设置为 defaultValue 的值。
方法
根据 AudioContext.currentTime 测得的准确时间,将即时更改安排在精确时间更改为 AudioParam 的值。新值由 value 参数给定。
安排 AudioParam 的值逐渐线性变化。更改从为 previous 事件指定的时间开始,然后线性增加到 value 参数中给定的新值,并在 endTime 参数中给定的时间达到新值。
安排 AudioParam 的值的逐渐指数变化。更改从为 previous 事件指定的时间开始,然后按照指数递增到 value 参数中给定的新值,并在 endTime 参数中给定的时间达到新值。
将更改的开始时间安排为 AudioParam 的值。更改从 startTime 中指定的时间开始,并以指数形式移向 target 参数给定的值。指数衰减率由 timeConstant 参数定义,该时间以秒为单位。
安排 AudioParam 的值遵循一组值,这些值是由一个浮点数数组定义的,该数组按比例缩放以适合给定的间隔,从给定的开始时间开始,跨越给定的持续时间。
取消 AudioParam 未来所有计划的更改。
取消对 AudioParam 的所有计划的未来更改,但在使用其他方法进行进一步更改之前,保留其值。
实例
下面的实例显示了 GainNode 的 gain 值集。gain 是一个 a-rate AudioParam 的例子,因为可能会为音频的每个样本帧设置不同的值。
var AudioContext = window.AudioContext || window.webkitAudioContext;
var audioCtx = new AudioContext();
var gainNode = audioCtx.createGain();
gainNode.gain.value = 0;
下面的实例显示了一个 DynamicsCompressorNode,它具有一些参数值。它们是 k-rate AudioParam 的例子,因为会立即为整个音频块设置值。
var compressor = audioCtx.createDynamicsCompressor();
compressor.threshold.setValueAtTime(-50, audioCtx.currentTime);
compressor.knee.setValueAtTime(40, audioCtx.currentTime);
compressor.ratio.setValueAtTime(12, audioCtx.currentTime);
compressor.attack.setValueAtTime(0, audioCtx.currentTime);
compressor.release.setValueAtTime(0.25, audioCtx.currentTime);
规范
桌面浏览器兼容性
特性ChromeEdgeFirefoxInternet ExplorerOperaSafari基础支持14≤1825不支持156
automationRate68≤79未知不支持支持未知
cancelAndHoldAtTime57
支持 — 56≤79不支持不支持44
支持 — 43不支持
cancelScheduledValues141225不支持156
defaultValue141225不支持156
exponentialRampToValueAtTime141225不支持156
linearRampToValueAtTime141225不支持156
maxValue52≤1853不支持396
minValue52≤1853不支持396
setTargetAtTime141225不支持156
setValueAtTime141225不支持156
setValueCurveAtTime141225不支持156
value141225不支持156
移动浏览器兼容性
特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari基础支持支持18未知26未知14支持
automationRate6868未知未知未知支持支持
cancelAndHoldAtTime57
支持 — 5657
支持 — 56未知不支持未知43
支持 — 43不支持
cancelScheduledValues支持18未知26未知14支持
defaultValue支持18未知26未知14支持
exponentialRampToValueAtTime支持18未知26未知14支持
linearRampToValueAtTime支持18未知26未知14未知
maxValue5252未知53未知41支持
minValue5252未知53未知41支持
setTargetAtTime支持18未知26未知14支持
setValueAtTime支持18未知26未知14支持
setValueCurveAtTime支持18未知26未知14支持
value支持18未知26未知14支持
1. 通过 cancelValuesAndHoldAtTime() 支持。
2. 这将在指定时间设置目标音量,但不会达到目标音量,导致此函数的行为类似于 setValueAtTime()。
4. 在 Firefox 69 之前, value 未考虑对参数值的计划或渐进更改;而是仅返回显式设置的值。
5. Android 版 Firefox 当前未考虑对参数值的计划或渐进更改;仅返回初始值或最新的显式设置值。