PulseAudioPlaybackRecorder.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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] = {
  31. {.r = 0.0f, .i = 0.0f}
  32. };
  33. float m_FFTdestination64 [64] = {0};
  34. float m_FFTdestination32 [32] = {0};
  35. float m_FFTdestination16 [16] = {0};
  36. };
  37. } // namespace WallpaperEngine::Audio::Drivers::Recorders