#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 #ifndef MAX_PATH #define MAX_PATH 260 #endif 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; #pragma pack(1) typedef struct rvc_audio_device_s { int id; /*audo device id*/ int channels; /*max channels*/ int samprate; /*default samplerate*/ double low_latency; /*default low latency*/ double high_latency; /*default high latency*/ char name[MAX_PATH]; /*device name*/ char description[MAX_PATH]; /*device description*/ } rvc_audio_device_t; #pragma pack() 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; #ifdef _WIN32 virtual int audio_get_device_name(char* pstrbuf, size_t ulen, bool binput, unsigned int uindex) = 0; #else virtual int audio_get_device_name(char* pstrbuf, size_t ulen, bool binput, int index) = 0; #endif virtual int audio_get_device_id(const char* pstrname, bool binput) = 0; virtual rvc_audio_device_t* audio_get_device_infos(bool binput, int index) = 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);