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 | 未知 | 未知 | 未知 | 未知 | 未知 |