我正在使用 FMOD 进行音频分析,使用 system::getSpectrum 来获取频率数据。我的问题是关于 FMOD 在幕后使用哪些数据来执行 FFT。例如,如果我的输出速率为 44100Hz,并且我每秒调用 getSpectrum() 30 次(每 0.03333 秒),有 1024 个样本:
system.getSpectrum(data, 1024, 0, FMOD_DSP_FFT_WINDOW_BLACKMANHARRIS);
FMOD 是否只获取最后播放的 1024 个 PCM 样本并对其执行 FFT?在这种情况下,如果在 getSpectrum() 调用之间实际读取并播放了 1470 个样本,则仅处理最后 1024 个样本,并且我们丢失了中间 446 个浮点数的信息。然后我调用 getSpectrum 的时间间隔的精度变得非常重要,因为如果我在 0.033 秒后调用它一次和在 0.034 秒后调用它,我不会得到相同的结果,这使得整个事情非常依赖于 FPS 并且完全未定。谁能向我提供有关 FMOD 的底层机制以及如何使其具有确定性的见解?