#ifndef __AUDIO_CAPTURER_H__ #define __AUDIO_CAPTURER_H__ #include "iaudiocapturer.h" #include #include #include #include #include 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