2013-08-02 10 views
1

Я использую 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 и как заставить это быть детерминированным?

ответ

0

Мне пришлось связаться с FMOD-поддержкой для ответа. Я коротко, FMODs FFT обновляется каждые 1024 выборки, и я должен получить новые данные как можно скорее и проверить, отличается ли это от времени, которое я получил.

Link to Question on FMOD Forums

1

Обычно, если вы обрабатываете аудиоданные с приблизительными интервалами видеофрагмента или другими подобными событиями таймера, вы сначала вычисляете количество новых полученных образцов аудио (плюс любые оставшиеся образцы ранее), делясь на FFT-кадров длину и/или смещение, обрезать до целого числа и обрабатывать много кадров и сохранять оставшиеся необработанные сэмплы для следующего времени обработки, чтобы вы не «теряли информацию о них».

Обычно вы не просто вызываете свой БПФ один раз на обратный вызов 30 Гц, не проверяя количество новых образцов аудио и буферизируя их по мере необходимости.

Если вы не хотите, чтобы графический дисплей дрожал, вам нужно будет сделать некоторую интерполяцию среди результатов звукового фрейма и/или синхронизировать ваши аудио и видео часы более точно, используя смещения кадра, которые хорошо разделяются.

+0

Я получаю то, что вы имеете в виду, и я бы точно, что если бы я мог, но FMOD не подвергать какой-либо из его FFT функциональность помимо функции «getSpectrum». Поэтому, даже если я сохраняю данные между кадрами, я не могу выполнить FFT на нем. Это специфический для FMOD контекст, и я в настоящее время работаю над переносом моего кода на использование fftw, если я не могу сделать эту работу :) –

 Смежные вопросы

  • Нет связанных вопросов^_^