| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #ifndef __AUDIO_CAPTURER_H__
- #define __AUDIO_CAPTURER_H__
- #include "iaudiocapturer.h"
- #include <audioclient.h>
- #include <combaseapi.h>
- #include <mmdeviceapi.h>
- #include <memory>
- #include <thread>
- class AudioCapturer : public IAudioCapturer
- {
- public:
- bool Init(Type deviceType, CallBack callback, void* userInfo = nullptr) override;
- bool Start() override;
- void Stop() override;
- const AudioFormat& GetFormat() const override { return _format; }
- private:
- mutable AudioFormat _format;
- bool _isInit = false;
- CallBack _callback;
- Type _deviceType;
- IMMDeviceEnumerator* _pDeviceEnumerator = nullptr;
- IMMDevice* _pDevice = nullptr;
- IAudioClient* _pAudioClient = nullptr;
- IAudioCaptureClient* _pAudioCaptureClient = nullptr;
- std::thread* _captureThread = nullptr;
- bool _loopFlag = false;
- WAVEFORMATEXTENSIBLE _formatex;
- void* _userInfo = nullptr;
- bool _CreateDeviceEnumerator(IMMDeviceEnumerator** enumerator);
- bool _CreateDevice(IMMDeviceEnumerator* enumerator, IMMDevice** device);
- bool _CreateAudioClient(IMMDevice* device, IAudioClient** audioClient);
- bool _IsFormatSupported(IAudioClient* audioClient);
- bool _GetPreferFormat(IAudioClient* audioClient,
- WAVEFORMATEXTENSIBLE* formatex);
- bool _InitAudioClient(IAudioClient* audioClient,
- WAVEFORMATEXTENSIBLE* formatex);
- bool _CreateAudioCaptureClient(IAudioClient* audioClient,
- IAudioCaptureClient** audioCaptureClient);
- bool _ThreadRun(IAudioClient* audio_client,
- IAudioCaptureClient* audio_capture_client);
- };
- #endif
|