如何在浏览器中对声音文件/缓冲器/音频缓冲器进行FFT分析而不需要播放,整个互联网上没有单一的工作示例。 Web音频API已经发生了太大的变化,无法再使用这个库https://github.com/corbanbrook/dsp.js了。所有其他线索目前都无法解决问题。
编辑:我不需要操纵任何数据,只是为了在音频的不同时刻读取频谱。解决方案的输入可以是任何形式的数据(wav文件,arraybuffer,audiobuffer,任何东西),但不是流。理想情况下,预期输出将是阵列的阵列(时刻)(频率仓振幅)。
您可以使用离线audiocontext做很多事情,但这样可以尽可能快地运行整个节点图形来呈现生成的音频块。我没有看到分析器节点如何在这种情况下工作(因为它的音频输出是无用的)。
在我看来你是正确的,因为你不能在没有实时播放文件的情况下使用Web Audio API。你必须自己做分析,应该有很多可用的库(因为它只是数字计算)。网络工作者或者主义者可能是要走的路。
你需要4件事:
前3个可以从网络搜索中找到(Github,这里,et.al。)
如果必须使用WebAudio,那么使用OfflineAudioContext
的方法就是这样。然后,当您需要获取频率数据时,请致电suspend(time)
。类似于以下内容:
c = new OfflineAudioContext(....);
a = new AnalyserNode(c);
src.connect(a); // src is the signal you want to analyze.
c.suspend(t1)
.then(() => {
a.getFloatFrequencyData(array1);
})
.then(() => c.resume());
c.suspend(t2)
.then(() => {
a.getFloatFrequencyData(array2);
})
.then(() => c.resume());
// More suspends if needed
// Render everything now
c.startRendering()
.then((buffer => {
// Maybe do something now that all the frequency data is available.
})
但是,我认为只有Chrome支持带有离线上下文的suspend
。