AudioWorkletGlobalScope

基线 广泛可用

此功能已经稳定,并且可以在许多设备和浏览器版本上运行。它自以下时间起在浏览器中可用 2021 年 4 月.

AudioWorkletGlobalScope 接口是 Web 音频 API 的一部分,它表示用户提供的代码的全局执行上下文,该代码定义自定义的 AudioWorkletProcessor 派生类。

每个 BaseAudioContextaudioWorklet 属性下都有一个可用的 AudioWorklet,它在单个 AudioWorkletGlobalScope 中运行其代码。

由于全局执行上下文在当前 BaseAudioContext 中共享,因此可以定义任何其他变量并执行工作线程中允许的任何操作,但定义 AudioWorkletProcessor 派生类除外。

WorkletGlobalScope AudioWorkletGlobalScope

实例属性

此接口还继承其父接口 WorkletGlobalScope 上定义的属性。

currentFrame 只读

返回一个整数,表示正在处理的音频块的不断增长的当前样本帧。在每个音频块处理后,它会递增 128(渲染量子的大小)。

currentTime 只读

返回一个双精度浮点数,表示正在处理的音频块的不断增长的上下文时间。它等于工作线程所属的 BaseAudioContextcurrentTime 属性。

sampleRate 只读

返回一个浮点数,表示关联的 BaseAudioContext 的采样率。

实例方法

此接口还继承其父接口 WorkletGlobalScope 上定义的方法。

registerProcessor()

注册从 AudioWorkletProcessor 接口派生的类。然后,可以通过创建 AudioWorkletNode 并提供其注册名称来使用该类。

示例

在这个例子中,我们在自定义 AudioWorkletProcessor 的构造函数中将所有全局属性输出到控制台。

首先,我们需要定义处理器并注册它。请注意,这应该在单独的文件中完成。

js
// AudioWorkletProcessor defined in : test-processor.js
class TestProcessor extends AudioWorkletProcessor {
  constructor() {
    super();

    // Logs the current sample-frame and time at the moment of instantiation.
    // They are accessible from the AudioWorkletGlobalScope.
    console.log(currentFrame);
    console.log(currentTime);
  }

  // The process method is required - output silence,
  // which the outputs are already filled with.
  process(inputs, outputs, parameters) {
    return true;
  }
}

// Logs the sample rate, that is not going to change ever,
// because it's a read-only property of a BaseAudioContext
// and is set only during its instantiation.
console.log(sampleRate);

// You can declare any variables and use them in your processors
// for example it may be an ArrayBuffer with a wavetable
const usefulVariable = 42;
console.log(usefulVariable);

registerProcessor("test-processor", TestProcessor);

接下来,在我们的主脚本文件中,我们将加载处理器,创建 AudioWorkletNode 的实例(将处理器的名称传递给它),并将节点连接到音频图。我们应该在控制台中看到 console.log() 调用的输出。

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

规范

规范
Web 音频 API
# AudioWorkletGlobalScope

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅