AudioParam

Baseline 广泛可用 *

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

* 此特性的某些部分可能存在不同级别的支持。

Web Audio API 的 AudioParam 接口代表一个与音频相关的参数,通常是 AudioNode 的参数(例如 GainNode.gain)。

AudioParam 可以被设置为一个特定值或一个值变化,并且可以被调度在特定时间以特定模式发生。

每个 AudioParam 都有一个事件列表,初始为空,用于定义何时以及如何更改值。当此列表不为空时,使用 AudioParam.value 属性进行的更改将被忽略。此事件列表允许我们使用任意基于时间线的自动化曲线调度必须在非常精确的时间发生的更改。使用的时间由 AudioContext.currentTime 定义。

AudioParam 类型

有两种 AudioParam 类型:a-ratek-rate 参数。每个 AudioNode 在规范中定义了其参数的 a-ratek-rate 类型。

a-rate

a-rate AudioParam 为音频信号的每个 采样帧 获取当前的音频参数值。

k-rate

k-rate AudioParam 对整个处理的块使用相同的初始音频参数值;也就是说,128 个采样帧。换句话说,在节点处理音频时,相同的值适用于每个帧。

实例属性

AudioParam.defaultValue 只读

表示由创建 AudioParam 的特定 AudioNode 定义的属性的初始值。

AudioParam.maxValue 只读

表示参数标称(有效)范围的最大可能值。

AudioParam.minValue 只读

表示参数标称(有效)范围的最小可能值。

AudioParam.value

表示参数在当前时间的当前值;最初设置为 defaultValue 的值。

实例方法

AudioParam.setValueAtTime()

在精确的时间点安排 AudioParam 值的即时更改,该时间点根据 AudioContext.currentTime 进行测量。新值由 value 参数给出。

AudioParam.linearRampToValueAtTime()

安排 AudioParam 值进行渐变的线性更改。更改从 *前一个* 事件指定的开始时间开始,沿线性斜坡变化到 value 参数给出的新值,并在 endTime 参数给定的时间达到新值。

AudioParam.exponentialRampToValueAtTime()

安排 AudioParam 值进行渐变的指数更改。更改从 *前一个* 事件指定的开始时间开始,沿指数斜坡变化到 value 参数给出的新值,并在 endTime 参数给定的时间达到新值。

AudioParam.setTargetAtTime()

安排 AudioParam 值更改的开始。更改在 startTime 参数指定的时间开始,并呈指数级地趋向于 target 参数给定的值。指数衰减率由 timeConstant 参数定义,该参数是以秒为单位的时间。

AudioParam.setValueCurveAtTime()

安排 AudioParam 的值遵循一组值,这些值由一个浮点数数组定义,该数组被缩放到适合给定的区间,从给定的开始时间开始,并跨越给定的时间持续时间。

AudioParam.cancelScheduledValues()

取消 AudioParam 所有预定的未来更改。

AudioParam.cancelAndHoldAtTime()

取消 AudioParam 所有预定的未来更改,但将值在给定时间保持不变,直到使用其他方法进行进一步更改。

示例

首先,一个基本示例,演示如何设置 GainNodegain 值。gaina-rate AudioParam 的一个示例,因为该值可以为音频的每个采样帧设置不同的值。

js
const audioCtx = new AudioContext();

const gainNode = audioCtx.createGain();
gainNode.gain.value = 0;

接下来,一个示例,演示如何操作 DynamicsCompressorNode 的一些参数值。这些是 k-rate AudioParam 类型的示例,因为值是一次性为整个音频块设置的。

js
const 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

浏览器兼容性

另见