#pragma once #ifdef _WIN32 #ifdef LIBAUDIOMGR_EXPORTS #define LIBAUDIOMGR_API __declspec(dllexport) #else #define LIBAUDIOMGR_API __declspec(dllimport) #endif # elif ( defined(__GNUC__) && __GNUC__ >= 4 ) #define LIBAUDIOMGR_API __attribute__((visibility("default"))) #else // RVC_OS_WIN #define LIBAUDIOMGR_API #endif // RVC_OS_WIN #include #include typedef struct audiocap_param_s { /** callbacks */ int ideviceid; int isamprate; int ichannels; int isampleformat; double flatency; /* called from inner thread, should not block, can be null */ void (*on_audio_callback)(const void* input, unsigned long audiolen,void* userdata); void* user_data; }audiocap_param_t; typedef struct audiomgr_callback_s{ void (*debug)(void* user_data, const char* fmt, va_list arg); void (*on_audio_mgr_failed)(); void (*on_audio_mgr_excption)(); void* user_data; }audiomgr_callback_t; class IAudioMgr { public: virtual int audio_mgr_initialize() = 0; virtual int audio_mgr_terminate() = 0; /**/ virtual int audio_get_device_count(bool binput) = 0; virtual int audio_get_device_name(char* pstrbuf, size_t ulen, bool binput, int index) = 0; virtual int audio_get_device_id(const char* pstrname, bool binput) = 0; virtual int audio_get_device_volume(int* ivolume, const char* pstrname, bool binput) = 0; virtual int audio_set_device_volume(int ivolume, const char* pstrname, bool binput) = 0; virtual int set_audio_capture_params(audiocap_param_t* param) = 0; virtual int start_audio_capture() = 0; virtual int stop_audio_capture() = 0; virtual int audio_mgr_destroy() = 0; }; extern "C" LIBAUDIOMGR_API IAudioMgr* CreateAudioMgrObj(audiomgr_callback_t* pCallback); extern "C" LIBAUDIOMGR_API void DestroyIAudioMgrObj(IAudioMgr* pIAudioMgr);