AudioParam - 表示与音频相关的参数
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.defaultValue
只读
表示由创建 AudioParam
的特定 AudioNode
定义的属性的初始音量。
AudioParam.maxValue
只读
表示参数的标称(有效)范围的最大可能值。
AudioParam.minValue
只读
表示参数的标称(有效)范围的最小可能值。
AudioParam.value
表示截至当前时间的参数当前值;最初设置为 defaultValue
的值。
方法
AudioParam.setValueAtTime()
根据 AudioContext.currentTime
测得的准确时间,将即时更改安排在精确时间更改为 AudioParam
的值。新值由 value
参数给定。
AudioParam.linearRampToValueAtTime()
安排 AudioParam
的值逐渐线性变化。更改从为 previous 事件指定的时间开始,然后线性增加到 value
参数中给定的新值,并在 endTime
参数中给定的时间达到新值。
AudioParam.exponentialRampToValueAtTime()
安排 AudioParam
的值的逐渐指数变化。更改从为 previous 事件指定的时间开始,然后按照指数递增到 value
参数中给定的新值,并在 endTime
参数中给定的时间达到新值。
AudioParam.setTargetAtTime()
将更改的开始时间安排为 AudioParam
的值。更改从 startTime
中指定的时间开始,并以指数形式移向 target
参数给定的值。指数衰减率由 timeConstant
参数定义,该时间以秒为单位。
AudioParam.setValueCurveAtTime()
安排 AudioParam
的值遵循一组值,这些值是由一个浮点数数组定义的,该数组按比例缩放以适合给定的间隔,从给定的开始时间开始,跨越给定的持续时间。
AudioParam.cancelScheduledValues()
取消 AudioParam
未来所有计划的更改。
AudioParam.cancelAndHoldAtTime()
取消对 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);
规范
规范 | 状态 | 备注 |
---|---|---|
Web Audio API AudioParam 的定义 |
工作草案 | - |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 14 | ≤18 | 25 | 不支持 | 15 | 6 |
automationRate | 68 | ≤79 | 未知 | 不支持 | 支持 | 未知 |
cancelAndHoldAtTime | 57 支持 — 561 | ≤79 | 不支持 | 不支持 | 44 支持 — 431 | 不支持 |
cancelScheduledValues | 14 | 12 | 25 | 不支持 | 15 | 6 |
defaultValue | 14 | 12 | 25 | 不支持 | 15 | 6 |
exponentialRampToValueAtTime | 14 | 12 | 253 | 不支持 | 15 | 6 |
linearRampToValueAtTime | 14 | 12 | 253 | 不支持 | 15 | 6 |
maxValue | 52 | ≤18 | 53 | 不支持 | 39 | 6 |
minValue | 52 | ≤18 | 53 | 不支持 | 39 | 6 |
setTargetAtTime | 14 | 12 | 25 | 不支持 | 15 | 6 |
setValueAtTime | 14 | 12 | 25 | 不支持 | 15 | 6 |
setValueCurveAtTime | 14 | 12 | 25 | 不支持 | 15 | 6 |
value | 14 | 12 | 254 | 不支持 | 15 | 6 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 支持 | 18 | 未知 | 26 | 未知 | 14 | 支持 |
automationRate | 68 | 68 | 未知 | 未知 | 未知 | 支持 | 支持 |
cancelAndHoldAtTime | 57 支持 — 561 | 57 支持 — 561 | 未知 | 不支持 | 未知 | 43 支持 — 431 | 不支持 |
cancelScheduledValues | 支持 | 18 | 未知 | 26 | 未知 | 14 | 支持 |
defaultValue | 支持 | 18 | 未知 | 26 | 未知 | 14 | 支持 |
exponentialRampToValueAtTime | 支持 | 182 | 未知 | 263 | 未知 | 14 | 支持 |
linearRampToValueAtTime | 支持 | 182 | 未知 | 263 | 未知 | 14 | 未知 |
maxValue | 52 | 52 | 未知 | 53 | 未知 | 41 | 支持 |
minValue | 52 | 52 | 未知 | 53 | 未知 | 41 | 支持 |
setTargetAtTime | 支持 | 18 | 未知 | 26 | 未知 | 14 | 支持 |
setValueAtTime | 支持 | 18 | 未知 | 26 | 未知 | 14 | 支持 |
setValueCurveAtTime | 支持 | 18 | 未知 | 26 | 未知 | 14 | 支持 |
value | 支持 | 18 | 未知 | 265 | 未知 | 14 | 支持 |
1. 通过 cancelValuesAndHoldAtTime()
支持。
2. 这将在指定时间设置目标音量,但不会达到目标音量,导致此函数的行为类似于 setValueAtTime()
。
3. 不起作用(请参见 bug 1171438 和 bug 1567777)。
4. 在 Firefox 69 之前, value
未考虑对参数值的计划或渐进更改;而是仅返回显式设置的值。
5. Android 版 Firefox 当前未考虑对参数值的计划或渐进更改;仅返回初始值或最新的显式设置值。