AudioWorkletNode - 表示用户定义的 AudioNode 的基类

尽管该接口在安全上下文外部可用,但 BaseAudioContext.audioWorklet 属性不可用,因此自定义 AudioWorkletProcessor 不能在它们外部定义。

AudioWorkletNodeWeb Audio API 的接口,表示用户定义的 AudioNode 的基类,可以将其与其他节点一起连接到音频路由图。它有一个关联的 AudioWorkletProcessor,该功能在 Web Audio 渲染线程中执行实际的音频处理。

构造函数

AudioWorkletNode()

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

属性

还从其父接口 AudioNode 继承了属性。

AudioWorkletNode.port 只读

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

AudioWorkletNode.parameters 只读

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

事件处理程序

AudioWorkletNode.onprocessorerror

在关联的 AudioWorkletProcessor 中引发错误时触发。一旦触发,处理器及其节点将在其整个生命周期内输出静默状态。

方法

还从其父接口 AudioNode 继承了方法。

AudioWorkletNode 接口没有定义自己的任何方法。

实例

在这个例子中,我们创建了一个自定义的 AudioWorkletNode,它输出白噪声。

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

// white-noise-processor.js
class WhiteNoiseProcessor 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('white-noise-processor', WhiteNoiseProcessor)

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

const audioContext = new AudioContext()
await audioContext.audioWorklet.addModule('white-noise-processor.js')
const whiteNoiseNode = new AudioWorkletNode(audioContext, 'white-noise-processor')
whiteNoiseNode.connect(audioContext.destination)

规范

规范 状态 备注
Web Audio API
AudioWorkletNode 的定义
工作草案 -

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持66≤79 未知 未知 支持 未知
AudioWorkletNode() 构造函数66≤79 未知 未知 未知 未知
onprocessorerror66≤79 未知 未知 未知 未知
parameters66≤79 未知 未知 支持 未知
port66≤79 未知 未知 支持 未知
processorerror 事件66≤79 未知 未知 未知 未知

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持6666 未知 未知 未知 支持 未知
AudioWorkletNode() 构造函数6666 未知 未知 未知 未知 未知
onprocessorerror6666 未知 未知 未知 未知 未知
parameters6666 未知 未知 未知 支持 未知
port6666 未知 未知 未知 支持 未知
processorerror 事件6666 未知 未知 未知 未知 未知