#pragma once #include "ehs/EHS.h" #include "BaseAudioDevice.h" #include #include #include #include struct IMMDevice; namespace ehs { class EHS_LIB_IO AudioDevice final : public BaseAudioDevice { private: IMMDevice* hdl; IAudioClient* client; IAudioRenderClient* playbackClient; IAudioCaptureClient* captureClient; public: ~AudioDevice() override; AudioDevice(); AudioDevice(AudioDevice&& device) noexcept; AudioDevice(const AudioDevice& device); AudioDevice& operator=(AudioDevice&& device) noexcept; AudioDevice& operator=(const AudioDevice& device); void OpenStream() override; void CloseStream() override; UInt_64 SendStream(const void *data, UInt_64 outFrameSize) override; UInt_64 ReceiveStream(void *data, UInt_64 inFrameSize) override; Str_32 GetInterfaceName_32() const; Str_16 GetInterfaceName_16() const; Str_8 GetInterfaceName_8() const; Str_32 GetName_32() const; Str_16 GetName_16() const; Str_8 GetName_8() const; bool IsStreaming() const override; bool IsValid() const override; static AudioDevice GetDefault(AudioDeviceType type); static Array Get(AudioDeviceType type, AudioDeviceState state); }; }