AudioWorkletGlobalScope
AudioWorkletGlobalScope
接口是 Web 音频 API 的一部分,它表示用户提供的代码的全局执行上下文,该代码定义自定义的 AudioWorkletProcessor
派生类。
每个 BaseAudioContext
在 audioWorklet
属性下都有一个可用的 AudioWorklet
,它在单个 AudioWorkletGlobalScope
中运行其代码。
由于全局执行上下文在当前 BaseAudioContext
中共享,因此可以定义任何其他变量并执行工作线程中允许的任何操作,但定义 AudioWorkletProcessor
派生类除外。
实例属性
此接口还继承其父接口 WorkletGlobalScope
上定义的属性。
currentFrame
只读-
返回一个整数,表示正在处理的音频块的不断增长的当前样本帧。在每个音频块处理后,它会递增 128(渲染量子的大小)。
currentTime
只读-
返回一个双精度浮点数,表示正在处理的音频块的不断增长的上下文时间。它等于工作线程所属的
BaseAudioContext
的currentTime
属性。 sampleRate
只读-
返回一个浮点数,表示关联的
BaseAudioContext
的采样率。
实例方法
此接口还继承其父接口 WorkletGlobalScope
上定义的方法。
registerProcessor()
-
注册从
AudioWorkletProcessor
接口派生的类。然后,可以通过创建AudioWorkletNode
并提供其注册名称来使用该类。
示例
在这个例子中,我们在自定义 AudioWorkletProcessor
的构造函数中将所有全局属性输出到控制台。
首先,我们需要定义处理器并注册它。请注意,这应该在单独的文件中完成。
// 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()
调用的输出。
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 表仅在浏览器中加载