#pragma once #include #include #include #include #include #include #include #include #include class AudioGrabber { public: enum class ReqMode { FFT = 0, RMS = 1, PEAK = 2, FILTER = 3, ALL = 4 }; AudioGrabber(); ~AudioGrabber(); bool read(stereoSample *buffer, uint32_t bufferSize); static AudioGrabber* createAudioGrabber(); void init(); Audio::FilterHelper& getFilter(); FFT fft; ReqMode requestMode = ReqMode::FFT; stereoSampleFrame loudness = {0.0, 0.0}; stereoSampleFrame getLoudness(); bool work(); VUtils::Environment *env = nullptr; double getBass(); private: std::mutex m_mtx; stereoSample *m_buffer{}; void calculateRMS(stereoSample *pFrame); void calculatePEAK(stereoSample *pFrame); double m_scale = 1.0; int availableData = 0; Audio::FilterHelper m_filter; };