#include <fftw3.h>
-#include <ardour/types.h>
+#include "ardour/types.h"
class FFT
{
FFT(uint32_t);
~FFT();
+ enum WindowingType {
+ NONE,
+ HANN
+ };
+
void reset();
- void analyze(ARDOUR::Sample *);
+ void analyze(ARDOUR::Sample *, WindowingType w = NONE);
void calculate();
- uint32_t bins() const { return _dataSize; }
+ uint32_t bins() const { return _data_size; }
+
+ float power_at_bin(uint32_t i) const { return _power_at_bin[i]; }
+ float phase_at_bin(uint32_t i) const { return _phase_at_bin[i]; }
- float powerAtBin(uint32_t i) const { return _powerAtBin[i]; }
- float phaseAtBin(uint32_t i) const { return _phaseAtBin[i]; }
private:
- uint32_t const _windowSize;
- uint32_t const _dataSize;
+ float *get_hann_window();
+
+ uint32_t const _window_size;
+ uint32_t const _data_size;
uint32_t _iterations;
+ float *_hann_window;
+
float *_fftInput;
float *_fftOutput;
- float *_powerAtBin;
- float *_phaseAtBin;
+ float *_power_at_bin;
+ float *_phase_at_bin;
fftwf_plan _plan;
};