AudioWorkletProcessor
AudioWorkletProcessor 接口是 Web Audio API 的一部分,它代表了自定义 AudioWorkletNode 后面进行音频处理的代码。它存在于 AudioWorkletGlobalScope 中,并在 Web Audio 渲染线程上运行。相应地,基于它的 AudioWorkletNode 运行在主线程上。
构造函数
注意: AudioWorkletProcessor 及其派生类不能直接从用户提供的代码中实例化。相反,它们只能由关联的 AudioWorkletNode 创建。派生类的构造函数会接收一个选项对象,因此您可以执行自定义的初始化操作 — 有关详细信息,请参阅构造函数页面。
AudioWorkletProcessor()-
创建一个
AudioWorkletProcessor对象的新的实例。
实例属性
port只读-
返回一个
MessagePort,用于处理器与其所属的AudioWorkletNode之间的双向通信。另一端可以通过节点的port属性访问。
实例方法
AudioWorkletProcessor 接口本身不定义任何方法。但是,您必须提供一个 process() 方法,该方法在需要处理音频流时被调用。
事件
AudioWorkletProcessor 接口不响应任何事件。
用法说明
派生类
要定义自定义音频处理代码,您必须从 AudioWorkletProcessor 接口派生一个类。尽管接口中未定义,但派生类必须具有 process 方法。此方法在每个 128 帧的音频块被处理时调用,并接收输入和输出数组以及自定义 AudioParam(如果定义了)的计算值作为参数。您可以使用输入和音频参数值来填充输出数组,输出数组默认包含静音。
可选地,如果您希望在节点上拥有自定义 AudioParam,您可以将 parameterDescriptors 属性作为处理器上的一个静态 getter 提供。返回的 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 Audio API # AudioWorkletProcessor |
浏览器兼容性
加载中…