PulseAudioPlaybackRecorder.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #pragma once
  2. #include "PlaybackRecorder.h"
  3. #include "kiss_fftr.h"
  4. #include <pulse/pulseaudio.h>
  5. #define WAVE_BUFFER_SIZE 1024
  6. namespace WallpaperEngine::Audio::Drivers::Recorders {
  7. class PlaybackRecorder;
  8. class PulseAudioPlaybackRecorder final : public PlaybackRecorder {
  9. public:
  10. /**
  11. * Struct that contains all the required data for the PulseAudio callbacks
  12. */
  13. struct PulseAudioData {
  14. kiss_fftr_cfg kisscfg;
  15. uint8_t* audioBuffer;
  16. uint8_t* audioBufferTmp;
  17. size_t currentWritePointer;
  18. bool fullFrameReady;
  19. pa_stream* captureStream;
  20. };
  21. PulseAudioPlaybackRecorder ();
  22. ~PulseAudioPlaybackRecorder () override;
  23. void update () override;
  24. private:
  25. pa_mainloop* m_mainloop;
  26. pa_mainloop_api* m_mainloopApi;
  27. pa_context* m_context;
  28. PulseAudioData m_captureData;
  29. float m_audioFFTbuffer[WAVE_BUFFER_SIZE] = { 0.0f };
  30. kiss_fft_cpx m_FFTinfo[WAVE_BUFFER_SIZE / 2 + 1] = { { .r = 0.0f, .i = 0.0f } };
  31. float m_FFTdestination64[64] = { 0 };
  32. float m_FFTdestination32[32] = { 0 };
  33. float m_FFTdestination16[16] = { 0 };
  34. };
  35. } // namespace WallpaperEngine::Audio::Drivers::Recorders