audio_capturer.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #ifndef __AUDIO_CAPTURER_H__
  2. #define __AUDIO_CAPTURER_H__
  3. #include "iaudiocapturer.h"
  4. #include <audioclient.h>
  5. #include <combaseapi.h>
  6. #include <mmdeviceapi.h>
  7. #include <memory>
  8. #include <thread>
  9. class AudioCapturer : public IAudioCapturer
  10. {
  11. public:
  12. bool Init(Type deviceType, CallBack callback, void* userInfo = nullptr) override;
  13. bool Start() override;
  14. void Stop() override;
  15. const AudioFormat& GetFormat() const override { return _format; }
  16. private:
  17. mutable AudioFormat _format;
  18. bool _isInit = false;
  19. CallBack _callback;
  20. Type _deviceType;
  21. IMMDeviceEnumerator* _pDeviceEnumerator = nullptr;
  22. IMMDevice* _pDevice = nullptr;
  23. IAudioClient* _pAudioClient = nullptr;
  24. IAudioCaptureClient* _pAudioCaptureClient = nullptr;
  25. std::thread* _captureThread = nullptr;
  26. bool _loopFlag = false;
  27. WAVEFORMATEXTENSIBLE _formatex;
  28. void* _userInfo = nullptr;
  29. bool _CreateDeviceEnumerator(IMMDeviceEnumerator** enumerator);
  30. bool _CreateDevice(IMMDeviceEnumerator* enumerator, IMMDevice** device);
  31. bool _CreateAudioClient(IMMDevice* device, IAudioClient** audioClient);
  32. bool _IsFormatSupported(IAudioClient* audioClient);
  33. bool _GetPreferFormat(IAudioClient* audioClient,
  34. WAVEFORMATEXTENSIBLE* formatex);
  35. bool _InitAudioClient(IAudioClient* audioClient,
  36. WAVEFORMATEXTENSIBLE* formatex);
  37. bool _CreateAudioCaptureClient(IAudioClient* audioClient,
  38. IAudioCaptureClient** audioCaptureClient);
  39. bool _ThreadRun(IAudioClient* audio_client,
  40. IAudioCaptureClient* audio_capture_client);
  41. };
  42. #endif