AudioWorkletNode - 表示用户定义的 AudioNode 的基类
尽管该接口在安全上下文外部可用,但
BaseAudioContext.audioWorklet属性不可用,因此自定义AudioWorkletProcessor不能在它们外部定义。
AudioWorkletNode 是 Web Audio API 的接口,表示用户定义的 AudioNode 的基类,可以将其与其他节点一起连接到音频路由图。它有一个关联的 AudioWorkletProcessor,该功能在 Web Audio 渲染线程中执行实际的音频处理。
构造函数
AudioWorkletNode()
创建一个 AudioWorkletNode 对象的新实例。
属性
还从其父接口 AudioNode 继承了属性。
AudioWorkletNode.port 只读
返回一个 MessagePort,用于在节点与其关联的 AudioWorkletProcessor 之间进行双向通信。另一端可以使用处理器的 port 属性。
AudioWorkletNode.parameters 只读
返回一个 AudioParamMap — AudioParam 对象的集合。它们是在基础 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 的定义 |
工作草案 | - |
桌面浏览器兼容性
| 特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| 基础支持 | 66 | ≤79 | 未知 | 未知 | 支持 | 未知 |
AudioWorkletNode() 构造函数 | 66 | ≤79 | 未知 | 未知 | 未知 | 未知 |
onprocessorerror | 66 | ≤79 | 未知 | 未知 | 未知 | 未知 |
parameters | 66 | ≤79 | 未知 | 未知 | 支持 | 未知 |
port | 66 | ≤79 | 未知 | 未知 | 支持 | 未知 |
processorerror 事件 | 66 | ≤79 | 未知 | 未知 | 未知 | 未知 |
移动浏览器兼容性
| 特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
|---|---|---|---|---|---|---|---|
| 基础支持 | 66 | 66 | 未知 | 未知 | 未知 | 支持 | 未知 |
AudioWorkletNode() 构造函数 | 66 | 66 | 未知 | 未知 | 未知 | 未知 | 未知 |
onprocessorerror | 66 | 66 | 未知 | 未知 | 未知 | 未知 | 未知 |
parameters | 66 | 66 | 未知 | 未知 | 未知 | 支持 | 未知 |
port | 66 | 66 | 未知 | 未知 | 未知 | 支持 | 未知 |
processorerror 事件 | 66 | 66 | 未知 | 未知 | 未知 | 未知 | 未知 |