Я использую FMOD для аудиоанализа, используя систему :: getSpectrumto для получения частотных данных. Мой вопрос здесь о том, какие данные используют FMOD за сценой для выполнения БПФ. Например, если моя выходная частота находится в 44100Hz, и я называю getSpectrum() 30 раз в секунду (каждые 0.03333 секунд) с 1024 образцов:FMOD Spectrum Data Definism
system.getSpectrum(data, 1024, 0, FMOD_DSP_FFT_WINDOW_BLACKMANHARRIS);
ли FMOD просто взять последние 1024 выборки ИКМ, которые играли и выполнять БПФ на них? В этом случае, если 1470 выборок были фактически прочитаны и воспроизведены между вызовами getSpectrum(), обрабатываются только последние 1024 сэмплирования, и мы теряем информацию о промежуточных 446 поплавках. Тогда точность интервала, на который я вызываю getSpectrum, становится невероятно важной, потому что я не получаю одинаковых результатов, если я назову ее после 0.033 секунд и после 0.034 секунд следующий, что делает все очень зависящим от FPS и полностью неопределенный. Может ли кто-нибудь дать мне представление о механике под капотом FMOD и как заставить это быть детерминированным?
Я получаю то, что вы имеете в виду, и я бы точно, что если бы я мог, но FMOD не подвергать какой-либо из его FFT функциональность помимо функции «getSpectrum». Поэтому, даже если я сохраняю данные между кадрами, я не могу выполнить FFT на нем. Это специфический для FMOD контекст, и я в настоящее время работаю над переносом моего кода на использование fftw, если я не могу сделать эту работу :) –