AudioParam:value 属性

基线 广泛可用

此功能已相当成熟,并在许多设备和浏览器版本上都能正常使用。自 2021 年 4 月.

报告反馈

Web 音频 API 的 AudioParam 接口属性 value 在当前时间获取或设置此 AudioParam 的值。最初,该值被设置为 AudioParam.defaultValue

设置 value 与使用 AudioContextcurrentTime 属性返回的时间调用 AudioParam.setValueAtTime 的效果相同。

使用注意事项

一个浮点型 Number,指示参数在当前时间的数值。该值将介于 minValuemaxValue 属性指定的数值之间。

数值精度和变化

内部用于存储 value 的数据类型是单精度 (32 位) 浮点数,而 JavaScript 使用 64 位双精度浮点数。因此,您从 value 属性读取的值可能并不总是完全等于您设置的值。

请考虑以下示例
const source = new AudioBufferSourceNode(/* … */);
const rate = 5.3;
source.playbackRate.value = rate;
console.log(source.playbackRate.value === rate);

js

请考虑以下示例
const source = new AudioBufferSourceNode(/* … */);
const rate = Math.fround(5.3);
source.playbackRate.value = rate;
console.log(source.playbackRate.value === rate);

日志输出将为 false,因为播放速度参数 rate 被转换为最接近 5.3 的 32 位浮点数,其结果为 5.300000190734863。一种解决方案是使用 Math.fround() 方法,该方法返回与指定的 64 位 JavaScript 值等效的单精度值 - 在设置 value 时,就像这样

在这种情况下,日志输出将为 true

随时间变化的属性值

AudioParamvalue 可以是固定的,也可以随着时间而变化。这体现在 value 获取器中,它返回参数在音频渲染引擎最新的 渲染量子(或处理和更新音频缓冲区的时刻)时的值。除了处理音频缓冲区之外,每个渲染量子还会根据当前时间和任何已建立的基于时间的参数值更改来更新每个 AudioParamvalue

首次创建参数时,其值被设置为默认值,由 AudioParam.defaultValue 给出。这是参数在 0.0 秒时的值,并且将保持为参数的值,直到第一个渲染量子(在该量子中,该值被改变)。

  • 在每个渲染量子中,浏览器执行与管理参数值相关的以下操作
  • 如果使用了 value 设置器,则参数的值将更改为给定的值。
  • 如果当前时间等于或超过之前调用 setValueAtTime() 指定的时间,则 value 将更改为传递给 setValueAtTime() 的值。

如果任何渐变或斜坡值改变方法已被调用,并且当前时间位于渐变更改应该发生的时段内,则根据适当的算法更新值。这些斜坡或渐变值改变方法包括 linearRampToValueAtTime()setTargetAtTime()setValueCurveAtTime()

示例

因此,参数的 value 将被维护,以准确反映参数随时间的变化状态。

请考虑以下示例
const audioCtx = new AudioContext();
const gainNode = audioCtx.createGain();
gainNode.gain.value = 0.4;
// which is identical to:
gainNode.gain.setValueAtTime(0.4, audioCtx.currentTime);

规范

此示例立即将 GainNode 的音量更改为 40%。
Web 音频 API
# 规范

浏览器兼容性

dom-audioparam-value

在更改 GainNode 的增益值时,Google Chrome 64 版(2018 年 1 月)之前会执行平滑插值以防止去齿化。从 64 版开始,该值会立即更改以使其符合 Web 音频规范。有关详细信息,请参阅 Chrome 平台状态

另请参阅