#pragma once #include "dsp_utils.h" #include #include namespace Visualizer { class Spectrum { public: explicit Spectrum(size_t fftSize = 2048); // Configuration void setFFTSize(size_t size); size_t getFFTSize() const { return fftSize_; } void setSampleRate(float sampleRate); void setSmoothing(float smoothing); // 0.0 - 1.0 // Process audio and get spectrum data // Returns magnitude data (size = fftSize / 2) const std::vector& process(const float* audioData, size_t length); // Get frequency for a given bin float binToFrequency(int bin) const; // Reset state void reset(); private: size_t fftSize_; float sampleRate_; float smoothing_; std::unique_ptr fft_; std::vector historyBuffer_; std::vector windowedInput_; std::vector magnitudes_; std::vector smoothedMagnitudes_; size_t bufferedSamples_; void applyWindow(const float* input, float* output, size_t length); void pushSamples(const float* input, size_t length); }; } // namespace Visualizer