AudioWorkletProcessor
AudioWorkletProcessor
是 Web 音频 API 中的一个接口,它代表自定义 AudioWorkletNode
背后的音频处理代码。它位于 AudioWorkletGlobalScope
中,并在 Web 音频渲染线程上运行。反过来,基于它的 AudioWorkletNode
在主线程上运行。
构造函数
注意: AudioWorkletProcessor
及其派生类不能直接从用户提供的代码实例化。相反,它们仅在创建关联的 AudioWorkletNode
时由内部创建。派生类的构造函数将使用一个选项对象调用,因此您可以执行自定义初始化过程——有关详细信息,请参阅构造函数页面。
AudioWorkletProcessor()
-
创建一个新的
AudioWorkletProcessor
对象实例。
实例属性
port
只读-
返回一个
MessagePort
,用于在处理器与其所属的AudioWorkletNode
之间进行双向通信。另一端在节点的port
属性下可用。
实例方法
AudioWorkletProcessor
接口本身没有定义任何方法。但是,您必须提供一个 process()
方法,该方法用于处理音频流。
事件
AudioWorkletProcessor
接口不响应任何事件。
使用注意事项
派生类
要定义自定义音频处理代码,您必须从 AudioWorkletProcessor
接口派生一个类。尽管未在接口中定义,但派生类必须具有 process
方法。此方法将针对每块 128 个样本帧调用,并使用输入和输出数组以及自定义 AudioParam
的计算值(如果定义了这些值)作为参数。您可以使用输入和音频参数值来填充输出数组,该数组默认情况下包含静音。
如果您希望在节点上使用自定义 AudioParam
,则可以选择提供一个 parameterDescriptors
属性作为处理器的静态获取器。返回的基于 AudioParamDescriptor
对象的数组用于在 AudioWorkletNode
实例化过程中内部创建 AudioParam
。
生成的 AudioParam
位于节点的 parameters
属性中,可以使用标准方法(如 linearRampToValueAtTime
)进行自动化。它们的计算值将传递到处理器的 process()
方法中,供您相应地塑造节点输出。
处理音频
创建一个自定义音频处理机制的示例算法是
- 创建一个单独的文件;
- 在文件中
- 扩展
AudioWorkletProcessor
类(请参阅 "派生类" 部分)并在其中提供您自己的process()
方法; - 使用
AudioWorkletGlobalScope.registerProcessor()
方法注册处理器;
- 扩展
- 使用您音频上下文的
audioWorklet
属性上的addModule()
方法加载文件; - 创建一个基于处理器的
AudioWorkletNode
。处理器将由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
实例,将处理器的名称传递给它,然后将节点连接到音频图。
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 音频 API # AudioWorkletProcessor |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。