libaudiomgr_win.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #pragma once
  2. #include "../iaudiomgrinterface.h"
  3. #include <stdint.h>
  4. #include <assert.h>
  5. #include <stdio.h>
  6. #include <errno.h>
  7. #include <mediaobj.h> // IMediaObject
  8. #include <wmcodecdsp.h> // CLSID_CWMAudioAEC
  9. // (must be before audioclient.h)
  10. #include <audioclient.h>
  11. #include <MMDeviceApi.h>
  12. #include <AudioEngineEndPoint.h>
  13. #include <DeviceTopology.h>
  14. #include <functiondiscoverykeys.h>
  15. #include <EndpointVolume.h>
  16. class AudioMgrImpl : public IAudioMgr
  17. {
  18. public:
  19. AudioMgrImpl(audiomgr_callback_t* pCallback);
  20. ~AudioMgrImpl();
  21. int audio_mgr_initialize();
  22. int audio_mgr_terminate();
  23. int audio_get_device_count(bool binput);
  24. int audio_get_device_name(char* pstrbuf, size_t ulen, bool binput, unsigned int uindex);
  25. int audio_get_device_id(const char* pstrname, bool binput);
  26. rvc_audio_device_t* audio_get_device_infos(bool binput, int index);
  27. int audio_get_device_volume(int* ivolume, const char* pstrname, bool binput);
  28. int audio_set_device_volume(int ivolume, const char* pstrname, bool binput);
  29. int set_audio_capture_params(audiocap_param_t* param);
  30. int start_audio_capture();
  31. int stop_audio_capture();
  32. int audio_mgr_destroy();
  33. void audiolog(const char* fmt, ...);
  34. private:
  35. int32_t getlistdevice(EDataFlow dir, int index, IMMDevice** ppDevice);
  36. int32_t getdevicename(IMMDevice* pDevice, LPWSTR pszBuffer, int bufferLen);
  37. private:
  38. audiomgr_callback_t m_callback;
  39. IMMDeviceEnumerator* m_pEnumerator;
  40. IMMDeviceCollection* m_ptrCaptureCollection;
  41. IMMDevice* m_ptrDeviceIn;
  42. bool m_builtInAecEnabled;
  43. IMediaObject* m_dmo;
  44. bool m_usingInputDeviceIndex;
  45. uint16_t m_inputDeviceIndex;
  46. };