AudioWorkletNode
>虽然这个接口可以在 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有一个静态的parameterDescriptorsgetter,从其返回的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);
规范
| 规范 |
|---|
| Web Audio API> # AudioWorkletNode> |