zmf_audio.h
13.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
#ifndef __ZMF_AUDIO_H__
#define __ZMF_AUDIO_H__
/**
* @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);
/**
* @brief Set log print level, default is 0(debug level)
* @param[in] level [0-4] debug, info, warn, error, silent
*/
void Zmf_LogSetLevel (int level);
#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 */
} ZmfSessionMode;
#ifdef __OBJC__
#import <UIKit/UIKit.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;
/**
* @}
*/
#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 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 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 */
#endif /* __ZMF_AUDIO_H__ */