You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1079 lines
73 KiB

2 years ago
#ifndef __ZMF_AUDIO_H__
#define __ZMF_AUDIO_H__
#ifdef __GNUC__
#pragma GCC visibility push(default)
#endif
/**
* @file zmf_audio.h
* @brief ZMF音频模块接口
* @details zmf音频模块涉及的枚举
*/
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup ZmfAudioTypes
* @{
*/
/**
* @brief
*/
typedef enum {
ZmfAudioDeviceDefault = 1, /**< @brief 默认类型的音频设备 */
#ifdef _WIN32
ZmfWinAudioDeviceWave = 0, /**< @brief 仅windows平台:wave类型的windows音频设备 */
ZmfWinAudioDeviceCore = 1, /**< @brief 仅windows平台:core类型的windows音频设备 */
#elif __linux__
ZmfLinuxAudioDeviceALSA = 0, /**< @brief 仅Linux平台:ALSA类型的Linux音频设备 */
ZmfLinuxAudioDevicePulse = 1, /**< @brief 仅Linux平台:Pulse类型的Linux音频设备 */
#endif
} ZmfAudioDeviceType;
/**
* @}
*/
/**
* @defgroup ZmfAudioFunctions
* @{
*/
/**
* @brief ZMF(Zero Media Framework)
* @details ZMF的音频模块负责音频采集ZMF的音频模块
* @param applicationContext Windows系统,
* @ref ZmfEventListenCallback \n
* Linux系统 @ref ZmfEventListenCallback NULL\n
* iOS系统, NULL
* @return intZMF音频模块初始化的同步返回结果\n
* 0: ZMF音频模块初始化线\n
* -ZMF_ERROR_OUT_OF_MEMORY: iOS/MacOS系统音频设备分配内存失败\n
* @note 0 @ref ZmfEventListenCallback
* @ref ZmfAudioErrorOccurred \n
* ZMF_ERROR_MAC_AUDIO_RINGBUFFER_INIT_FAILED: MacOS平台内部ringbuffer初始化失败\n
* ZMF_ERROR_MAC_AUDIO_SEMAPHORE_CREATE_FAILED: MacOS平台内部信号量创建失败\n
* ZMF_ERROR_IOS_AUDIO_SESSION_INIT_FAILED: iOS平台音频会话初始化失败\n
* ZMF_ERROR_IOS_AUDIO_ADDPROPERTY_FAILED: iOS平台音频会话增加属性监听失败\n
* ZMF_ERROR_WINADM_GCV_THREAD_CREATE: windows平台线\n
* ZMF_ERROR_WINADM_SCV_THREAD_CREATE: windows平台线\n
* @see @ref Zmf_AudioInitialize2, @ref Zmf_AudioTerminate.
*/
int Zmf_AudioInitialize(void *applicationContext);
/**
* @brief ZMF(Zero Media Framework)
* @details Windows和Linux系统支持此接口
* @param applicationContext Windows系统,
* @ref ZmfEventListenCallback \n
* Linux系统NULL\n
* @param deviceType @ref ZmfAudioDeviceType
* @return intZMF音频模块初始化的同步返回结果\n
* 0: ZMF音频模块初始化线\n
* @note 0 @ref ZmfEventListenCallback
* @ref ZmfAudioErrorOccurred \n
* ZMF_ERROR_WINADM_WAVE_RECPLAY_THREAD_CREATE: windows平台wave接口线\n
* ZMF_ERROR_WINADM_WAVE_START_TIMER: windows平台wave接口\n
* ZMF_ERROR_WINADM_GCV_THREAD_CREATE: windows平台线\n
* ZMF_ERROR_WINADM_SCV_THREAD_CREATE: windows平台线\n
* @see @ref Zmf_AudioInitialize, @ref Zmf_AudioTerminate.
*/
int Zmf_AudioInitialize2(void *applicationContext, ZmfAudioDeviceType deviceType);
/**
* @brief ZMF音频模块
* @return intZMF音频模块销毁的同步返回结果\n
* 0: ZMF音频模块销毁过程中线Linux系统0\n
* @note 0 @ref ZmfEventListenCallback @ref ZmfAudioErrorOccurred
* \n
* -ZMF_ERROR_MAC_AUDIO_STILL_RECORDING: MacOS平台音频采集未关闭\n
* -ZMF_ERROR_MAC_AUDIO_STILL_PLAYING: MacOS平台音频播放未关闭\n
* -ZMF_ERROR_MAC_AUDIO_UNLOAD_FAILED: MacOS平台音频卸载失败\n
* @see @ref Zmf_AudioInitialize, @ref Zmf_AudioInitialize2.
*/
int Zmf_AudioTerminate (void);
/**
* @}
*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/**
* @addtogroup ZmfAudioTypes
* @brief
* @{
*/
/**
* @brief AEC(Acoustic Echo Cancellation).
*/
typedef enum {
ZmfAecAuto = -1, /**< @brief 自动选择模式 */
ZmfAecOff = 0, /**< @brief 停用AEC */
ZmfAecOn = 1, /**< @brief 启用AEC */
} ZmfAecMode;
/**
* @brief AGC(Automatic Gain Control).
*/
typedef enum {
ZmfAgcAuto = -1, /**< @brief 自动选择模式 */
ZmfAgcOff = 0, /**< @brief 停用AGC */
ZmfAgcOn = 1, /**< @brief 启用AGC */
} ZmfAgcMode;
/**
* @brief windows7系统的麦克风增益(Boost).
*/
typedef enum {
ZmfBoostOff = 0, /**< @brief 开启音频采集时自动检测并关闭Boost,停止音频采集时自动恢复 */
ZmfBoostManual = 1, /**< @brief 手动控制Boost */
} ZmfBoostMode;
/**
* @brief Session模式.
*/
typedef enum {
ZmfSessionAutoMode = 0, /**< @brief 自动选择模式,不做任何处理. */
ZmfSessionDefault = 1, /**< @brief 默认模式,如果不支持, 不做任何处理 */
ZmfSessionVoiceChat = 2, /**< @brief 音频模式, 如果不支持, 设置为默认模式 */
ZmfSessionVideoChat = 3, /**< @brief 视频模式, 如果不支持, 设置为默认模式 */
ZmfSessionDuckOthers = 1<<30, /**< @brief 避开其他App的声音, 仅ios支持 */
ZmfSessionMixWithOthers = 1U<<31, /**< @brief 与其他App的声音混合, 仅ios支持 */
} ZmfSessionMode;
/**
* @brief .
*/
typedef enum {
ZmfAudioDeviceActive = 1, /**< @brief 音频设备已使能,且插入启用. */
ZmfAudioDeviceDisabled = 2, /**< @brief 停用音频设备. */
ZmfAudioDeviceNotPresent = 3, /**< @brief 未发现音频设备. */
ZmfAudioDeviceUnplugged = 4, /**< @brief 音频设备已使能,但未插入启用. */
ZmfAudioDeviceInvalid = 5, /**< @brief 音频设备在使用期间失效. */
} ZmfAudioDeviceStateMode;
/**
* @}
*/
#ifdef __OBJC__
#import <Foundation/Foundation.h>
/**
* @defgroup ZmfAudioDeviceId ID
* @{
*/
/** @brief 远程IO的音频设备ID字符串 */
extern const char * const ZmfAudioDeviceRemote;
/** @brief 声音处理IO的音频设备ID字符串 */
extern const char * const ZmfAudioDeviceVoice;
/**
* @}
*/
/**
* @defgroup ZmfAudioNotificationParameters
* @{
*/
/**
* @brief NSString字符串对象ID的字符串
*/
extern NSString * const ZmfAudioInput;
/**
* @brief NSString字符串对象ID的字符串
*/
extern NSString * const ZmfAudioOutput;
/**
* @brief NSNumber数值对象Hz为单位
*/
extern NSString * const ZmfSamplingRate;
/**
* @brief NSNumber数值对象
*/
extern NSString * const ZmfChannelNumber;
/**
* @brief NSNumber数值对象AGC类型的整数
* AGC类型的取值可以参考@ref ZmfAgcMode
*/
extern NSString * const ZmfAutoGainControl;
/**
* @brief NSNumber数值对象AEC类型的整数
* AEC类型的取值可以参考@ref ZmfAecMode
*/
extern NSString * const ZmfAcousticEchoCancel;
/**
* @brief
* : 'input <id>|output <id>|audio: <reason>'
*/
extern NSString * const ZmfAudioError;
/**
* @}
*/
/**
* @defgroup ZmfAudioNotifications .
* @{
*/
/**
* @brief ZMF音频模块收到启动采集请求时
*
* lParam是一个包含了@ref ZmfAudioInput @ref ZmfSamplingRate
* @ref ZmfChannelNumber json对象json对象提供
*/
extern NSString * const ZmfAudioInputRequestStart;
/**
* @brief ZMF音频模块收到停止采集请求时
*
* lParam是一个包含了@ref ZmfAudioInput json对象
* json对象提供
*/
extern NSString * const ZmfAudioInputRequestStop;
/**
* @brief @ref Zmf_AudioInputStart ZMF音频模块成功收到第一份
*
*
* lParam是一个包含了@ref ZmfAudioInput,@ref ZmfSamplingRate
* @ref ZmfChannelNumber json对象
*/
extern NSString * const ZmfAudioInputDidStart;
/**
* @brief ZMF音频模块收到启动播放音频数据请求时
*
* lParam是一个包含了@ref ZmfAudioOutput, @ref ZmfSamplingRate
* @ref ZmfChannelNumber json对象json对象提供
*/
extern NSString * const ZmfAudioOutputRequestStart;
/**
* @brief ZMF音频模块收到停止播放音频数据请求时
*
* lParam是一个包含了@ref ZmfAudioOutput json对象,
* json对象提供
*/
extern NSString * const ZmfAudioOutputRequestStop;
/**
* @brief @ref Zmf_AudioOutputStart ZMF音频模块成功发送第一份
*
*
* lParam是一个包含了@ref ZmfAudioOutput, @ref ZmfSamplingRate
* @ref ZmfChannelNumber json对象,
*/
extern NSString * const ZmfAudioOutputDidStart;
/**
* @brief ZMF音频模块在工作状态下收到中断请求时
* ZMF音频模块会进入中断状态
*
* ZMF音频模块将会自动停止音频输入和音频输出工作userInfo和object都为nil
*/
extern NSString * const ZmfAudioInterrupted;
/**
* @brief ZMF音频模块在中断状态下收到"恢复运行"
*
* ZMF音频模块将会自动恢复音频输入和音频输出工作userInfo和object都为nil
*/
extern NSString * const ZmfAudioDidResume;
/** @brief 当ZMF音频模块遇到错误时,发送的事件类型。
*
* userInfo是一个包含了@ref ZmfAudioError NSDictionary对象
*/
extern NSString * const ZmfAudioErrorOccurred;
/** @brief 当ZMF音频模块的会话模式发生变化时,发送的事件类型。
*
* userInfo为空object是一个NSNumber数值.
*/
extern NSString * const ZmfAudioSessionMode;
/**
* @brief ZMF音频模块上报采集音量数据时
*
* lParam是一个包含了@ref ZmfAudioInput, @ref ZmfSamplingRate,
* @ref ZmfChannelNumber @ref ZmfAudioVolume json对象
*
*/
extern NSString * const ZmfAudioInputVolume;
/**
* @brief ZMF音频模块上报播放音量数据时
*
* lParam是一个包含了@ref ZmfAudioOutput, @ref ZmfSamplingRate,
* @ref ZmfChannelNumber @ref ZmfAudioVolume json对象
*
*/
extern NSString * const ZmfAudioOutputVolume;
/**
* @}
*/
#else /* __OBJC__ */
/**
* @defgroup ZmfAudioNotification
* @brief ZMF视频事件通知类型和事件所含参数
* @details ZMF音频模块产生的音频事件包含一个记录事件所含参数的长参lParam和一个记录事件类型的短参wParam
* * lParam是一个json对象json对象可能包含的keys
* @{
*/
#ifdef _WIN32
/**
* @brief zmf音频事件相关的系统通知在windows系统中的Event编号
*
* WM_APP宏在WinUser.h文件中定义0x8000
*
* wParam参数是事件的类型
* @ref ZmfAudioEventType
*
* lParam参数是一个json对象json对象内包含哪些键值对
*/
#define ZmfAudioEvent WM_APP + 130
#endif /* _WIN32 */
#ifndef ZMF_NO_JSON_KEY
/**
* @brief key对应的value是一个字符串ID
*/
#define ZmfAudioInput "AudioInput"
/**
* @brief key对应的value是一个字符串ID
*/
#define ZmfAudioOutput "AudioOutput"
/**
* @brief key对应的value是一个整型数值Hz为单位
*/
#define ZmfSamplingRate "SamplingRate"
/**
* @brief key对应的value是一个整型数值
*/
#define ZmfChannelNumber "ChannelNumber"
/**
* @brief key对应的value是一个整型数值AGC类型
* AGC类型的取值可以参考 @ref ZmfAgcMode
*/
#define ZmfAutoGainControl "AutoGainControl"
/**
* @brief key对应的value是一个整型数值AEC类型
* AEC类型的取值可以参考 @ref ZmfAecMode
*/
#define ZmfAcousticEchoCancel "AcousticEchoCancel"
/**
* @brief key对应的value是一个整型数值
* @ref ZmfAudioDeviceStateMode
*/
#define ZmfAudioDeviceState "State"
/**
* @brief key对应的value是一个字符串
* : 'input <id>|output <id>|audio: <reason>'
*/
#define ZmfAudioError "AudioError"
/**
* @brief (string) "[ErrorNumber][DomainCode]."DomainCode参见 @ref DomainCode
*/
#define ZmfAudioErrorCode "ErrorCode"
/**
* @brief (int) @ref ZmfErrorNumber
*/
#define ZmfAudioErrorNumber "ErrorNumber"
/**
* @brief key对应的value是一个整型数值
* zmf对采集到的音频数据每隔一定的时间进行音量统计和事件上报10ms
* RMS(root mean of square)
*/
#define ZmfAudioVolume "AudioInputVolume"
#endif
/**
* @}
*/
/**
* @addtogroup ZmfAudioTypes
* @{
*/
/**
* @brief
* @details Zmf在运行过程中会产生各种事件zmf音频模块产生的不同事件所对应的事件类型
* @ref Zmf_AudioSetListener zmf音频模块的事件监听函数
*/
typedef enum {
/**
* @brief ZMF音频模块请求上层启动音频输入时 @ref Zmf_AudioInputStart
*
* lParam是一个包含了 @ref ZmfAudioInput @ref ZmfSamplingRate
* @ref ZmfChannelNumber json对象json对象提供
*/
ZmfAudioInputRequestStart = 1,
/**
* @brief ZMF音频模块请求上层停止音频输入时 @ref Zmf_AudioInputStop
*
* lParam是一个包含了 @ref ZmfAudioInput json对象
* json对象提供
*/
ZmfAudioInputRequestStop = 2,
/**
* @brief @ref Zmf_AudioInputStart ZMF音频模块成功收到第一份
*
*
* lParam是一个包含了@ref ZmfAudioInput,@ref ZmfSamplingRate
* @ref ZmfChannelNumber json对象
*/
ZmfAudioInputDidStart = 3,
/**
* @brief ZMF音频模块请求启动播放音频数据时
*
* lParam是一个包含了@ref ZmfAudioOutput, @ref ZmfSamplingRate
* @ref ZmfChannelNumber json对象json对象提供
*/
ZmfAudioOutputRequestStart = 4,
/**
* @brief ZMF音频模块请求停止播放音频数据时
*
* lParam是一个包含了@ref ZmfAudioOutput json对象, json对象提供
*/
ZmfAudioOutputRequestStop = 5,
/**
* @brief @ref Zmf_AudioOutputStart ZMF音频模块成功发送第一份
*
*
* lParam是一个包含了@ref ZmfAudioOutput, @ref ZmfSamplingRate
* @ref ZmfChannelNumber json对象,
*/
ZmfAudioOutputDidStart = 6,
/** @brief 当ZMF音频模块遇到错误时,发送的事件类型。
*
* lParam是一个包含了 @ref ZmfAudioError, @ref ZmfAudioErrorNumber, @ref ZmfAudioErrorCode json对象
*/
ZmfAudioErrorOccurred = 7,
/** @brief 当ZMF音频模块检测到音频输出设备发生变化时,发送的事件类型。
*
* lParam是一个包含了@ref ZmfAudioOutput @ref ZmfAudioDeviceState json对象
*/
ZmfAudioOutputStateChanged = 8,
/**
* @brief ZMF音频模块上报采集音量数据时
*
* lParam是一个包含了@ref ZmfAudioInput, @ref ZmfSamplingRate,
* @ref ZmfChannelNumber @ref ZmfAudioVolume json对象
*
*/
ZmfAudioInputVolume = 9,
/** @brief 当ZMF音频模块检测到音频输入设备发生变化时,发送的事件类型。
*
* lParam是一个包含了 @ref ZmfAudioInput @ref ZmfAudioDeviceState json对象
*/
ZmfAudioInputStateChanged = 10,
/**
* @brief ZMF音频模块上报播放音量数据时
*
* lParam是一个包含了@ref ZmfAudioOutput, @ref ZmfSamplingRate,
* @ref ZmfChannelNumber @ref ZmfAudioVolume json对象
*
*/
ZmfAudioOutputVolume = 11,
} ZmfAudioEventType;
/**
* @}
*/
#endif /* __OBJC__ */
#ifdef __cplusplus
extern "C" {
#endif
/**
* @addtogroup ZmfAudioFunctions
* @brief ZMF模块实现音频采集
* @{
*/
#ifdef __OBJC__
/**
* @brief
* @details ios系统支持ios系统的音频单元开始工作
* @param deviceId Id
* @return int,\n
* 0: \n
* -ZMF_ERROR_ADM_NOTINIT: \n
* -ZMF_ERROR_IOS_AUDIO_OUTPUTUNIT_STOP_FAILED: iOS平台音频输出单元停止失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_UNINIT_FAILED: iOS平台音频会话获取参数失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETPROPERTY_FAILED: iOS平台音频会话设置参数失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETACTIVATE_FAILED: iOS平台音频会话激活失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETCATEGORY_FAILED: iOS平台音频会话设置种类失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETMODE_FAILED: iOS平台音频会话设置模式失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETACTIVATEWITHFLAGS_FAILED: iOS平台音频会话通过标志位激活失败\n
* -ZMF_ERROR_IOS_AUDIO_COMPONENT_CREATE_INSTANCE_FAILED: iOS平台新建音频组件实例失败\n
* -ZMF_ERROR_IOS_AUDIO_COMPONENT_GETDESCRIPTION_FAILED: iOS平台音频组件获取详细藐视失败\n
* -ZMF_ERROR_IOS_AUDIO_INIT_TOOMANY_ATTEMPTS: iOS平台音频初始化太多次尝试\n
* -ZMF_ERROR_IOS_AUDIO_OUTPUTUNIT_START_FAILED: iOS平台音频输出单元开始失败\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioUnitStop
*/
int Zmf_AudioUnitStart (const char* deviceId);
/**
* @brief
* @details ios系统支持ios系统的音频单元停止工作
* @return int,\n
* 0: \n
* -ZMF_ERROR_ADM_NOTINIT: iOS平台音频未初始化\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_GETPROPERTY_FAILED: iOS平台音频会话获取参数失败\n
* -ZMF_ERROR_IOS_AUDIO_OUTPUTUNIT_STOP_FAILED: iOS平台音频输出单元停止失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_UNINIT_FAILED: iOS平台音频会话获取参数失败\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioUnitStart
*/
int Zmf_AudioUnitStop ();
#endif
/**
* @brief session模式
* @details ios系统支持ios系统的音频session模式
* @param enAudioMode session模式@ref ZmfSessionMode
* @return int,\n
* 0: \n
* @pre @ref Zmf_AudioInitialize
*/
int Zmf_AudioSessionSetMode (ZmfSessionMode enAudioMode);
/**
* @brief
* @details
* @return int\n
* =0: zmf没有获取到可用的音频输入设备\n
* >0: \n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_LINUXADM_PTRNULL: Linux平台调用除初始化以外的zmf音频接口时linux音频设备指针为空\n
* -ZMF_ERROR_LINUXADM_ALSA_DEVICE_NAME_HINT: ALSA接口获取设备信息时\n
* -ZMF_ERROR_MAC_ACQUIRE_AUDIO_DEVICE_FAILED: MacOS平台获取音频设备信息失败\n
* -ZMF_ERROR_WINADM_CORE_ENUM_DEVICE: Windows平台音频模块core接口\n
* -ZMF_ERROR_WINADM_CORE_GET_DEVICE_COUNT: Windows平台音频模块core接口\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioInputGetName
*/
int Zmf_AudioInputGetCount (void);
/**
* @brief
* @details Windows/Linux支持ZMF音频模块绑定的音频输入设备的音量
* @param percent int类型[0, 100]
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: \n
* -ZMF_ERROR_ADM_MIC_UNINITED: (/)\n
* -ZMF_ERROR_LINUXADM_PTRNULL: linux音频设备指针为空\n
* -ZMF_ERROR_LINUXADM_MIC_VOLUME_NOT_AVAILABLE: Linux平台音频模块\n
* -ZMF_ERROR_WINADM_MIC_VOLUME_UNAVAILABLE: Windows平台音频模块\n
* -ZMF_ERROR_WINADM_MIXER_UNSET: Windows平台音频模块mixer相关函数时mixer句柄为空\n
* -ZMF_ERROR_WINADM_MIXER_SET_VOLUME: Windows平台音频模块mixer设置麦克风或扬声器音量失败\n
* -ZMF_ERROR_WINADM_REC_DEVICE_UNSET: Windows平台音频模块core接口使\n
* -ZMF_ERROR_WINADM_CORE_MIC_SET_VOLUME: Windows平台音频模块core接口\n
* -ZMF_ERROR_WINADM_CORE_MIC_VOLUME_INVALID: Windows平台音频模块core接口\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioOutputSetVolume, @ref Zmf_AudioInputGetVolume
*/
int Zmf_AudioInputSetVolume(int percent);
/**
* @brief
* @details Windows/Linux支持ZMF音频模块绑定的麦克风的音量
* @param percent int类型[0, 100]
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: \n
* -ZMF_ERROR_ADM_MIC_UNINITED: (/)\n
* -ZMF_ERROR_LINUXADM_PTRNULL: linux音频设备指针为空\n
* -ZMF_ERROR_LINUXADM_MIC_VOLUME_NOT_AVAILABLE: Linux平台音频模块\n
* -ZMF_ERROR_WINADM_MIC_VOLUME_UNAVAILABLE: Windows平台音频模块\n
* -ZMF_ERROR_WINADM_MIXER_UNSET: Windows平台音频模块mixer相关函数时mixer句柄为空\n
* -ZMF_ERROR_WINADM_MIXER_GET_VOLUME: Windows平台音频模块mixer获取麦克风或扬声器音量失败\n
* -ZMF_ERROR_WINADM_REC_DEVICE_UNSET: Windows平台音频模块core接口使\n
* -ZMF_ERROR_WINADM_CORE_MIC_GET_VOLUME: Windows平台音频模块core接口\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioOutputGetVolume, @ref Zmf_AudioInputSetVolume
*/
int Zmf_AudioInputGetVolume(int* percent);
/**
* @brief
* @details iIndexId信息和名称信息
* @param iIndex @ref Zmf_AudioInputGetCount
* count[0, count-1]count为0{0}
* @param acId 512buffer指针IdNULL
* @param acName 512buffer指针NULL
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_INPUT_PTR_NULL: Id字符串为空Linux平台ALSA音频接口获取非default设备名称时id字符串非空\n
* -ZMF_ERROR_WC_TO_MB: (WideChar)(MultiByte)\n
* -ZMF_ERROR_ADM_INDEXINVALID: zmf音频接口时index无效\n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_LINUXADM_PTRNULL: Linux平台调用除了初始化以外的zmf音频接口时linux音频设备指针为空\n
* -ZMF_ERROR_MAC_INVALID_AUDIO_PARAM: MacOS平台无效的音频参数\n
* -ZMF_ERROR_MAC_ACQUIRE_AUDIO_DEVICE_FAILED: MacOS平台获取音频设备失败\n
* -ZMF_ERROR_WINADM_WAVE_GET_DEVCAPS: Windows平台音频模块wave设备的device caps出错\n
* -ZMF_ERROR_WINADM_CORE_ENUM_DEVICE: Windows平台音频模块core接口\n
* -ZMF_ERROR_WINADM_CORE_GET_DEVICE_COUNT: Windows平台音频模块core接口\n
* -ZMF_ERROR_WINADM_CORE_GET_DEVICE: Windows平台音频模块core接口使\n
* @pre @ref Zmf_AudioInitialize @ref Zmf_AudioInitialize2
* @pre @ref Zmf_AudioInputGetCount
* @see @ref Zmf_AudioInputGetName
*/
int Zmf_AudioInputGetName (int iIndex, char acId[512], char acName[512]);
/**
* @brief
* @details
* @param pcId buffer指针Id
* @param iSamplingRate Hz0
* @param iChannelNumber 0
* @param enAecMode aec模式 @ref ZmfAecMode
* @param enAgcMode agc模式 @ref ZmfAgcMode
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_ADM_INPUTSTARTED: AudioInputStart接口时\n
* -ZMF_ERROR_ADM_IDINVALID: zmf音频接口时ID无效\n
* -ZMF_ERROR_ADM_REC_INITED: \n
* -ZMF_ERROR_ADM_REC_STARTED:\n
* -ZMF_ERROR_ADM_INDEXINVALID: zmf音频接口时index无效\n
* -ZMF_ERROR_ADM_REC_THREAD_CREATE: 线\n
* -ZMF_ERROR_ADM_REC_START_WITHOUT_INIT: \n
* -ZMF_ERROR_ADM_ID_INCONSISTENT: ID和实际正在工作的音频设备ID不一致\n
* -ZMF_ERROR_LINUXADM_PTRNULL: Linux平台调用除了初始化以外的zmf音频接口时linux音频设备指针为空\n
* -ZMF_ERROR_LINUXADM_REC_INITED: Linux平台启动音频采集之前\n
* -ZMF_ERROR_LINUXADM_REC_STARTED: Linux平台启动音频采集时\n
* -ZMF_ERROR_LINUXADM_REC_START_WITHOUT_INIT: Linux平台启动音频采集时\n
* -ZMF_ERROR_LINUXADM_ALSA_REC_OPEN_DEVICE: Linux平台启动音频采集时ALSA设备\n
* -ZMF_ERROR_LINUXADM_ALSA_REC_SETTING: Linux平台启动音频采集时ALSA设备/\n
* -ZMF_ERROR_LINUXADM_ALSA_REC_INIT: Linux平台启动音频采集时ALSA的采集设备最终初始化失败\n
* -ZMF_ERROR_LINUXADM_ALSA_REC_ALLOC_BUFFER: Linux平台启动音频采集时ALSA设备buffer失败\n
* -ZMF_ERROR_LINUXADM_ALSA_REC_THREAD_START: Linux平台启动音频采集时ALSA设备线\n
* -ZMF_ERROR_LINUXADM_ALSA_REC_SND_PCM_START: Linux平台启动音频采集时ALSA设备\n
* -ZMF_ERROR_LINUXADM_PULSE_REC_CREATE_STREAM: Linux平台启动音频采集时Pulse设备\n
* -ZMF_ERROR_LINUXADM_PULSE_REC_GET_SPEC: Linux平台启动音频采集时Pulse设备/\n
* -ZMF_ERROR_LINUXADM_PULSE_REC_ACTIVATE_TIMEOUT: Linux平台启动音频采集时Pulse设备线\n
* -ZMF_ERROR_LINUXADM_PULSE_REC_START: Linux平台启动音频采集时Pulse设备(线)\n
* -ZMF_ERROR_MAC_AUDIO_INPUT_DEVICE_ALREADYSTART: MacOS平台音频采集已开启\n
* -ZMF_ERROR_MAC_INVALID_AUDIO_PARAM: MacOS平台无效的音频参数\n
* -ZMF_ERROR_MAC_AUDIO_INPUT_DEVICE_ALREADYSTART: MacOS平台音频采集已开启\n
* -ZMF_ERROR_MAC_AUDIO_INPUT_DEVICE_UNSPECIFIED: MacOS平台音频未指定输入设备\n
* -ZMF_ERROR_MAC_AUDIO_INVALID_INPUT_FORMAT: MacOS平台音频内部输入格式错误\n
* -ZMF_ERROR_MAC_AUDIO_INPUT_MANY_CHANNELS: MacOS平台音频内部太多输入通道\n
* -ZMF_ERROR_MAC_AUDIO_INPUT_TOOBIG_IOBLOCK: MacOS平台音频内部输入过大的io块\n
* -ZMF_ERROR_MAC_AUDIO_RECORDING_THREAD_UNINITED: MacOS平台音频采集线程未开启\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETPROPERTY_FAILED: iOS平台音频会话设置参数失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETACTIVATE_FAILED: iOS平台音频会话激活失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETCATEGORY_FAILED: iOS平台音频会话设置种类失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETMODE_FAILED: iOS平台音频会话设置模式失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETACTIVATEWITHFLAGS_FAILED: iOS平台音频会话通过标志位激活失败\n
* -ZMF_ERROR_IOS_AUDIO_COMPONENT_CREATE_INSTANCE_FAILED: iOS平台新建音频组件实例失败\n
* -ZMF_ERROR_IOS_AUDIO_COMPONENT_GETDESCRIPTION_FAILED: iOS平台音频组件获取详细藐视失败\n
* -ZMF_ERROR_IOS_AUDIO_INIT_TOOMANY_ATTEMPTS: iOS平台音频初始化太多次尝试\n
* -ZMF_ERROR_IOS_AUDIO_OUTPUTUNIT_START_FAILED: iOS平台音频输出单元开始失败\n
* -ZMF_ERROR_WINADM_GCV_THREAD_CREATE: Windows平台音频模块线\n
* -ZMF_ERROR_WINADM_SCV_THREAD_CREATE: Windows平台音频模块线\n
* -ZMF_ERROR_WINADM_LOOPBACK_START: Windows平台音频模块\n
* -ZMF_ERROR_WINADM_REC_DEVICE_UNSET: Windows平台音频模块core接口使\n
* -ZMF_ERROR_WINADM_QPF: Windows平台音频模块QueryPerformanceFrequency()\n
* -ZMF_ERROR_WINADM_CORE_ENUM_DEVICE: Windows平台音频模块core接口\n
* -ZMF_ERROR_WINADM_CORE_GET_DEVICE_COUNT: Windows平台音频模块core接口\n
* -ZMF_ERROR_WINADM_CORE_GET_DEVICE: Windows平台音频模块core接口使\n
* -ZMF_ERROR_WINADM_CORE_DEVICE_ACTIVATE: Windows平台音频模块core接口Activate函数激活音频输入输出设备失败\n
* -ZMF_ERROR_WINADM_CORE_DEVICE_INIT: Windows平台音频模块core接口Initialize函数初始化音频输入输出设备失败\n
* -ZMF_ERROR_WINADM_CORE_SET_EVENTHANDLE: Windows平台音频模块core接口SetEventHandle函数为音频输入输出设备设置ready事件时失败\n
* -ZMF_ERROR_WINADM_CORE_GET_SERVICE: Windows平台音频模块core接口GetService函数获取音频输入输出设备的服务句柄时失败\n
* -ZMF_ERROR_WINADM_CORE_REC_START: Windows平台启动音频采集时core接口线线线1\n
* -ZMF_ERROR_WINADM_WAVE_IN_OPEN: Windows平台音频模块wave接口waveInOpen接口出错\n
* -ZMF_ERROR_WINADM_WAVE_REC_ACTIVATE_TIMEOUT: Windows平台启动音频播放时wave接口线/\n
* -ZMF_ERROR_WINADM_WAVE_REC_START: Windows平台启动音频播放时wave接口线(线)\n
* @note 线线 @ref ZmfEventListenCallback
* @ref ZmfAudioErrorOccurred \n
* ZMF_ERROR_OUT_OF_MEMORY: \n
* ZMF_ERROR_LINUXADM_REC_STATEMODIFY: Linux平台音频模块Pulse设备线\n
* ZMF_ERROR_LINUXADM_ALSA_SND_AVAIL_UPDATE: Linux平台音频模块ALSA设备线snd_pcm_avail_update函数失败frame数量\n
* ZMF_ERROR_LINUXADM_ALSA_SND_READ_PCM: Linux平台音频模块ALSA设备线snd_pcm_readi函数失败\n
* ZMF_ERROR_LINUXADM_PULSE_CONNECT_STREAM: Linux平台音频模块Pulse设备线\n
* ZMF_ERROR_LINUXADM_PULSE_STREAM_PEEK: Linux平台音频模块Pulse设备线pa_stream_peek接口读取数据时失败\n
* ZMF_ERROR_WINADM_REC_STATEMODIFY: Windows平台音频模块线线退\n
* ZMF_ERROR_WINADM_CORE_GET_BUFSIZE: Windows平台音频模块core接口线\n
* ZMF_ERROR_WINADM_CORE_START_DEVICE: Windows平台音频模块core接口线\n
* ZMF_ERROR_WINADM_CORE_REC_TIMEOUT: Windows平台音频模块core接口线(sampleReady或者shutdown)5\n
* ZMF_ERROR_WINADM_CORE_REC_WAIT_UNKNOWN: Windows平台音频模块core接口线(sampleReady或者shutdown)线\n
* ZMF_ERROR_WINADM_CORE_REC_NODATA_BUFEMPTY: Windows平台音频模块core接口15\n
* ZMF_ERROR_WINADM_CORE_REC_NODATA_UNKNOWN: Windows平台音频模块core接口15\n
* ZMF_ERROR_WINADM_CORE_DEVICE_INVALIDATED: Windows平台音频模块core接口线\n
* ZMF_ERROR_WINADM_CORE_REC_BUFERROR: Windows平台音频模块core接口线\n
* ZMF_ERROR_WINADM_WAVE_REC_TIMEOUT: Windows平台音频模块wave接口线58\n
* ZMF_ERROR_WINADM_WAVE_IN_PREPARE_HEADER: Windows平台音频模块wave接口线waveInPrepareHeader接口出错lasterror的msg字段或日志\n
* ZMF_ERROR_WINADM_WAVE_IN_ADD_BUFFER: Windows平台音频模块wave接口线buffer添加到队列失败\n
* @pre @ref Zmf_AudioInitialize
* @pre @ref Zmf_AudioInputGetCount
* @pre Id@ref Zmf_AudioInputGetName
* @see @ref Zmf_AudioInputStop, @ref Zmf_AudioInputStopAll
*/
int Zmf_AudioInputStart (const char* pcId, int iSamplingRate, int iChannelNumber,
ZmfAecMode enAecMode, ZmfAgcMode enAgcMode);
/**
* @brief
* @details Id
* @param pcId buffer指针Id
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_ADM_ID_INCONSISTENT: ID和实际正在工作的音频设备ID不一致\n
* -ZMF_ERROR_IOS_AUDIO_INPUT_NOT_STARTED: iOS平台音频采集未开启.\n
* -ZMF_ERROR_IOS_AUDIO_OUTPUTUNIT_STOP_FAILED: iOS平台音频输出单元停止失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_UNINIT_FAILED: iOS平台音频会话获取参数失败\n
* -ZMF_ERROR_WINADM_WAVE_REC_ACTIVATE_TIMEOUT: Windows平台启动音频播放时wave接口线/\n
* -ZMF_ERROR_WINADM_WAVE_REC_STOP: Windows平台停止音频播放时wave接口线(线)\n
* -ZMF_ERROR_WINADM_CORE_REC_THREAD_TERMINATE: Windows平台音频模块core接口线线\n
* -ZMF_ERROR_WINADM_GCV_THREAD_TERMINATE: Windows平台音频模块线线\n
* -ZMF_ERROR_WINADM_SCV_THREAD_TERMINATE: Windows平台音频模块线线\n
* -ZMF_ERROR_WINADM_CORE_DMO_FREE: Windows平台音频模块core接口DMO相关的流处理资源时失败builtInAec才有可能产生此错误\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioInputStart, @ref Zmf_AudioInputStopAll, @ref Zmf_OnAudioInputDidStop
*/
int Zmf_AudioInputStop (const char* pcId);
/**
* @brief
* @details
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_ID_INCONSISTENT: ID和实际正在工作的音频设备ID不一致\n
* -ZMF_ERROR_IOS_AUDIO_INPUT_NOT_STARTED: iOS平台音频模块.\n
* -ZMF_ERROR_IOS_AUDIO_OUTPUTUNIT_STOP_FAILED: iOS平台音频输出单元停止失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_UNINIT_FAILED: iOS平台音频会话获取参数失败\n
* -ZMF_ERROR_WINADM_WAVE_REC_ACTIVATE_TIMEOUT: Windows平台启动音频播放时wave接口线/\n
* -ZMF_ERROR_WINADM_WAVE_REC_STOP: Windows平台停止音频播放时wave接口线(线)\n
* -ZMF_ERROR_WINADM_CORE_REC_THREAD_TERMINATE: Windows平台音频模块core接口线线\n
* -ZMF_ERROR_WINADM_GCV_THREAD_TERMINATE: Windows平台音频模块线线\n
* -ZMF_ERROR_WINADM_SCV_THREAD_TERMINATE: Windows平台音频模块线线\n
* -ZMF_ERROR_WINADM_CORE_DMO_FREE: Windows平台音频模块core接口DMO相关的流处理资源时失败builtInAec才有可能产生此错误\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioInputStart, @ref Zmf_AudioInputStop, @ref Zmf_OnAudioInputDidStop
*/
int Zmf_AudioInputStopAll (void);
/**
* @brief
* @details Windows7系统支持
* @param level dB
* @return int, boost增益值的结果\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_ADM_MIC_UNINITED: (/)\n
* -ZMF_ERROR_WINADM_CORE_NO_BOOST_DEVICE: zmf未在系统中找到可用的boost设备\n
* @pre @ref Zmf_AudioInitialize
* @pre Boost模式设置接口@ref Zmf_AudioInputBoostControl Manual
* @see @ref Zmf_AudioInputGetBoostLevel, @ref Zmf_AudioInputBoostControl
*/
int Zmf_AudioInputSetBoostLevel(float level);
/**
* @brief
* @details Windows7系统支持
* @param level float指针dB
* @return int, boost增益值的结果\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_ADM_MIC_UNINITED: (/)\n
* -ZMF_ERROR_WINADM_CORE_NO_BOOST_DEVICE: zmf未在系统中找到可用的boost设备\n
* @pre @ref Zmf_AudioInitialize
* @pre Boost模式设置接口@ref Zmf_AudioInputBoostControl Manual
* @see @ref Zmf_AudioInputSetBoostLevel, @ref Zmf_AudioInputBoostControl
*/
int Zmf_AudioInputGetBoostLevel(float* level);
/**
* @brief
* @details Windows7系统支持
* @param mode @ref ZmfBoostMode
* Off模式 @ref Zmf_AudioInputStart 0
* @ref Zmf_AudioInputStop
* Manual模式 @ref Zmf_AudioInputStart , @ref Zmf_AudioInputGetBoostLevel
* @ref Zmf_AudioInputSetBoostLevel
* off模式
* @return int, boost模式的结果\n
* 0: boost模式成功\n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* @pre @ref Zmf_AudioInitialize
* @warning @ref Zmf_AudioInputStart
* @ref Zmf_AudioInputStop, @ref Zmf_AudioInputStopAll
* @see @ref Zmf_AudioInputSetBoostLevel, @ref Zmf_AudioInputGetBoostLevel
*/
int Zmf_AudioInputBoostControl(int mode);
/**
* @brief
* @details
* @return int\n
* =0: zmf没有获取到可用的音频输入设备\n
* >0: \n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_LINUXADM_PTRNULL: Linux平台调用除了初始化以外的zmf音频接口时linux音频设备指针为空\n
* -ZMF_ERROR_LINUXADM_ALSA_DEVICE_NAME_HINT: Linux平台ALSA接口获取设备信息时\n
* -ZMF_ERROR_MAC_ACQUIRE_AUDIO_DEVICE_FAILED: MacOS平台获取音频设备信息失败\n
* -ZMF_ERROR_WINADM_CORE_ENUM_DEVICE: Windows平台音频模块core接口\n
* -ZMF_ERROR_WINADM_CORE_GET_DEVICE_COUNT: Windows平台音频模块core接口\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioOutputGetName
*/
int Zmf_AudioOutputGetCount (void);
/**
* @brief
* @details Windows/Linux支持ZMF音频模块绑定的扬声器的音量
* @param percent int类型[0, 100]
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: \n
* -ZMF_ERROR_ADM_SPK_UNINITED: (/)\n
* -ZMF_ERROR_LINUXADM_PTRNULL: Linux平台设置音频输出设备音量时linux音频设备指针为空\n
* -ZMF_ERROR_WINADM_SPK_VOLUME_UNAVAILABLE: Windows平台音频模块\n
* -ZMF_ERROR_WINADM_MIXER_UNSET: Windows平台音频模块mixer相关函数时mixer句柄为空\n
* -ZMF_ERROR_WINADM_MIXER_GET_VOLUME_CONTROL: Windows平台音频模块mixer接口获取指定设备的音量控制权限时失败\n
* -ZMF_ERROR_WINADM_MIXER_SET_VOLUME: Windows平台音频模块mixer设置麦克风或扬声器音量失败\n
* -ZMF_ERROR_WINADM_PLAY_DEVICE_UNSET: Windows平台音频模块core接口使\n
* -ZMF_ERROR_WINADM_CORE_SPK_SET_VOLUME: Windows平台音频模块core接口\n
* -ZMF_ERROR_WINADM_CORE_SPK_VOLUME_INVALID: Windows平台音频模块core接口\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioInputSetVolume, @ref Zmf_AudioOutputGetVolume
*/
int Zmf_AudioOutputSetVolume(int percent);
/**
* @brief
* @details Windows/Linux支持ZMF音频模块绑定的扬声器的音量
* @param percent int类型[0, 100]
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: \n
* -ZMF_ERROR_ADM_SPK_UNINITED: (/)\n
* -ZMF_ERROR_LINUXADM_PTRNULL: linux音频设备指针为空\n
* -ZMF_ERROR_LINUXADM_SPK_VOLUME_NOT_AVAILABLE: Linux平台音频模块\n
* -ZMF_ERROR_WINADM_SPK_VOLUME_UNAVAILABLE: Windows平台音频模块\n
* -ZMF_ERROR_WINADM_MIXER_UNSET: Windows平台音频模块mixer相关函数时mixer句柄为空\n
* -ZMF_ERROR_WINADM_MIXER_GET_VOLUME_CONTROL: Windows平台音频模块mixer接口获取指定设备的音量控制权限时失败\n
* -ZMF_ERROR_WINADM_PLAY_DEVICE_UNSET: Windows平台音频模块core接口使\n
* -ZMF_ERROR_WINADM_CORE_SPK_GET_VOLUME: Windows平台音频模块core接口\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioInputGetVolume, @ref Zmf_AudioInputSetVolume
*/
int Zmf_AudioOutputGetVolume(int* percent);
/**
* @brief
* @details iIndexId和名称
* @param iIndex @ref Zmf_AudioOutputGetCount
* count[0, count-1]
* @param acId 512buffer指针IdNULL
* @param acName 512buffer指针NULL
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_INPUT_PTR_NULL: Linux平台ALSA音频接口获取非default设备名称时id字符串非空\n
* -ZMF_ERROR_WC_TO_MB: (WideChar)(MultiByte)\n
* -ZMF_ERROR_ADM_INDEXINVALID: zmf音频接口时index无效\n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_LINUXADM_PTRNULL: Linux平台调用除了初始化以外的zmf音频接口时linux音频设备指针为空\n
* -ZMF_ERROR_MAC_INVALID_AUDIO_PARAM: MacOS平台音频参数错误\n
* -ZMF_ERROR_MAC_ACQUIRE_AUDIO_DEVICE_FAILED: MacOS平台获取音频设备失败\n
* -ZMF_ERROR_WINADM_WAVE_GET_DEVCAPS: Windows平台音频模块wave设备的device caps出错\n
* -ZMF_ERROR_WINADM_CORE_ENUM_DEVICE: Windows平台音频模块core接口\n
* -ZMF_ERROR_WINADM_CORE_GET_DEVICE_COUNT: Windows平台音频模块core接口\n
* -ZMF_ERROR_WINADM_CORE_GET_DEVICE: Windows平台音频模块core接口使\n
* @pre @ref Zmf_AudioInitialize
* @pre @ref Zmf_AudioOutputGetCount
* @see @ref Zmf_AudioOutputGetCount
*/
int Zmf_AudioOutputGetName (int iIndex, char acId[512], char acName[512]);
/**
* @brief
* @details
* @param pcId buffer指针Id
* @param iSamplingRate Hz0
* @param iChannelNumber 0
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_ADM_OUTPUTSTARTED: AudioOutputStart接口时\n
* -ZMF_ERROR_ADM_IDINVALID: AudioOutputStart接口时ID无效\n
* -ZMF_ERROR_ADM_PLAY_INITED: \n
* -ZMF_ERROR_ADM_INDEXINVALID: zmf音频接口时index无效\n
* -ZMF_ERROR_ADM_PLAY_STARTED: \n
* -ZMF_ERROR_ADM_PLAY_START_WITHOUT_INIT: \n
* -ZMF_ERROR_LINUXADM_PTRNULL: AudioOutputStart接口时zmf模块的linux音频设备指针为空\n
* -ZMF_ERROR_LINUXADM_PLAY_INITED: Linux平台启动音频播放之前\n
* -ZMF_ERROR_LINUXADM_PLAY_STARTED: Linux平台启动音频播放之前\n
* -ZMF_ERROR_LINUXADM_PLAY_START_WITHOUT_INIT: Linux平台启动音频播放时\n
* -ZMF_ERROR_LINUXADM_ALSA_PLAY_OPEN_DEVICE: Linux平台启动音频播放时ALSA设备\n
* -ZMF_ERROR_LINUXADM_ALSA_PLAY_SETTING: Linux平台启动音频播放时ALSA设备/\n
* -ZMF_ERROR_LINUXADM_ALSA_PLAY_INIT: Linux平台启动音频采集时ALSA的采集设备最终初始化失败\n
* -ZMF_ERROR_LINUXADM_ALSA_PLAY_ALLOC_BUFFER: Linux平台启动音频播放时ALSA设备buffer失败\n
* -ZMF_ERROR_LINUXADM_ALSA_PLAY_THREAD_START: Linux平台启动音频播放时ALSA设备线\n
* -ZMF_ERROR_LINUXADM_PULSE_PLAY_CREATE_STREAM: Linux平台启动音频播放时Pulse设备\n
* -ZMF_ERROR_LINUXADM_PULSE_PLAY_GET_SPEC: Linux平台启动音频播放时Pulse设备/\n
* -ZMF_ERROR_LINUXADM_PULSE_PLAY_ACTIVATE_TIMEOUT: Linux平台启动音频播放时Pulse设备\n
* -ZMF_ERROR_LINUXADM_PULSE_PLAY_START: Linux平台启动音频播放时Pulse设备(线)\n
* -ZMF_ERROR_MAC_AUDIO_OUTPUT_DEVICE_ALREADYSTART: MacOS平台音频采集已开启\n
* -ZMF_ERROR_MAC_INVALID_AUDIO_PARAM: MacOS平台无效的音频参数\n
* -ZMF_ERROR_MAC_AUDIO_OUTPUT_DEVICE_ALREADYSTART: MacOS平台音频采集初始化失败\n
* -ZMF_ERROR_MAC_AUDIO_OUTPUT_DEVICE_UNSPECIFIED: MacOS平台音频未指定特定播放设备\n
* -ZMF_ERROR_MAC_AUDIO_INVALID_OUTPUT_FORMAT: MacOS平台音频内部无效的输出格式\n
* -ZMF_ERROR_MAC_AUDIO_OUTPUT_MANY_CHANNELS: MacOS平台音频内部过多的音频通道\n
* -ZMF_ERROR_MAC_AUDIO_NONINTERLEAVED_DATA_UNSUPPORTED: MacOS平台音频不支持非交替的音频数据\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETPROPERTY_FAILED: iOS平台音频会话设置参数失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETACTIVATE_FAILED: iOS平台音频会话激活失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETCATEGORY_FAILED: iOS平台音频会话设置种类失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETMODE_FAILED: iOS平台音频会话设置模式失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_SETACTIVATEWITHFLAGS_FAILED: iOS平台音频会话通过标志位激活失败\n
* -ZMF_ERROR_IOS_AUDIO_COMPONENT_CREATE_INSTANCE_FAILED: iOS平台新建音频组件实例失败\n
* -ZMF_ERROR_IOS_AUDIO_COMPONENT_GETDESCRIPTION_FAILED: iOS平台音频组件获取详细藐视失败\n
* -ZMF_ERROR_IOS_AUDIO_INIT_TOOMANY_ATTEMPTS: iOS平台音频初始化太多次尝试\n
* -ZMF_ERROR_IOS_AUDIO_OUTPUTUNIT_START_FAILED: iOS平台音频输出单元开始失败\n
* -ZMF_ERROR_WINADM_PLAY_DEVICE_UNSET: Windows平台音频模块core接口使\n
* -ZMF_ERROR_WINADM_CORE_GET_DEVICE: Windows平台音频模块core接口使\n
* -ZMF_ERROR_WINADM_CORE_DEVICE_ACTIVATE: Windows平台音频模块core接口Activate函数激活音频输入输出设备失败\n
* -ZMF_ERROR_WINADM_CORE_DEVICE_INIT: Windows平台音频模块core接口Initialize函数初始化音频输入输出设备失败\n
* -ZMF_ERROR_WINADM_CORE_SET_EVENTHANDLE: Windows平台音频模块core接口SetEventHandle函数为音频输入输出设备设置ready事件时失败\n
* -ZMF_ERROR_WINADM_CORE_GET_SERVICE: Windows平台音频模块core接口GetService函数获取音频输入输出设备的服务句柄时失败\n
* -ZMF_ERROR_WINADM_WAVE_OUT_OPEN: Windows平台音频模块wave接口waveOutOpen接口出错\n
* -ZMF_ERROR_WINADM_WAVE_PLAY_ACTIVATE_TIMEOUT: Windows平台启动音频播放时wave接口线/\n
* -ZMF_ERROR_WINADM_WAVE_PLAY_START: Windows平台启动音频播放时wave接口(线)\n
* @note 线线 @ref ZmfEventListenCallback
* @ref ZmfAudioErrorOccurred \n
* ZMF_ERROR_LINUXADM_ALSA_SND_AVAIL_UPDATE: Linux平台音频模块ALSA设备线snd_pcm_avail_update函数失败frame数量\n
* ZMF_ERROR_LINUXADM_ALSA_SND_WRITE_PCM: Linux平台音频模块ALSA设备线snd_pcm_writei函数出错\n
* ZMF_ERROR_LINUXADM_PULSE_CONNECT_STREAM: Linux平台音频模块Pulse设备线\n
* ZMF_ERROR_LINUXADM_PULSE_STREAM_WRITE: Linux平台音频模块Pulse设备线pa_stream_write函数出错\n
* ZMF_ERROR_WINADM_PLAY_STATEMODIFY: Windows平台音频模块线线退\n
* ZMF_ERROR_WINADM_CORE_GET_BUFSIZE: Windows平台音频模块core接口线\n
* ZMF_ERROR_WINADM_CORE_GET_BUFFER: Windows平台音频模块core接口\n
* ZMF_ERROR_WINADM_CORE_RELEASE_BUFFER: Windows平台音频模块core接口\n
* ZMF_ERROR_WINADM_CORE_START_DEVICE: Windows平台音频模块core接口线\n
* ZMF_ERROR_WINADM_CORE_PLAY_TIMEOUT: Windows平台音频模块core接口线(sampleReady或者shutdown)5\n
* ZMF_ERROR_WINADM_CORE_PLAY_WAIT_UNKNOWN: Windows平台音频模块core接口线(sampleReady或者shutdown)线\n
* ZMF_ERROR_WINADM_CORE_PLAY_GET_PADDING: Windows平台音频模块core接口线GetCurrentPadding接口时出错lasterror的msg字段或日志\n
* ZMF_ERROR_WINADM_WAVE_OUT_WRITE: Windows平台音频模块wave接口waveOutWrite函数写入要播放的音频数据时出错\n
* @pre @ref Zmf_AudioInitialize
* @pre @ref Zmf_AudioOutputGetCount
* @pre Id @ref Zmf_AudioOutputGetName
* @see @ref Zmf_AudioOutputStop, @ref Zmf_AudioOutputStopAll
*/
int Zmf_AudioOutputStart (const char* pcId, int iSamplingRate, int iChannelNumber);
/**
* @brief
* @details Id
* @param pcId buffer指针Id
* @return int\n
* 0: \n
* -ZMF_ERROR_ARGUMENT_INVALID: \n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_ADM_ID_INCONSISTENT: ID和实际正在工作的音频设备ID不一致\n
* -ZMF_ERROR_IOS_AUDIO_OUTPUT_NOT_STARTED: iOS平台音频播放未开启\n
* -ZMF_ERROR_IOS_AUDIO_OUTPUTUNIT_STOP_FAILED: iOS平台音频输出单元停止失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_UNINIT_FAILED: iOS平台音频会话获取参数失败\n
* -ZMF_ERROR_WINADM_WAVE_PLAY_ACTIVATE_TIMEOUT: Windows平台启动音频播放时wave接口线/\n
* -ZMF_ERROR_WINADM_WAVE_PLAY_STOP: Windows平台停止音频播放时wave接口线(线)\n
* -ZMF_ERROR_WINADM_CORE_PLAY_THREAD_TERMINATE: Windows平台音频模块core接口线线\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioOutputStart, @ref Zmf_AudioOutputStopAll, @ref Zmf_OnAudioOutputDidStop
*/
int Zmf_AudioOutputStop (const char* pcId);
/**
* @brief
* @details
* @return int\n
* 0: \n
* -ZMF_ERROR_ADM_NOTINIT: zmf音频接口时\n
* -ZMF_ERROR_ADM_ID_INCONSISTENT: ID和实际正在工作的音频设备ID不一致\n
* -ZMF_ERROR_IOS_AUDIO_OUTPUT_NOT_STARTED: iOS平台音频播放未开启\n
* -ZMF_ERROR_IOS_AUDIO_OUTPUTUNIT_STOP_FAILED: iOS平台音频输出单元停止失败\n
* -ZMF_ERROR_IOS_AUDIO_SESSION_UNINIT_FAILED: iOS平台音频会话获取参数失败\n
* -ZMF_ERROR_WINADM_WAVE_PLAY_ACTIVATE_TIMEOUT: Windows平台启动音频播放时wave接口线/\n
* -ZMF_ERROR_WINADM_WAVE_PLAY_STOP: Windows平台停止音频播放时wave接口线(线)\n
* -ZMF_ERROR_WINADM_CORE_PLAY_THREAD_TERMINATE: Windows平台音频模块core接口线线\n
* @pre @ref Zmf_AudioInitialize
* @see @ref Zmf_AudioOutputStart, @ref Zmf_AudioOutputStop, @ref Zmf_OnAudioOutputDidStop
*/
int Zmf_AudioOutputStopAll (void);
int Zmf_AudioOutputDefaultDeviceSet(const char *outputId);
/**
* @}
*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
#ifdef __GNUC__
#pragma GCC visibility pop
#endif
#endif /* __ZMF_AUDIO_H__ */