AudioWorkletNode
注意:虽然该接口可在 安全上下文外部使用,但 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有一个静态的parameterDescriptorsgetter,则从中返回的AudioParamDescriptor数组将用于在AudioWorkletNode上创建AudioParam对象。通过这种机制,您可以使自己的AudioParam对象可从您的AudioWorkletNode访问。然后,您可以在关联的AudioWorkletProcessor中使用它们的值。
事件
processorerror-
当关联的
AudioWorkletProcessor中抛出错误时触发。一旦触发,该处理器及其产生的节点将在其整个生命周期内输出静音。
实例方法
也继承自其父类 AudioNode 的方法.
AudioWorkletNode 接口本身不定义任何方法。
示例
在此示例中,我们创建一个自定义 AudioWorkletNode 来输出随机噪声。
首先,我们需要定义一个自定义的 AudioWorkletProcessor,它将输出随机噪声,并注册它。请注意,这应该在一个单独的文件中完成。
// random-noise-processor.js
class RandomNoiseProcessor 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("random-noise-processor", RandomNoiseProcessor);
接下来,在我们的主脚本文件中,我们将加载处理器,创建一个 AudioWorkletNode 实例,并将处理器的名称传递给它,然后将该节点连接到音频图。
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("random-noise-processor.js");
const randomNoiseNode = new AudioWorkletNode(
audioContext,
"random-noise-processor",
);
randomNoiseNode.connect(audioContext.destination);
规范
| 规范 |
|---|
| Web Audio API # AudioWorkletNode |
浏览器兼容性
加载中…