#pragma once #include "ehs/EHS.h" #include "BaseAudioDevice.h" #include #include #include #include struct IMMDevice; namespace ehs { class AudioDevice : 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 Release() override; void OpenStream() override; void CloseStream() override; UInt_64 GetAvailFrames() const override; Byte* Map(UInt_64* offset, UInt_64* frames) override; void UnMap(const UInt_64 offset, const UInt_64 frames) 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 IsValid() const override; static AudioDevice GetDefault(const AudioDeviceType type); static Array Get(const AudioDeviceType type, const AudioDeviceState state); }; }