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