WebAudio API / javascript

时间:2018-06-12 00:46:19

标签: signal-processing fft web-audio web-audio-api

我有一个单通道波以8000 Hz的采样率进入。

我需要实时分析5 Hz和300 Hz之间的频率,重点是10到60 Hz的信号。

我的想法最初是将8000 Hz样品放入缓冲液中,收集大约32000个样品。然后,对其运行32000窗口大小的傅立叶变换。

这里的原因是对于低频信号,你需要一个更大的窗口尺寸(对吗?)

但是,如果我试图实时显示此信号,似乎AudioAnalyserNode可能不是一个好选择。我知道WebAudio API允许我获取原始数据,但理想情况下,AudioAnalyserNode可以基于之前的32000个样本运行新的fft,即使少量样本已成为新的可用样本。此时,fft数据似乎每四秒更新一次。

我是否必须创建一个特殊的“运行垃圾箱”,以使显示屏每4秒钟更新一次?或者,我可以使用的最小窗口大小是什么,仍能在此范围内获得合理的值? 32000是一个足够大的窗口大小?

我在javascript中使用WebAudio API分析器节点,但如果我必须获取原始数据,我也愿意在javascript中将库更改为另一个。

1 个答案:

答案 0 :(得分:1)

使用AnalyserNode,您可以根据需要随时拨打getFloatFrequencyData。这将返回最后fftSize个样本的FFT。这些得到了平滑。有关完整详细信息,请参阅AnalyserNode Interface

此外,WebAudio规范允许您使用user-selectable sample rate构建AudioContext。您可以将采样率设置为8000 Hz。然后,您的FFT可以以更低的复杂度获得更精细的分辨率。

但是,我认为任何浏览器都没有实现此功能。

另一种方法是获得支持的音频卡,允许采样率为8000 Hz,并设置系统将其用作默认音频输出设备,然后音频上下文的采样率为8000 Hz。 / p>