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.
492 lines
15 KiB
492 lines
15 KiB
#ifndef __ZMF_AUDIO_H__ |
|
#define __ZMF_AUDIO_H__ |
|
#if __GNUC__ |
|
#pragma GCC visibility push(default) |
|
#endif |
|
/** |
|
* @file zmf_audio.h |
|
* @brief ZMF audio interfaces |
|
*/ |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
/** |
|
* @brief Initialize Audio module of ZMF(Zero Media Framework). |
|
* @param applicationContext For Windows, it can be the handle of the window, |
|
* The notification event will be sent to that window. |
|
* Or it can be callback function of type ZmfEventListenCallback. |
|
* For Android, it must be the Context. |
|
* For iOS, it should be NULL and is ignored. |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioInitialize(void *applicationContext); |
|
|
|
/** |
|
* @brief Destory Audio module of ZMF module. All resources will be released. |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioTerminate (void); |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif /* __cplusplus */ |
|
|
|
/** |
|
* @brief AEC mode. |
|
*/ |
|
typedef enum { |
|
ZmfAecAuto = -1, /**< @brief Auto select mode. */ |
|
ZmfAecOff = 0, /**< @brief Disable AEC. */ |
|
ZmfAecOn = 1, /**< @brief Enable AEC. */ |
|
} ZmfAecMode; |
|
|
|
/** |
|
* @brief AGC mode. |
|
*/ |
|
typedef enum { |
|
ZmfAgcAuto = -1, /**< @brief Auto select mode. */ |
|
ZmfAgcOff = 0, /**< @brief Disable AGC. */ |
|
ZmfAgcOn = 1, /**< @brief Enable AGC. */ |
|
} ZmfAgcMode; |
|
|
|
/** |
|
* @brief Session Mode. |
|
*/ |
|
typedef enum { |
|
ZmfSessionAutoMode = 0, /**< @brief Auto select mode, i.e. do nothing. */ |
|
ZmfSessionDefault = 1, /**< @brief Default mode. if not support, do nothing */ |
|
ZmfSessionVoiceChat = 2, /**< @brief Voice mode, if not support, set Default mode */ |
|
ZmfSessionVideoChat = 3, /**< @brief Video mode, if not support, set Default mode */ |
|
/** mask flags */ |
|
ZmfSessionMixWithOthers = 1<<31, /** @brief Mix with other App sound, only ios supported */ |
|
ZmfSessionDuckOthers = 1<<30, /** @brief Duck other App sound, only ios supported */ |
|
} ZmfSessionMode; |
|
|
|
/** |
|
* @brief Audio device state mode. |
|
*/ |
|
typedef enum { |
|
ZmfAudioDeviceActive = 1, /**< @brief audio device enabled and plugged. */ |
|
ZmfAudioDeviceDisabled = 2, /**< @brief audio device disabled. */ |
|
ZmfAudioDeviceNotPresent = 3, /**< @brief audio device not present. */ |
|
ZmfAudioDeviceUnplugged = 4, /**< @brief audio device enabled but unplugged. */ |
|
} ZmfAudioDeviceStateMode; |
|
|
|
#ifdef __OBJC__ |
|
#import <Foundation/Foundation.h> |
|
/** |
|
* @defgroup ZmfAudioDeviceId Audio Device ID |
|
* @{ |
|
*/ |
|
|
|
/** @brief Device ID string of Remote IO. */ |
|
extern const char * const ZmfAudioDeviceRemote; |
|
|
|
/** @brief Device ID string of Voice Processing IO. */ |
|
extern const char * const ZmfAudioDeviceVoice; |
|
|
|
/** |
|
* @} |
|
*/ |
|
|
|
/** |
|
* @defgroup ZmfAudioNotificationParameters Audio Notification Parameters. |
|
* @{ |
|
*/ |
|
|
|
/** |
|
* @brief An NSString object containing a string that identifies |
|
* audio input device ID. |
|
*/ |
|
extern NSString * const ZmfAudioInput; |
|
|
|
/** |
|
* @brief An NSString object containing a string that identifies |
|
* audio output device ID. |
|
*/ |
|
extern NSString * const ZmfAudioOutput; |
|
|
|
/** |
|
* @brief An NSNumber object containing an integer that identifies |
|
* the samping rate in Hz. |
|
*/ |
|
extern NSString * const ZmfSamplingRate; |
|
|
|
/** |
|
* @brief An NSNumber object containing an integer that identifies |
|
* the channel number. |
|
*/ |
|
extern NSString * const ZmfChannelNumber; |
|
|
|
/** |
|
* @brief An NSNumber object containing an integer that identifies |
|
* the request type for Automatic Gain Control(AGC). |
|
* For a list of possible values, @ref ZmfAgcMode. |
|
*/ |
|
extern NSString * const ZmfAutoGainControl; |
|
|
|
/** |
|
* @brief An NSNumber object containing an integer that identifies |
|
* the request type for Acoustic Echo Cancellation(AEC). |
|
* For a list of possible values, @ref ZmfAecMode. |
|
*/ |
|
extern NSString * const ZmfAcousticEchoCancel; |
|
|
|
/** |
|
* @brief An NSString object containing a string that identifies |
|
* the reason of error. |
|
*/ |
|
extern NSString * const ZmfAudioError; |
|
|
|
/** |
|
* @} |
|
*/ |
|
|
|
/** |
|
* @defgroup ZmfAudioNotifications Audio Notifications. |
|
* @{ |
|
*/ |
|
|
|
/** |
|
* @brief Post when the ZMF module request to start recording audio data. |
|
* |
|
* The userInfo dictionary of this notification contains @ref ZmfAudioInput, |
|
* @ref ZmfSamplingRate and @ref ZmfChannelNumber, which provide detail |
|
* information for the request. |
|
*/ |
|
extern NSString * const ZmfAudioInputRequestStart; |
|
|
|
/** |
|
* @brief Post when the ZMF module request to stop recording audio data. |
|
* |
|
* The userInfo dictionary of this notification contains @ref ZmfAudioInput, |
|
* which provide detail information for the request. |
|
*/ |
|
extern NSString * const ZmfAudioInputRequestStop; |
|
|
|
/** |
|
* @brief Post when the ZMF module has received first audio input data after |
|
* @ref Zmf_AudioInputStart is invoked. |
|
* |
|
* The userInfo dictionary of this notification contains @ref ZmfAudioInput, |
|
* @ref ZmfSamplingRate and @ref ZmfChannelNumber, which indicate the actual |
|
* parameters of the audio data recorded. |
|
*/ |
|
extern NSString * const ZmfAudioInputDidStart; |
|
|
|
/** |
|
* @brief Post when the ZMF module request to start playing audio data. |
|
* |
|
* The userInfo dictionary of this notification contains @ref ZmfAudioOutput, |
|
* @ref ZmfSamplingRate and @ref ZmfChannelNumber, which provide detail |
|
* information for the request. |
|
*/ |
|
extern NSString * const ZmfAudioOutputRequestStart; |
|
|
|
/** |
|
* @brief Post when the ZMF module request to stop playing audio data. |
|
* |
|
* The userInfo dictionary of this notification contains @ref ZmfAudioOutput, |
|
* which provide detail information for the request. |
|
*/ |
|
extern NSString * const ZmfAudioOutputRequestStop; |
|
|
|
/** |
|
* @brief Post when the ZMF module has delivered first audio output data after |
|
* @ref Zmf_AudioOutputStart is invoked. |
|
* |
|
* The userInfo dictionary of this notification contains @ref ZmfAudioOutput, |
|
* @ref ZmfSamplingRate and @ref ZmfChannelNumber, which indicate the actual |
|
* parameters of the audio data. |
|
*/ |
|
extern NSString * const ZmfAudioOutputDidStart; |
|
|
|
/** |
|
* @brief Post when the ZMF Audio module has received an interruption during working, |
|
* and then enter into an interrupted status. |
|
* |
|
* The ZMF Audio module will stop working (input/output) automatically. |
|
*/ |
|
extern NSString * const ZmfAudioInterrupted; |
|
|
|
/** |
|
* @brief Post when the ZMF Audio module has received a 'should resume' message |
|
* at the interrupted status. |
|
* |
|
* The ZMF Audio module will restore working (input/output) automatically. |
|
*/ |
|
extern NSString * const ZmfAudioDidResume; |
|
|
|
/** @brief Post when the ZMF Audio module has an error occurred. |
|
* |
|
* The userInfo dictionary of this notification contains @ref ZmfAudioError |
|
*/ |
|
extern NSString * const ZmfAudioErrorOccurred; |
|
|
|
/** @brief Post when the ZMF Audio mode changed |
|
* |
|
* The object of this notification is NSNumber of mode. |
|
*/ |
|
extern NSString * const ZmfAudioSessionMode; |
|
/** |
|
* @} |
|
*/ |
|
|
|
#endif /* __OBJC__ */ |
|
|
|
#ifdef _WIN32 |
|
|
|
/** |
|
* @brief Event number for audio notifications. |
|
* |
|
* The wParam of the event is the type of notification. |
|
* For a list of possible values, @ref ZmfAudioEventType. |
|
* |
|
* The lParam of the event may contain a JSON object which depends on the |
|
* type of notification. |
|
*/ |
|
#define ZmfAudioEvent WM_APP + 130 |
|
|
|
/** |
|
* @defgroup ZmfNotificationParameters Audio Notification Parameters. |
|
* @{ |
|
*/ |
|
|
|
/** |
|
* @brief A String object containing a string that identifies |
|
* ID of audio input device. |
|
*/ |
|
#define ZmfAudioInput "AudioInput" |
|
|
|
/** |
|
* @brief A String object containing a string that identifies |
|
* ID of audio output device. |
|
*/ |
|
#define ZmfAudioOutput "AudioOutput" |
|
|
|
/** |
|
* @brief A Number object containing an integer that identifies |
|
* the samping rate in Hz. |
|
*/ |
|
#define ZmfSamplingRate "SamplingRate" |
|
|
|
/** |
|
* @brief A Number object containing an integer that identifies |
|
* the channel number. |
|
*/ |
|
#define ZmfChannelNumber "ChannelNumber" |
|
|
|
/** |
|
* @brief A Number object containing an integer that identifies |
|
* the request type for Automatic Gain Control(AGC). |
|
* For a list of possible values, @ref ZmfAgcMode. |
|
*/ |
|
#define ZmfAutoGainControl "AutoGainControl" |
|
|
|
/** |
|
* @brief A Number object containing a integer that identifies |
|
* the request type for Acoustic Echo Cancellation(AEC). |
|
* For a list of possible values, @ref ZmfAecMode. |
|
*/ |
|
#define ZmfAcousticEchoCancel "AcousticEchoCancel" |
|
|
|
/** |
|
* @brief A Number object containing a integer that identifies |
|
* audio device state. |
|
* For a list of possible values, @ref ZmfAudioDeviceStateMode. |
|
*/ |
|
#define ZmfAudioDeviceState "State" |
|
|
|
/** |
|
* @brief A String object containing a string that describes error reason. |
|
* the format match 'input <id>|output <id>|audio: <reason>'. |
|
*/ |
|
#define ZmfAudioError "AudioError" |
|
|
|
/** |
|
* @} |
|
*/ |
|
|
|
/** |
|
* @brief Type of audio notifications. |
|
*/ |
|
typedef enum { |
|
/** |
|
* @brief Post when the ZMF module request to start recording audio data. |
|
* |
|
* The lParam of this event is a JSON object contains @ref ZmfAudioInput, |
|
* @ref ZmfSamplingRate and @ref ZmfChannelNumber, which provide detail |
|
* information for the request. |
|
*/ |
|
ZmfAudioInputRequestStart = 1, |
|
|
|
/** |
|
* @brief Post when the ZMF module request to stop recording audio data. |
|
* |
|
* The lParam of this event is a JSON object contains @ref ZmfAudioInput, |
|
* which provide detail information for the request. |
|
*/ |
|
ZmfAudioInputRequestStop = 2, |
|
|
|
/** |
|
* @brief Post when the ZMF module has received first audio input data after |
|
* @ref Zmf_AudioInputStart is invoked. |
|
* |
|
* The lParam of this event is a JSON object contains @ref ZmfAudioInput, |
|
* @ref ZmfSamplingRate and @ref ZmfChannelNumber, which indicate the actual |
|
* parameters of the audio data recorded. |
|
*/ |
|
ZmfAudioInputDidStart = 3, |
|
|
|
/** |
|
* @brief Post when the ZMF module request to start playing audio data. |
|
* |
|
* The lParam of this event is a JSON object contains @ref ZmfAudioOutput, |
|
* @ref ZmfSamplingRate and @ref ZmfChannelNumber, which provide detail |
|
* information for the request. |
|
*/ |
|
ZmfAudioOutputRequestStart = 4, |
|
|
|
/** |
|
* @brief Post when the ZMF module request to stop playing audio data. |
|
* |
|
* The userInfo dictionary of this notification contains @ref ZmfAudioOutput, |
|
* which provide detail information for the request. |
|
*/ |
|
ZmfAudioOutputRequestStop = 5, |
|
|
|
/** |
|
* @brief Post when the ZMF module has delivered first audio output data after |
|
* @ref Zmf_AudioOutputStart is invoked. |
|
* |
|
* The lParam of this event is a JSON object contains @ref ZmfAudioOutput, |
|
* @ref ZmfSamplingRate and @ref ZmfChannelNumber, which indicate the actual |
|
* parameters of the audio data. |
|
*/ |
|
ZmfAudioOutputDidStart = 6, |
|
|
|
/** @brief Post when the ZMF Audio module has detected audio output device changed. |
|
* |
|
* The lParam of this event is a JSON object contains @ref ZmfAudioOutput, |
|
* @ref ZmfAudioDeviceState. |
|
*/ |
|
ZmfAudioOutputStateChanged = 8, |
|
|
|
/** @brief Post when the ZMF Audio module has an error occurred. |
|
* |
|
* The lParam of this event is a JSON object contains @ref ZmfAudioError |
|
*/ |
|
ZmfAudioErrorOccurred = 7, |
|
} ZmfAudioEventType; |
|
|
|
#endif /* _WIN32 */ |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
/** |
|
* @brief Set audio session mode |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioSessionSetMode (ZmfSessionMode enAudioMode); |
|
|
|
/** |
|
* @brief Get count of audio input devices. |
|
* @return The total count of audio input devices. |
|
*/ |
|
int Zmf_AudioInputGetCount (void); |
|
|
|
/** |
|
* @brief Set volume of audio input device, only supported on Windows |
|
* |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioInputSetVolume(int percent); |
|
|
|
/** |
|
* @brief Get the name of audio input device. |
|
* @param iIndex The index of audio input device, from 0 to count - 1. |
|
* @param acId Pointer the buffer contains ID string. |
|
* @param acName Pointer the buffer contains utf8 name string. |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioInputGetName (int iIndex, char acId[512], char acName[512]); |
|
|
|
/** |
|
* @brief Start audio input device to record data. |
|
* @param pcId The ID of audio input device. |
|
* @param iSamplingRate Sampling rate in Hz, 0 for auto selection. |
|
* @param iChannelNumber Channel number, 0 for auto selection. |
|
* @param enAecMode AEC mode @ref ZmfAecMode. |
|
* @param enAgcMode AGC mode @ref ZmfAgcMode. |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioInputStart (const char* pcId, int iSamplingRate, int iChannelNumber, |
|
ZmfAecMode enAecMode, ZmfAgcMode enAgcMode); |
|
|
|
/** |
|
* @brief Stop audio input device. |
|
* @param pcId The ID of audio input device. |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioInputStop (const char* pcId); |
|
|
|
/** |
|
* @brief Stop all audio input devices. |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioInputStopAll (void); |
|
|
|
/** |
|
* @brief Get count of audio output devices. |
|
* @return The total count of audio output devices. |
|
*/ |
|
int Zmf_AudioOutputGetCount (void); |
|
|
|
/** |
|
* @brief Set volume of audio output device, only supported on Windows |
|
* |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioOutputSetVolume(int percent); |
|
/** |
|
* @brief Get the name of audio output device. |
|
* @param iIndex The index of audio output device, from 0 to count - 1. |
|
* @param acId Pointer the buffer contains ID string. |
|
* @param acName Pointer the buffer contains name utf8 string. |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioOutputGetName (int iIndex, char acId[512], char acName[512]); |
|
|
|
/** |
|
* @brief Start audio output device to play data. |
|
* @param pcId The ID of audio output device. |
|
* @param iSamplingRate Sampling rate in Hz, 0 for auto selection. |
|
* @param iChannelNumber Channel number, 0 for auto selection. |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioOutputStart (const char* pcId, int iSamplingRate, int iChannelNumber); |
|
|
|
/** |
|
* @brief Stop audio output device. |
|
* @param pcId The ID of audio output device. |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioOutputStop (const char* pcId); |
|
|
|
/** |
|
* @brief Stop all audio output devices. |
|
* @return 0 on succeed, otherwise failed. |
|
*/ |
|
int Zmf_AudioOutputStopAll (void); |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif /* __cplusplus */ |
|
#if __GNUC__ |
|
#pragma GCC visibility pop |
|
#endif |
|
#endif /* __ZMF_AUDIO_H__ */
|
|
|