我如何在屏幕外 canvas 中使用网络音频 api?

how can i use web audio api with offscreen canvas?

众所周知,我们无法从 worker 访问 dom 元素。当我创建 AudioContext 时:

var audioCtx = new (canvas.AudioContext || canvas.webkitAudioContext)();

我得到:

Uncaught ReferenceError: window is not defined

有什么办法可以解决这个问题吗?

还没有。 Here is a specs issue讨论这件事情,这是很多演员都希望看到的事情,所以希望有一天它会到来。

注意有一个AudioWorklet API可用,它会创建自己的Worklet(也可以在并行线程中工作),但你仍然需要从UI 线程,并且您无权访问可以在 AudioContext 中完成的所有操作。不过,它可能会满足您的需求。

此外,请注意,通过将 ArrayBuffers 从 UI 线程转移到 Worker 的线程,或使用 SharedArrayBuffers,可能已经可以在 Worker 中完成您必须执行的计算。