AudioWorkletGlobalScope: registerProcessor() 方法

Baseline 已广泛支持

此特性已得到良好支持,可在多种设备和浏览器版本上使用。自 2021 年 4 月起,所有浏览器均已支持此特性。

AudioWorkletGlobalScope 接口的 registerProcessor 方法会根据指定的 name 注册一个派生自 AudioWorkletProcessor 接口的类构造函数。

语法

js
registerProcessor(name, processorCtor)

参数

name

一个代表处理器注册名称的字符串。

processorCtor

派生自 AudioWorkletProcessor 接口的类的构造函数。

注意: 在处理器注册后,一个 { name: constructor } 键值对会被保存在 AudioWorkletGlobalScope 内部。创建基于已注册处理器的 AudioWorkletNode 时会引用 name。内部会创建一个具有给定名称的新处理器并将其与新节点关联。

返回值

无(undefined)。

异常

NotSupportedError DOMException

在以下情况下会抛出异常

  • name 为空字符串。
  • 具有给定 name 的构造函数已被注册。不允许重复注册相同的名称。
TypeError

在以下情况下会抛出异常

  • processorCtor 不是一个可调用的构造函数。
  • 构造函数的 parameterDescriptors 属性存在,但未返回一个 AudioParamDescriptor 类型的对象的数组。

示例

在此示例中,我们创建一个自定义的 AudioWorkletNode 来输出静音。

首先,我们需要定义一个自定义的 AudioWorkletProcessor 并进行注册。请注意,这应该在一个单独的文件中完成。

js
// test-processor.js
class TestProcessor extends AudioWorkletProcessor {
  process(inputs, outputs, parameters) {
    return true;
  }
}

registerProcessor("test-processor", TestProcessor);

接下来,在我们的主脚本文件中,我们将加载处理器,创建一个 AudioWorkletNode 实例(在调用 registerProcessor 时传入我们使用的处理器名称),并将其连接到音频图。

js
const audioContext = new AudioContext();
await audioContext.audioWorklet.addModule("test-processor.js");
const node = new AudioWorkletNode(audioContext, "test-processor");
node.connect(audioContext.destination);

规范

规范
Web Audio API
# dom-audioworkletglobalscope-registerprocessor

浏览器兼容性

另见