okr*_*ram 8 javascript fft html5-audio web-audio-api
整个互联网上没有一个工作示例说明如何在浏览器中对声音文件/缓冲区/音频缓冲区执行 FFT 分析而不需要播放。 例如,Web 音频 API 已更改太多,无法再使用此库https://github.com/corbanbrook/dsp.js 。目前所有其他线索都无法解决问题。
编辑:我不需要操作任何数据,只需读取音频不同时刻的频谱。解决方案的输入可以是任何形式的数据(wav 文件、数组缓冲区、音频缓冲区等),但不能是流。理想情况下,预期输出将是数组(频率箱幅度)的数组(时刻)。
如果您必须使用 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.
})
Run Code Online (Sandbox Code Playgroud)
不过,我认为只有 Chrome 支持suspend
离线上下文。
您可以使用离线音频上下文做很多事情,但这只会尽快运行整个节点图以渲染生成的音频块。我不知道分析器节点在这种情况下如何工作(因为它的音频输出是无用的)。
在我看来,您是正确的,因为如果不实际实时播放文件,就无法使用 Web Audio API。您必须自己进行分析,应该有很多可用的库(因为它只是数字运算)。Webworkers 或 wasm 可能是正确的选择。
归档时间: |
|
查看次数: |
3101 次 |
最近记录: |