audio_capturer.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. #include <vector>
  10. #include <mutex>
  11. class AudioCapturer : public IAudioCapturer
  12. {
  13. public:
  14. bool Init(Type deviceType) override;
  15. bool Start() override;
  16. void Stop() override;
  17. const AudioFormat& GetFormat() const override { return _format; }
  18. int readAudioData(char* buf, int maxLen) override;
  19. private:
  20. mutable AudioFormat _format;
  21. bool _isInit = false;
  22. Type _deviceType;
  23. IMMDeviceEnumerator* _pDeviceEnumerator = nullptr;
  24. IMMDevice* _pDevice = nullptr;
  25. IAudioClient* _pAudioClient = nullptr;
  26. IAudioCaptureClient* _pAudioCaptureClient = nullptr;
  27. std::thread* _captureThread = nullptr;
  28. bool _loopFlag = false;
  29. WAVEFORMATEXTENSIBLE _formatex;
  30. std::vector<char> _buffer;
  31. std::mutex _bufferMutex;
  32. bool _CreateDeviceEnumerator(IMMDeviceEnumerator** enumerator);
  33. bool _CreateDevice(IMMDeviceEnumerator* enumerator, IMMDevice** device);
  34. bool _CreateAudioClient(IMMDevice* device, IAudioClient** audioClient);
  35. bool _IsFormatSupported(IAudioClient* audioClient);
  36. bool _GetPreferFormat(IAudioClient* audioClient,
  37. WAVEFORMATEXTENSIBLE* formatex);
  38. bool _InitAudioClient(IAudioClient* audioClient,
  39. WAVEFORMATEXTENSIBLE* formatex);
  40. bool _CreateAudioCaptureClient(IAudioClient* audioClient,
  41. IAudioCaptureClient** audioCaptureClient);
  42. bool _ThreadRun(IAudioClient* audio_client,
  43. IAudioCaptureClient* audio_capture_client);
  44. };
  45. #endif