AudioWorkletNode

Experimental: 这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

虽然这个接口可以在 secure contexts 之外调用, 但是 BaseAudioContext.audioWorklet (en-US) 属性不行, 从而 AudioWorkletProcessors 不能在外部定义.

Web Audio API 中的  AudioWorkletNode  接口代表了用户定义的AudioNode的基类, 该基类可以与其他节点一起连接到音频路由图. 其具有关联的AudioWorkletProcessor, 它在 Web Audio 执行实际的音频处理.

构造函数

AudioWorkletNode() (en-US)
为 AudioWorkletNode 创建一个新的实例对象.

属性

也继承父类的属性, AudioNode.

AudioWorkletNode.port (en-US) 只读
返回一个 MessagePort 用于节点与其关联的 AudioWorkletProcessor 间的双向通讯. 另一端在处理器属性port (en-US) 下可用.
AudioWorkletNode.parameters (en-US) 只读
返回一个 AudioParamMap (en-US) —  AudioParam 对象的集合. 它们在创建 AudioWorkletProcessor的过程中被实例化. 如果 AudioWorkletProcessor 有一个静态的 parameterDescriptors (en-US) getter, 从其返回的 AudioParamDescriptor 数组用于在 AudioWorkletNode 创建 AudioParam 对象. 通过这种机制,使得 AudioParam 对象可以从 AudioWorkletNode 中访问. 你可以在与其关联的 AudioWorkletProcessor 中使用它的值.

Event handlers

AudioWorkletNode.onprocessorerror (en-US)
在关联的 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 实例, 并传递处理器的名称, 然后将该实例连接到一个audio graph.

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

规范

Specification Status Comment
Web Audio API
AudioWorkletNode
Recommendation

浏览器兼容性

BCD tables only load in the browser

See also