AudioWorkletGlobalScope - 表示音频接口中用户提供的代码的全局执行上下文
AudioWorkletGlobalScope
是 Web Audio API 的接口,表示音频接口中用户提供的代码的全局执行上下文,该上下文定义了自定义 AudioWorkletProcessor
派生的类。每个 BaseAudioContext
在 audioWorklet
属性下都有一个 AudioWorklet
属性,该属性在单个 AudioWorkletGlobalScope
中运行其代码。
由于全局执行上下文是在当前 BaseAudioContext
之间共享的,因此可以定义任何其他变量并执行工作集中允许的任何操作 - 除了定义 AudioWorkletProcessor
派生的类之外。
属性
currentFrame
只读
返回一个整数,该整数表示正在处理的音频块的不断增加的当前样本帧。在处理每个音频块后,它会增加 128(渲染量子的大小)。
currentTime
只读
返回一个 double
,该值表示正在处理的音频块不断增加的上下文时间。它等于工作集所属的 BaseAudioContext
的 currentTime
属性。
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 的定义 |
工作草案 | - |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 66 | ≤79 | 未知 | 未知 | 53 | 未知 |
currentFrame | 66 | ≤79 | 未知 | 未知 | 53 | 未知 |
currentTime | 66 | ≤79 | 未知 | 未知 | 53 | 未知 |
registerProcessor | 66 | ≤79 | 未知 | 未知 | 53 | 未知 |
sampleRate | 66 | ≤79 | 未知 | 未知 | 53 | 未知 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 66 | 66 | 未知 | 未知 | 未知 | 47 | 未知 |
currentFrame | 66 | 66 | 未知 | 未知 | 未知 | 47 | 未知 |
currentTime | 66 | 66 | 未知 | 未知 | 未知 | 47 | 未知 |
registerProcessor | 66 | 66 | 未知 | 未知 | 未知 | 47 | 未知 |
sampleRate | 66 | 66 | 未知 | 未知 | 未知 | 47 | 未知 |