AudioParam - 表示与音频相关的参数

AudioParam 是 Web Audio API 的接口,表示与音频相关的参数,通常是 AudioNode 的参数(例如 GainNode.gain)。AudioParam 可以被设置为特定的值或值的变化,并且可以将其安排为在特定时间按照特定模式发生。

有两种 AudioParama-ratek-rate 参数:

  • a-rateAudioParam 会获取音频信号的每个样本帧的当前音频参数值。
  • k-rateAudioParam 在整个处理的块中使用相同的初始音频参数值,即 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 的所有计划的未来更改,但在使用其他方法进行进一步更改之前,保留其值。

实例

下面的实例显示了 GainNodegain 值集。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 的定义
工作草案 -

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持14≤1825 不支持156
automationRate68≤79 未知 不支持 支持 未知
cancelAndHoldAtTime

57

支持 — 561

≤79 不支持 不支持

44

支持 — 431

不支持
cancelScheduledValues141225 不支持156
defaultValue141225 不支持156
exponentialRampToValueAtTime1412253 不支持156
linearRampToValueAtTime1412253 不支持156
maxValue52≤1853 不支持396
minValue52≤1853 不支持396
setTargetAtTime141225 不支持156
setValueAtTime141225 不支持156
setValueCurveAtTime141225 不支持156
value1412254 不支持156

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 支持18 未知26 未知14 支持
automationRate6868 未知 未知 未知 支持 支持
cancelAndHoldAtTime

57

支持 — 561

57

支持 — 561

未知 不支持 未知

43

支持 — 431

不支持
cancelScheduledValues 支持18 未知26 未知14 支持
defaultValue 支持18 未知26 未知14 支持
exponentialRampToValueAtTime 支持182 未知263 未知14 支持
linearRampToValueAtTime 支持182 未知263 未知14 未知
maxValue5252 未知53 未知41 支持
minValue5252 未知53 未知41 支持
setTargetAtTime 支持18 未知26 未知14 支持
setValueAtTime 支持18 未知26 未知14 支持
setValueCurveAtTime 支持18 未知26 未知14 支持
value 支持18 未知265 未知14 支持

1. 通过 cancelValuesAndHoldAtTime() 支持。

2. 这将在指定时间设置目标音量,但不会达到目标音量,导致此函数的行为类似于 setValueAtTime()

3. 不起作用(请参见 bug 1171438bug 1567777)。

4. 在 Firefox 69 之前, value 未考虑对参数值的计划或渐进更改;而是仅返回显式设置的值。

5. Android 版 Firefox 当前未考虑对参数值的计划或渐进更改;仅返回初始值或最新的显式设置值。