Javascript AnalyserNode 低频(低音)

Javascript AnalyserNode low frequencies (bass)

我已经阅读了关于 AnalyserNode 的 MDN Article 并且还试图理解 W3C 文档。 我有一个工作代码:

但是非常低的 "bass" 频率只占据了 5 个小节左右.. 是否可以更详细地显示较低的频率?

不,不是没有为分析器使用更大的 FFT。 FFT 中的数学运算方式是线性分布的;如果您想要更多细节,则需要在整个频谱中获得更多细节(当然,相应的 CPU 成本)。

@cwilso 基本上是对的。

但这里有一个替代方案,它可以通过(相当)一些工作、分析和思考来获得你想要的东西。

对信号进行低通滤波以获得您感兴趣的低频。抽取信号。将此信号保存在 AudioBuffer 中。使用 AudioBufferSourceAnalyserNode 创建一个 OfflineAudioContext。 运行离线上下文并从分析器中获取频率数据。

例如,假设上下文是 运行,频率为 48 kHz。我们想要细化 3 kHz 以下的频率。因此,创建截止频率为 3 kHz 的低通滤波器。 (使用单个 IIRFilter 或多个双二阶滤波器的级联。)获取过滤后的音频并将其发送到 AudioWorklet 或 ScriptProcessor。该节点将通过仅保留每第 16 个样本将信号抽取 8 (48/(2*3)) 倍。收集足够的数据并将其保存在采样率为 6 kHz 的 AudioBuffer 中。这种抽取产生带宽为 3 kHz、采样率为 6 kHz 的信号。因此,信号中有趣的部分占据了整个带宽。

现在我们有了这个缓冲区,创建一个采样率为 3 kHz 的离线上下文。在此上下文中,使用该缓冲区创建一个 AudioBufferSourceNode,并将其传递给 AnalyserNode。从分析仪获取频率数据。例如,如果您使用 1024 个点,则每个频率仓现在为 3 kHz/1024 或大约 3 Hz 宽。您已经优化了低频。