#pragma once #include "../iaudiomgrinterface.h" #include #include #include #include #include // IMediaObject #include // CLSID_CWMAudioAEC // (must be before audioclient.h) #include #include #include #include #include #include class AudioMgrImpl : public IAudioMgr { public: AudioMgrImpl(audiomgr_callback_t* pCallback); ~AudioMgrImpl(); int audio_mgr_initialize(); int audio_mgr_terminate(); int audio_get_device_count(bool binput); int audio_get_device_name(char* pstrbuf, size_t ulen, bool binput, unsigned int uindex); int audio_get_device_id(const char* pstrname, bool binput); rvc_audio_device_t* audio_get_device_infos(bool binput, int index); int audio_get_device_volume(int* ivolume, const char* pstrname, bool binput); int audio_set_device_volume(int ivolume, const char* pstrname, bool binput); int set_audio_capture_params(audiocap_param_t* param); int start_audio_capture(); int stop_audio_capture(); int audio_mgr_destroy(); void audiolog(const char* fmt, ...); private: int32_t getlistdevice(EDataFlow dir, int index, IMMDevice** ppDevice); int32_t getdevicename(IMMDevice* pDevice, LPWSTR pszBuffer, int bufferLen); private: audiomgr_callback_t m_callback; IMMDeviceEnumerator* m_pEnumerator; IMMDeviceCollection* m_ptrCaptureCollection; IMMDevice* m_ptrDeviceIn; bool m_builtInAecEnabled; IMediaObject* m_dmo; bool m_usingInputDeviceIndex; uint16_t m_inputDeviceIndex; };