AudioWorkletGlobalScope - 表示音频接口中用户提供的代码的全局执行上下文

AudioWorkletGlobalScopeWeb Audio API 的接口,表示音频接口中用户提供的代码的全局执行上下文,该上下文定义了自定义 AudioWorkletProcessor 派生的类。每个 BaseAudioContextaudioWorklet 属性下都有一个 AudioWorklet 属性,该属性在单个 AudioWorkletGlobalScope 中运行其代码。

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

属性

currentFrame 只读

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

currentTime 只读

返回一个 double,该值表示正在处理的音频块不断增加的上下文时间。它等于工作集所属的 BaseAudioContextcurrentTime 属性。

sampleRate 只读

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

方法

registerProcessor()

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

实例

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

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

// test-processor.js
class TestProcessor extends AudioWorkletProcessor {
  constructor () {
    super()
    // 在实例化时看到值变化的当前样本帧和时间,
    // 您可以将这两行放到 process 方法中
    console.log(currentFrame)
    console.log(currentTime)
  }
  // 需要该处理方法 - 仅输出静音
  process (inputs, outputs, parameters) {
    return true
  }
}

// 采样率永远不会改变,因为它是 BaseAudioContext 的只读属性,并且仅在其实例化期间设置
console.log(sampleRate)

// 您可以声明任何变量并在处理器中使用它们。例如它可能是带有波表的 ArrayBuffer
const usefulVariable = 42
console.log(usefulVariable)

registerProcessor('test-processor', TestProcessor)

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

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

规范

规范 状态 备注
Web Audio API
AudioWorkletGlobalScope 的定义
工作草案 -

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持66≤79 未知 未知53 未知
currentFrame66≤79 未知 未知53 未知
currentTime66≤79 未知 未知53 未知
registerProcessor66≤79 未知 未知53 未知
sampleRate66≤79 未知 未知53 未知

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持6666 未知 未知 未知47 未知
currentFrame6666 未知 未知 未知47 未知
currentTime6666 未知 未知 未知47 未知
registerProcessor6666 未知 未知 未知47 未知
sampleRate6666 未知 未知 未知47 未知