AudioWorkletNode:parameters 属性

基线 广泛可用

此功能非常成熟,并在许多设备和浏览器版本中运行。它自 2021 年 4 月.

报告反馈

安全上下文:此功能仅在安全上下文(HTTPS)中,在部分或所有支持的浏览器中可用。

AudioWorkletNode 接口的只读parameters 属性返回关联的AudioParamMap,即一个类似于MapAudioParam 对象集合。它们在创建基础AudioWorkletProcessor 时根据其parameterDescriptors 静态 getter 实例化。

示例

包含AudioParam 实例的AudioParamMap 对象。它们可以像默认AudioNode一样进行自动化,并且它们的计算值可以在process 方法中使用你的AudioWorkletProcessor

为了演示自定义AudioParam的创建和使用,我们将扩展AudioWorkletNode 页面中的示例。我们在那里创建了一个输出白噪声的简单节点。在这里,我们还将创建一个自定义增益参数,以便我们可以直接更改输出的音量(尽管也可以使用GainNode 来实现这一点)。

首先,我们需要定义一个自定义AudioWorkletProcessor,并将其注册。请注意,这应该在单独的文件中完成。

我们通过添加一个静态parameterDescriptors getter 来扩展处理器。它将在内部由AudioWorkletNode 构造函数使用,以用实例化的AudioParam 对象填充其parameters
// white-noise-processor.js
class WhiteNoiseProcessor extends AudioWorkletProcessor {
  static get parameterDescriptors() {
    return [
      {
        name: "customGain",
        defaultValue: 1,
        minValue: 0,
        maxValue: 1,
        automationRate: "a-rate",
      },
    ];
  }

  process(inputs, outputs, parameters) {
    const output = outputs[0];
    output.forEach((channel) => {
      for (let i = 0; i < channel.length; i++) {
        channel[i] =
          (Math.random() * 2 - 1) *
          (parameters["customGain"].length > 1
            ? parameters["customGain"][i]
            : parameters["customGain"][0]);
        // note: a parameter contains an array of 128 values (one value for each of 128 samples),
        // however it may contain a single value which is to be used for all 128 samples
        // if no automation is scheduled for the moment.
      }
    });
    return true;
  }
}

registerProcessor("white-noise-processor", WhiteNoiseProcessor);

js

我们通过添加一个静态parameterDescriptors getter 来扩展处理器。它将在内部由AudioWorkletNode 构造函数使用,以用实例化的AudioParam 对象填充其parameters
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("white-noise-processor.js");
const whiteNoiseNode = new AudioWorkletNode(
  audioContext,
  "white-noise-processor",
);
whiteNoiseNode.connect(audioContext.destination);

接下来,在我们的主脚本文件中,我们将加载处理器,创建一个AudioWorkletNode 实例,并将处理器名称传递给它,并将节点连接到音频图。

我们通过添加一个静态parameterDescriptors getter 来扩展处理器。它将在内部由AudioWorkletNode 构造函数使用,以用实例化的AudioParam 对象填充其parameters
const gainParam = whiteNoiseNode.parameters.get("customGain");
gainParam.setValueAtTime(0, audioContext.currentTime);
gainParam.linearRampToValueAtTime(0.5, audioContext.currentTime + 0.5);

规范

现在我们可以像这样更改节点上的增益
Web 音频 API
# 规范

浏览器兼容性

dom-audioworkletnode-parameters

另请参阅