自定义仅输出 AudioWorkletProcessor 的时间戳

Timestamps for custom output-only AudioWorkletProcessor

我想使用网络音频 API 的 AudioWorkletProcessor 构建一个非常低级的音频输出节点。似乎所有的例子都实现了将输入样本转换为输出样本的处理器,但我想做的只是产生输出,所有这些都基于样本的 timestamp .

根据 MDN,BaseAudioContext.currentTime 不是此时间戳的精确来源:

To offer protection against timing attacks and fingerprinting, the precision of audioCtx.currentTime might get rounded depending on browser settings. In Firefox, the privacy.reduceTimerPrecision preference is enabled by default and defaults to 20us in Firefox 59; in 60 it will be 2ms.

一个 hacky 解决方案可能是使用 BaseAudioContext.sampleRate、运行 计数器和输出数组的大小,但这只有在我们可以假设每个样本的计算都没有丢弃和一切都是按顺序计算的,我不确定这些假设是否有效。

在处理框架内,是否有可靠的方法来了解与给定样本索引相关的时间戳?

AudioWorkletGlobalScope 内部,您可以访问 currentTime 以及 currentFrame。它们都可以作为全局变量使用。

https://webaudio.github.io/web-audio-api/#AudioWorkletGlobalScope-attributes

据我所知,它们在任何支持 AudioWorklet.

的浏览器中都是准确的