AudioWorkletNode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.
虽然这个接口可以在 secure contexts 之外调用,但是 BaseAudioContext.audioWorklet
属性不行,从而 AudioWorkletProcessor
不能在外部定义。
Web Audio API 中的 AudioWorkletNode
接口代表了用户定义的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
中使用它的值。
Event handlers
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
实例,并传递处理器的名称,然后将该实例连接到一个 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 |
---|
Web Audio API # AudioWorkletNode |
浏览器兼容性
BCD tables only load in the browser