【问题标题】:At what point does AnalyserNode execute its FFT?AnalyserNode 在什么时候执行它的 FFT?
【发布时间】:2019-09-07 04:25:33
【问题描述】:

我正在尝试使用 Web Audio API 编写自相关算法。自相关仅取决于时域中的数据,而不是频域中的数据,因此我仅使用getByteTimeDomainData()。我很难找到有关如何实现 AnalyserNode 的信息。从我在MDN Docs 中读到的内容,我不清楚FFT 是否仅在调用getByteFrequencyData() 时运行,或者无论如何它都会运行。大型 FFT 非常昂贵,所以我不希望它们随意运行。

【问题讨论】:

    标签: javascript web-audio-api


    【解决方案1】:

    根据规范,我会说期望是在您要求时计算 FFT。
    getByteFrequencyData():

    最近的fftSize 帧用于计算频率数据。

    如果你要求太频繁,它甚至会返回一个缓存的结果:

    如果对 getByteFrequencyData()getFloatFrequencyData() 的另一次调用发生在与先前调用相同的渲染量程内,则当前频率数据不会使用相同的数据进行更新。而是返回之前计算的数据。

    该措辞还表明,计算应按要求进行。

    【讨论】:

    • 是的,它应要求发生。但是如果你在做自相关,FFT 结果应该与你无关。您可能想使用getFloatTimeDomainData 来获取时间数据。
    • @RaymondToy 我认为 OP 想知道使用 AnalyserNode 是否“安全”,因为它不会对遇到的所有事情进行 FFT。
    • 你的答案是正确的。这是按需提供的。但我想规范不会阻止你不断地做 FFT,即使它们不是必需的,而且你只能使用时域数据。
    • @RaymondToy,是的,我也在考虑。如果一个实现真的想要,它可以在每个“渲染量子”计算 FFT,并且仍然符合规范。
    猜你喜欢
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2017-02-20
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多