AudioWorkletNode
虽然这个接口可以在 secure contexts 之外调用,但是 BaseAudioContext.audioWorklet (en-US) 属性不行,从而 AudioWorkletProcessor 不能在外部定义。
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, 它将输出白噪声并进行注册。注意,这需要在一个单独的文件中完成。
js
// 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.
js
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 |
|---|
| Web Audio API # AudioWorkletNode |
浏览器兼容性
BCD tables only load in the browser