AudioWorkletNode

Baseline 已广泛支持

此特性已得到良好支持,可在多种设备和浏览器版本上使用。自 2021 年 4 月起,所有浏览器均已支持此特性。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:虽然该接口可在 安全上下文外部使用,但 BaseAudioContext.audioWorklet 属性不行,因此自定义 AudioWorkletProcessor 无法在安全上下文外部定义。

AudioWorkletNode 接口是 Web Audio API 的一部分,它代表了一个用户定义的 AudioNode 的基类,可以与图中的其他节点连接。它关联着一个 AudioWorkletProcessor,该处理器在 Web Audio 渲染线程中执行实际的音频处理。

EventTarget AudioNode AudioWorkletNode

构造函数

AudioWorkletNode()

创建一个新的 AudioWorkletNode 对象实例。

实例属性

也继承自其父类 AudioNode 的属性.

AudioWorkletNode.port 只读

返回一个 MessagePort,用于节点与其关联的 AudioWorkletProcessor 之间的双向通信。另一端可通过处理器的 port 属性访问。

AudioWorkletNode.parameters 只读

返回一个 AudioParamMap,这是一个 AudioParam 对象的集合。它们在底层 AudioWorkletProcessor 创建期间被实例化。如果 AudioWorkletProcessor 有一个静态的 parameterDescriptors getter,则从中返回的 AudioParamDescriptor 数组将用于在 AudioWorkletNode 上创建 AudioParam 对象。通过这种机制,您可以使自己的 AudioParam 对象可从您的 AudioWorkletNode 访问。然后,您可以在关联的 AudioWorkletProcessor 中使用它们的值。

事件

processorerror

当关联的 AudioWorkletProcessor 中抛出错误时触发。一旦触发,该处理器及其产生的节点将在其整个生命周期内输出静音。

实例方法

也继承自其父类 AudioNode 的方法.

AudioWorkletNode 接口本身不定义任何方法。

示例

在此示例中,我们创建一个自定义 AudioWorkletNode 来输出随机噪声。

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

js
// random-noise-processor.js
class RandomNoiseProcessor extends AudioWorkletProcessor {
  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;
      }
    });
    return true;
  }
}

registerProcessor("random-noise-processor", RandomNoiseProcessor);

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

js
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("random-noise-processor.js");
const randomNoiseNode = new AudioWorkletNode(
  audioContext,
  "random-noise-processor",
);
randomNoiseNode.connect(audioContext.destination);

规范

规范
Web Audio API
# AudioWorkletNode

浏览器兼容性

另见