#pragma once #include "PlaybackRecorder.h" #include "kiss_fftr.h" #include #define WAVE_BUFFER_SIZE 1024 namespace WallpaperEngine::Audio::Drivers::Recorders { class PlaybackRecorder; class PulseAudioPlaybackRecorder final : public PlaybackRecorder { public: /** * Struct that contains all the required data for the PulseAudio callbacks */ struct PulseAudioData { kiss_fftr_cfg kisscfg; uint8_t* audioBuffer; uint8_t* audioBufferTmp; size_t currentWritePointer; bool fullFrameReady; pa_stream* captureStream; }; PulseAudioPlaybackRecorder (); ~PulseAudioPlaybackRecorder () override; void update () override; private: pa_mainloop* m_mainloop; pa_mainloop_api* m_mainloopApi; pa_context* m_context; PulseAudioData m_captureData; float m_audioFFTbuffer[WAVE_BUFFER_SIZE] = { 0.0f }; kiss_fft_cpx m_FFTinfo[WAVE_BUFFER_SIZE / 2 + 1] = { { .r = 0.0f, .i = 0.0f } }; float m_FFTdestination64[64] = { 0 }; float m_FFTdestination32[32] = { 0 }; float m_FFTdestination16[16] = { 0 }; }; } // namespace WallpaperEngine::Audio::Drivers::Recorders