gpt4 book ai didi

javascript - FFT 与 offlineAudioContext

转载 作者:行者123 更新时间:2023-11-29 22:09:40 28 4
gpt4 key购买 nike

我正在尝试对音频文件进行频率分析,但我希望它在不播放的情况下发生。我发现有一个 offlineAudioContext ,这可能是我在这里需要的。

完整代码在this jsfiddle

Web Audio API 对我来说是一个未开发的领域,我不完全确定我在做什么,很多教程都专注于实时音频,而这正是我想要避免的。

context.oncomplete 中,我设法获得了一些看起来准确的渲染音频缓冲区数据。当从 fft 获取数据时,我似乎得到了一组非常小的数据,我猜这只是最后一个样本的数据。我宁愿为我正在加载的音频文件的每 x 毫秒获取此数据。我很想知道如何获取这种格式的数据?

基本上我期待的是这样的:

[
// array with frequency data for every (nth) frequency band for 1st sample,
// array with frequency data for every (nth) frequency band for 2nd sample,
// array with frequency data for every (nth) frequency band for 3rd sample,

]

最佳答案

当您在 AnalyserNode 上设置 fftSize 时,您将获得 (fftSize/2) 个 bin。这就是为什么您看到的数据比您预期的要少得多。

本质上发生的事情是 getByteFrequencyData 只查看渲染缓冲区的前 128 个样本,其余的就被忽略了。

相反,您可能想尝试使用 ScriptProcessorNode,其 bufferSize 等于您的 fftSize。然后,在 ScriptProcessorNodeonaudioprocess 事件处理程序中,您可以获取缓冲区并获取其 FFT。像这样:

var processor = context.createScriptProcessor(fftSize, 1, 1);
source.connect(processor);

processor.onaudioprocess = function( e ) {
var input = e.inputBuffer.getChannelData(0),
data = new Uint8Array(fftSamples);
fft.getByteFrequencyData(data);
// do whatever you want with `data`
}

关于javascript - FFT 与 offlineAudioContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18718337/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com