• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# native_audiostream_base.h
2<!--Kit: Audio Kit-->
3<!--Subsystem: Multimedia-->
4<!--Owner: @songshenke-->
5<!--Designer: @caixuejiang; @hao-liangfei; @zhanganxiang-->
6<!--Tester: @Filger-->
7<!--Adviser: @zengyawen-->
8
9## 概述
10
11声明OHAudio基础的数据结构。
12
13**引用文件:** <ohaudio/native_audiostream_base.h>
14
15**库:** libohaudio.so
16
17**系统能力:** SystemCapability.Multimedia.Audio.Core
18
19**起始版本:** 10
20
21**相关模块:** [OHAudio](capi-ohaudio.md)
22
23## 汇总
24
25### 结构体
26
27| 名称 | typedef关键字 | 描述 |
28| -- | -- | -- |
29| [OH_AudioStreamInfo](capi-ohaudio-oh-audiostreaminfo.md) | OH_AudioStreamInfo | 定义音频流信息,用于描述基本音频格式。 |
30| [OH_AudioRenderer_Callbacks_Struct](capi-ohaudio-oh-audiorenderer-callbacks-struct.md) | OH_AudioRenderer_Callbacks | 声明输出音频流的回调函数指针。 |
31| [OH_AudioCapturer_Callbacks_Struct](capi-ohaudio-oh-audiocapturer-callbacks-struct.md) | OH_AudioCapturer_Callbacks | 声明输入音频流的回调函数指针。<br> 为了避免不可预期的行为,在设置音频回调函数时,请确保该结构体的每一个成员变量都被自定义的回调方法或空指针初始化。 |
32| [OH_AudioStreamBuilderStruct](capi-ohaudio-oh-audiostreambuilderstruct.md) | OH_AudioStreamBuilder | 声明音频流的构造器。构造器实例通常被用来设置音频流属性和创建音频流。 |
33| [OH_AudioRendererStruct](capi-ohaudio-oh-audiorendererstruct.md) | OH_AudioRenderer | 声明输出音频流。输出音频流的实例被用来播放音频数据。 |
34| [OH_AudioCapturerStruct](capi-ohaudio-oh-audiocapturerstruct.md) | OH_AudioCapturer | 声明输入音频流。输入音频流的实例被用来获取音频数据。 |
35
36### 枚举
37
38| 名称 | typedef关键字 | 描述 |
39| -- | -- | -- |
40| [OH_AudioStream_Result](#oh_audiostream_result) | OH_AudioStream_Result | 音频错误码。 |
41| [OH_AudioStream_Type](#oh_audiostream_type) | OH_AudioStream_Type | 音频流类型。 |
42| [OH_AudioStream_SampleFormat](#oh_audiostream_sampleformat) | OH_AudioStream_SampleFormat | 定义音频流采样格式。 |
43| [OH_AudioStream_EncodingType](#oh_audiostream_encodingtype) | OH_AudioStream_EncodingType | 定义音频流编码类型。 |
44| [OH_AudioStream_Usage](#oh_audiostream_usage) | OH_AudioStream_Usage | 定义音频流使用场景。<br> 通常用来描述音频输出流的使用场景。 |
45| [OH_AudioStream_LatencyMode](#oh_audiostream_latencymode) | OH_AudioStream_LatencyMode | 定义音频时延模式。 |
46| [OH_AudioStream_DirectPlaybackMode](#oh_audiostream_directplaybackmode) | OH_AudioStream_DirectPlaybackMode | 定义音频流direct通路播放模式。 |
47| [OH_AudioStream_VolumeMode](#oh_audiostream_volumemode) | OH_AudioStream_VolumeMode | 定义音频流音量模式。 |
48| [OH_AudioStream_State](#oh_audiostream_state) | OH_AudioStream_State | 定义音频流的状态。 |
49| [OH_AudioStream_SourceType](#oh_audiostream_sourcetype) | OH_AudioStream_SourceType | 定义音频流使用场景。<br> 通常用来描述音频输入流的使用场景。 |
50| [OH_AudioStream_Event](#oh_audiostream_event) | OH_AudioStream_Event | 定义音频事件。 |
51| [OH_AudioInterrupt_ForceType](#oh_audiointerrupt_forcetype) | OH_AudioInterrupt_ForceType | 定义音频中断类型。<br> 当用户监听到音频中断时,将获取此信息。<br> 此类型表示本次音频打断的操作是否已由系统强制执行,具体操作信息(如音频暂停、停止等)可通过[OH_AudioInterrupt_Hint](#oh_audiointerrupt_hint)获取。 |
52| [OH_AudioInterrupt_Hint](#oh_audiointerrupt_hint) | OH_AudioInterrupt_Hint | 定义音频中断提示类型。<br> 当用户监听到音频中断时,将获取此信息。<br> 此类型表示根据焦点策略,当前需要对音频流的具体操作(如暂停、调整音量等)。<br> 可以结合[OH_AudioInterrupt_ForceType](#oh_audiointerrupt_forcetype)信息,判断该操作是否已由系统强制执行。 |
53| [OH_AudioInterrupt_Mode](#oh_audiointerrupt_mode) | OH_AudioInterrupt_Mode | 定义音频中断模式。 |
54| [OH_AudioStream_AudioEffectMode](#oh_audiostream_audioeffectmode) | OH_AudioStream_AudioEffectMode | 定义音效模式。 |
55| [OH_AudioStream_FastStatus](#oh_audiostream_faststatus) | OH_AudioStream_FastStatus | 定义低时延状态。 |
56| [OH_AudioStream_DeviceChangeReason](#oh_audiostream_devicechangereason) | OH_AudioStream_DeviceChangeReason | 流设备变更原因。 |
57| [OH_AudioStream_PrivacyType](#oh_audiostream_privacytype) | OH_AudioStream_PrivacyType | 用于标识对应播放音频流是否支持被其他应用录制。 |
58| [OH_AudioData_Callback_Result](#oh_audiodata_callback_result) | OH_AudioData_Callback_Result | 定义音频数据回调结果。 |
59
60### 函数
61
62| 名称 | typedef关键字 | 描述 |
63| -- | -- | -- |
64| [typedef void (\*OH_AudioRenderer_OutputDeviceChangeCallback)(OH_AudioRenderer* renderer, void* userData, OH_AudioStream_DeviceChangeReason reason)](#oh_audiorenderer_outputdevicechangecallback) | OH_AudioRenderer_OutputDeviceChangeCallback | 输出音频流设备变更的回调函数。 |
65| [typedef void (\*OH_AudioRenderer_OnMarkReachedCallback)(OH_AudioRenderer* renderer, uint32_t samplePos, void* userData)](#oh_audiorenderer_onmarkreachedcallback) | OH_AudioRenderer_OnMarkReachedCallback | 到达标记位置时回调。 |
66| [typedef int32_t (\*OH_AudioRenderer_WriteDataWithMetadataCallback)(OH_AudioRenderer* renderer, void* userData, void* audioData, int32_t audioDataSize, void* metadata, int32_t metadataSize)](#oh_audiorenderer_writedatawithmetadatacallback) | OH_AudioRenderer_WriteDataWithMetadataCallback | 该函数指针将指向用于同时写入音频数据和元数据的回调函数。 |
67| [typedef OH_AudioData_Callback_Result (\*OH_AudioRenderer_OnWriteDataCallback)(OH_AudioRenderer* renderer, void* userData, void* audioData, int32_t audioDataSize)](#oh_audiorenderer_onwritedatacallback) | OH_AudioRenderer_OnWriteDataCallback | 该函数指针将指向用于写入音频数据的回调函数。<br> 回调函数仅用来写入音频数据,请勿在回调函数中调用AudioRenderer相关接口。<br> 该函数的返回结果表示填充到缓冲区的数据是否有效。如果结果无效,用户填写的数据将不被播放。回调函数结束后,音频服务会把audioData指针数据放入队列里等待播放,因此请勿在回调外再次更改audioData指向的数据, 且务必保证往audioData填满audioDataSize长度的待播放数据, 否则会导致音频服务播放杂音。 |
68| [typedef int32_t (\*OH_AudioRenderer_OnWriteDataCallbackAdvanced)(OH_AudioRenderer* renderer, void* userData, void* audioData, int32_t audioDataSize)](#oh_audiorenderer_onwritedatacallbackadvanced) | OH_AudioRenderer_OnWriteDataCallbackAdvanced | 该函数指针将指向用于写入音频数据的回调函数。不同于OH_AudioRenderer_OnWriteDataCallback,此函数允许应用填充[0, audioDataSize]长度的数据。<br> 其中audioDataSize为回调buffer的长度。调用方通过返回值告知系统写入的数据长度。<br> 如果返回0,回调线程将会sleep一段时间。<br> 否则,系统可能会立刻进行下一次回调。 |
69
70## 枚举类型说明
71
72### OH_AudioStream_Result
73
74```
75enum OH_AudioStream_Result
76```
77
78**描述**
79
80音频错误码。
81
82**起始版本:** 10
83
84| 枚举项 | 描述 |
85| -- | -- |
86| AUDIOSTREAM_SUCCESS = 0 | 操作成功 |
87| AUDIOSTREAM_ERROR_INVALID_PARAM = 1 | 入参错误。 |
88| AUDIOSTREAM_ERROR_ILLEGAL_STATE = 2 | 非法状态。 |
89| AUDIOSTREAM_ERROR_SYSTEM = 3 | 系统通用错误。 |
90| AUDIOSTREAM_ERROR_UNSUPPORTED_FORMAT = 4 | 不支持的音频格式,如不支持的编码类型、采样格式等。<br>**起始版本:** 19 |
91
92### OH_AudioStream_Type
93
94```
95enum OH_AudioStream_Type
96```
97
98**描述**
99
100音频流类型。
101
102**起始版本:** 10
103
104| 枚举项 | 描述 |
105| -- | -- |
106| AUDIOSTREAM_TYPE_RENDERER = 1 | 该类型代表音频流是输出流。 |
107| AUDIOSTREAM_TYPE_CAPTURER = 2 | 该类型代表音频流是输入流。 |
108
109### OH_AudioStream_SampleFormat
110
111```
112enum OH_AudioStream_SampleFormat
113```
114
115**描述**
116
117定义音频流采样格式。
118
119**起始版本:** 10
120
121| 枚举项 | 描述 |
122| -- | -- |
123| AUDIOSTREAM_SAMPLE_U8 = 0 | Unsigned 8位。 |
124| AUDIOSTREAM_SAMPLE_S16LE = 1 | Short 16位小端。 |
125| AUDIOSTREAM_SAMPLE_S24LE = 2 | Short 24位小端。 |
126| AUDIOSTREAM_SAMPLE_S32LE = 3 | Short 32位小端。 |
127| AUDIOSTREAM_SAMPLE_F32LE = 4 | Float 32位小端。<br>**起始版本:** 17 |
128
129### OH_AudioStream_EncodingType
130
131```
132enum OH_AudioStream_EncodingType
133```
134
135**描述**
136
137定义音频流编码类型。
138
139**起始版本:** 10
140
141| 枚举项 | 描述 |
142| -- | -- |
143| AUDIOSTREAM_ENCODING_TYPE_RAW = 0 | PCM编码。 |
144| AUDIOSTREAM_ENCODING_TYPE_AUDIOVIVID = 1 | Audio Vivid编码。<br>**起始版本:** 12 |
145| AUDIOSTREAM_ENCODING_TYPE_E_AC3 = 2 | E_AC3编码。<br>**起始版本:** 19 |
146
147### OH_AudioStream_Usage
148
149```
150enum OH_AudioStream_Usage
151```
152
153**描述**
154
155定义音频流使用场景。<br> 通常用来描述音频输出流的使用场景。
156
157**起始版本:** 10
158
159| 枚举项 | 描述 |
160| -- | -- |
161| AUDIOSTREAM_USAGE_UNKNOWN = 0 | 未知类型。 |
162| AUDIOSTREAM_USAGE_MUSIC = 1 | 音乐。 |
163| AUDIOSTREAM_USAGE_VOICE_COMMUNICATION = 2 | VoIP语音通话。 |
164| AUDIOSTREAM_USAGE_VOICE_ASSISTANT = 3 | 语音播报。 |
165| AUDIOSTREAM_USAGE_ALARM = 4 | 闹钟。 |
166| AUDIOSTREAM_USAGE_VOICE_MESSAGE = 5 | 语音消息。 |
167| AUDIOSTREAM_USAGE_RINGTONE = 6 | 铃声。 |
168| AUDIOSTREAM_USAGE_NOTIFICATION = 7 | 通知。 |
169| AUDIOSTREAM_USAGE_ACCESSIBILITY = 8 | 无障碍。 |
170| AUDIOSTREAM_USAGE_MOVIE = 10 | 电影或视频。 |
171| AUDIOSTREAM_USAGE_GAME = 11 | 游戏。 |
172| AUDIOSTREAM_USAGE_AUDIOBOOK = 12 | 有声读物(包括听书、相声、评书)、听新闻、播客等。 |
173| AUDIOSTREAM_USAGE_NAVIGATION = 13 | 导航。 |
174| AUDIOSTREAM_USAGE_VIDEO_COMMUNICATION = 17 | VoIP视频通话。<br>**起始版本:** 12 |
175
176### OH_AudioStream_LatencyMode
177
178```
179enum OH_AudioStream_LatencyMode
180```
181
182**描述**
183
184定义音频时延模式。
185
186**起始版本:** 10
187
188| 枚举项 | 描述 |
189| -- | -- |
190| AUDIOSTREAM_LATENCY_MODE_NORMAL = 0 | 该模式代表一个普通时延的音频流。 |
191| AUDIOSTREAM_LATENCY_MODE_FAST = 1 | 该模式代表一个低时延的音频流。 |
192
193### OH_AudioStream_DirectPlaybackMode
194
195```
196enum OH_AudioStream_DirectPlaybackMode
197```
198
199**描述**
200
201定义音频流direct通路播放模式。
202
203**起始版本:** 19
204
205| 枚举项 | 描述 |
206| -- | -- |
207| AUDIOSTREAM_DIRECT_PLAYBACK_NOT_SUPPORTED = 0 | 该模式代表不支持direct通路播放。 |
208| AUDIOSTREAM_DIRECT_PLAYBACK_BITSTREAM_SUPPORTED = 1 | 该模式代表支持不解码的direct通路播放。 |
209| AUDIOSTREAM_DIRECT_PLAYBACK_PCM_SUPPORTED = 2 | 该模式代表支持pcm编码的direct通路播放。 |
210
211### OH_AudioStream_VolumeMode
212
213```
214enum OH_AudioStream_VolumeMode
215```
216
217**描述**
218
219定义音频流音量模式。
220
221**起始版本:** 19
222
223| 枚举项 | 描述 |
224| -- | -- |
225| AUDIOSTREAM_VOLUMEMODE_SYSTEM_GLOBAL = 0 | 系统级音量(默认模式)。 |
226| AUDIOSTREAM_VOLUMEMODE_APP_INDIVIDUAL = 1 | 应用级音量。<br> 设置为该模式后可以通过提供的接口设置、查询应用音量。 |
227
228### OH_AudioStream_State
229
230```
231enum OH_AudioStream_State
232```
233
234**描述**
235
236定义音频流的状态。
237
238**起始版本:** 10
239
240| 枚举项 | 描述 |
241| -- | -- |
242| AUDIOSTREAM_STATE_INVALID = -1 | 不合法的状态。 |
243| AUDIOSTREAM_STATE_NEW = 0 | 新创建时的状态。 |
244| AUDIOSTREAM_STATE_PREPARED = 1 | 准备状态。 |
245| AUDIOSTREAM_STATE_RUNNING = 2 | 工作状态。 |
246| AUDIOSTREAM_STATE_STOPPED = 3 | 停止状态。 |
247| AUDIOSTREAM_STATE_RELEASED = 4 | 释放状态。 |
248| AUDIOSTREAM_STATE_PAUSED = 5 | 暂停状态。 |
249
250### OH_AudioStream_SourceType
251
252```
253enum OH_AudioStream_SourceType
254```
255
256**描述**
257
258定义音频流使用场景。<br> 通常用来描述音频输入流的使用场景。
259
260**起始版本:** 10
261
262| 枚举项 | 描述 |
263| -- | -- |
264| AUDIOSTREAM_SOURCE_TYPE_INVALID = -1 | 不合法状态。 |
265| AUDIOSTREAM_SOURCE_TYPE_MIC = 0 | 录音。 |
266| AUDIOSTREAM_SOURCE_TYPE_VOICE_RECOGNITION = 1 | 语音识别。 |
267| AUDIOSTREAM_SOURCE_TYPE_PLAYBACK_CAPTURE = 2 | 播放录音。 |
268| AUDIOSTREAM_SOURCE_TYPE_VOICE_COMMUNICATION = 7 | 通话。 |
269| AUDIOSTREAM_SOURCE_TYPE_VOICE_MESSAGE = 10 | 语音消息。<br>**起始版本:** 12 |
270| AUDIOSTREAM_SOURCE_TYPE_CAMCORDER = 13 | 录像。<br>**起始版本:** 13 |
271| AUDIOSTREAM_SOURCE_TYPE_UNPROCESSED = 14 | 麦克风纯净录音(系统不做任何算法处理)。<br>**起始版本:** 14 |
272| AUDIOSTREAM_SOURCE_TYPE_LIVE = 17 | 直播。<br>**起始版本:** 20 |
273
274### OH_AudioStream_Event
275
276```
277enum OH_AudioStream_Event
278```
279
280**描述**
281
282定义音频事件。
283
284**起始版本:** 10
285
286**废弃版本:** 20
287
288| 枚举项 | 描述 |
289| -- | -- |
290| AUDIOSTREAM_EVENT_ROUTING_CHANGED = 0 | 音频的路由已更改。<br>**起始版本:** 10<br>**废弃版本:** 20<br>**替代接口:** [OH_AudioRenderer_OutputDeviceChangeCallback](#oh_audiorenderer_outputdevicechangecallback) |
291
292### OH_AudioInterrupt_ForceType
293
294```
295enum OH_AudioInterrupt_ForceType
296```
297
298**描述**
299
300定义音频中断类型。<br> 当用户监听到音频中断时,将获取此信息。<br> 此类型表示本次音频打断的操作是否已由系统强制执行,具体操作信息(如音频暂停、停止等)可通过[OH_AudioInterrupt_Hint](#oh_audiointerrupt_hint)获取。
301
302**起始版本:** 10
303
304| 枚举项 | 描述 |
305| -- | -- |
306| AUDIOSTREAM_INTERRUPT_FORCE = 0 | 强制打断类型,即具体操作已由系统强制执行。 |
307| AUDIOSTREAM_INTERRUPT_SHARE = 1 | 共享打断类型,即系统不执行具体操作,通过[OH_AudioInterrupt_Hint](#oh_audiointerrupt_hint)提示并建议应用操作,应用可自行决策下一步处理方式。 |
308
309### OH_AudioInterrupt_Hint
310
311```
312enum OH_AudioInterrupt_Hint
313```
314
315**描述**
316
317定义音频中断提示类型。<br> 当用户监听到音频中断时,将获取此信息。<br> 此类型表示根据焦点策略,当前需要对音频流的具体操作(如暂停、调整音量等)。<br> 可以结合[OH_AudioInterrupt_ForceType](#oh_audiointerrupt_forcetype)信息,判断该操作是否已由系统强制执行。
318
319**起始版本:** 10
320
321| 枚举项 | 描述 |
322| -- | -- |
323| AUDIOSTREAM_INTERRUPT_HINT_NONE = 0 | 不提示。 |
324| AUDIOSTREAM_INTERRUPT_HINT_RESUME = 1 | 提示音频恢复,应用可主动触发开始渲染或开始采集的相关操作。<br> 此操作无法由系统强制执行,其对应的[OH_AudioInterrupt_ForceType](#oh_audiointerrupt_forcetype)一定为AUDIOSTREAM_INTERRUPT_SHARE类型。 |
325| AUDIOSTREAM_INTERRUPT_HINT_PAUSE = 2 | 提示音频暂停,暂时失去音频焦点。<br> 后续待焦点可用时,会出现AUDIOSTREAM_INTERRUPT_HINT_RESUME事件。 |
326| AUDIOSTREAM_INTERRUPT_HINT_STOP = 3 | 提示音频停止,彻底失去音频焦点。 |
327| AUDIOSTREAM_INTERRUPT_HINT_DUCK = 4 | 提示音频躲避开始,音频降低音量播放,而不会停止。 |
328| AUDIOSTREAM_INTERRUPT_HINT_UNDUCK = 5 | 提示音量躲避结束,音频恢复正常音量。 |
329| AUDIOSTREAM_INTERRUPT_HINT_MUTE = 6 | 提示音频静音。<br>**起始版本:** 20 |
330| AUDIOSTREAM_INTERRUPT_HINT_UNMUTE = 7 | 提示音频解除静音。<br>**起始版本:** 20 |
331
332### OH_AudioInterrupt_Mode
333
334```
335enum OH_AudioInterrupt_Mode
336```
337
338**描述**
339
340定义音频中断模式。
341
342**起始版本:** 12
343
344| 枚举项 | 描述 |
345| -- | -- |
346| AUDIOSTREAM_INTERRUPT_MODE_SHARE = 0 | 共享模式。 |
347| AUDIOSTREAM_INTERRUPT_MODE_INDEPENDENT = 1 | 独立模式。 |
348
349### OH_AudioStream_AudioEffectMode
350
351```
352enum OH_AudioStream_AudioEffectMode
353```
354
355**描述**
356
357定义音效模式。
358
359**起始版本:** 12
360
361| 枚举项 | 描述 |
362| -- | -- |
363| EFFECT_NONE = 0 | 无音效模式。 |
364| EFFECT_DEFAULT = 1 | 默认音效模式。 |
365
366### OH_AudioStream_FastStatus
367
368```
369enum OH_AudioStream_FastStatus
370```
371
372**描述**
373
374定义低时延状态。
375
376**起始版本:** 20
377
378| 枚举项 | 描述 |
379| -- | -- |
380| AUDIOSTREAM_FASTSTATUS_NORMAL = 0 | 普通音频流状态。 |
381| AUDIOSTREAM_FASTSTATUS_FAST = 1 | 低时延音频流状态。 |
382
383### OH_AudioStream_DeviceChangeReason
384
385```
386enum OH_AudioStream_DeviceChangeReason
387```
388
389**描述**
390
391流设备变更原因。
392
393**起始版本:** 11
394
395| 枚举项 | 描述 |
396| -- | -- |
397| REASON_UNKNOWN = 0 | 未知原因。 |
398| REASON_NEW_DEVICE_AVAILABLE = 1 | 新设备可用。 |
399| REASON_OLD_DEVICE_UNAVAILABLE = 2 | 旧设备不可用。当报告此原因时,应用程序应考虑暂停音频播放。 |
400| REASON_OVERRODE = 3 | 用户或系统强制选择切换。 |
401| REASON_SESSION_ACTIVATED = 4 | 音频会话激活触发的设备切换。<br>**起始版本:** 20 |
402| REASON_STREAM_PRIORITY_CHANGED = 5 | 更高优先级的音频流出现导致的系统设备切换。<br>**起始版本:** 20 |
403
404### OH_AudioStream_PrivacyType
405
406```
407enum OH_AudioStream_PrivacyType
408```
409
410**描述**
411
412用于标识对应播放音频流是否支持被其他应用录制。
413
414**起始版本:** 12
415
416| 枚举项 | 描述 |
417| -- | -- |
418| AUDIO_STREAM_PRIVACY_TYPE_PUBLIC = 0 | 表示音频流可以被其他应用录制。 |
419| AUDIO_STREAM_PRIVACY_TYPE_PRIVATE = 1 | 表示音频流不可以被其他应用录制。 |
420
421### OH_AudioData_Callback_Result
422
423```
424enum OH_AudioData_Callback_Result
425```
426
427**描述**
428
429定义音频数据回调结果。
430
431**起始版本:** 12
432
433| 枚举项 | 描述 |
434| -- | -- |
435| AUDIO_DATA_CALLBACK_RESULT_INVALID = -1 | 表示音频数据回调结果无效,且音频数据不播放。 |
436| AUDIO_DATA_CALLBACK_RESULT_VALID = 0 | 表示音频数据回调结果有效,将播放音频数据。 |
437
438
439## 函数说明
440
441### OH_AudioRenderer_OutputDeviceChangeCallback()
442
443```
444typedef void (*OH_AudioRenderer_OutputDeviceChangeCallback)(OH_AudioRenderer* renderer, void* userData, OH_AudioStream_DeviceChangeReason reason)
445```
446
447**描述**
448
449输出音频流设备变更的回调函数。
450
451**起始版本:** 11
452
453
454**参数:**
455
456| 参数项 | 描述 |
457| -- | -- |
458| [OH_AudioRenderer](capi-ohaudio-oh-audiorendererstruct.md)* renderer | 指向[OH_AudioStreamBuilder_GenerateRenderer](capi-native-audiostreambuilder-h.md#oh_audiostreambuilder_generaterenderer)创建的音频流实例。 |
459|  void* userData | 指向通过回调函数传递的应用数据指针。 |
460| [OH_AudioStream_DeviceChangeReason](#oh_audiostream_devicechangereason) reason | 流设备变更原因。 |
461
462### OH_AudioRenderer_OnMarkReachedCallback()
463
464```
465typedef void (*OH_AudioRenderer_OnMarkReachedCallback)(OH_AudioRenderer* renderer, uint32_t samplePos, void* userData)
466```
467
468**描述**
469
470到达标记位置时回调。
471
472**起始版本:** 12
473
474
475**参数:**
476
477| 参数项 | 描述 |
478| -- | -- |
479| [OH_AudioRenderer](capi-ohaudio-oh-audiorendererstruct.md)* renderer | 指向[OH_AudioStreamBuilder_GenerateRenderer](capi-native-audiostreambuilder-h.md#oh_audiostreambuilder_generaterenderer)创建的音频流实例。 |
480|  uint32_t samplePos | 设置目标标记位置。 |
481|  void* userData | 指向通过回调函数传递的应用数据指针。 |
482
483### OH_AudioRenderer_WriteDataWithMetadataCallback()
484
485```
486typedef int32_t (*OH_AudioRenderer_WriteDataWithMetadataCallback)(OH_AudioRenderer* renderer, void* userData, void* audioData, int32_t audioDataSize, void* metadata, int32_t metadataSize)
487```
488
489**描述**
490
491该函数指针将指向用于同时写入音频数据和元数据的回调函数。
492
493**起始版本:** 12
494
495
496**参数:**
497
498| 参数项 | 描述 |
499| -- | -- |
500| [OH_AudioRenderer](capi-ohaudio-oh-audiorendererstruct.md)* renderer | 指向[OH_AudioStreamBuilder_GenerateRenderer](capi-native-audiostreambuilder-h.md#oh_audiostreambuilder_generaterenderer)创建的音频流实例。 |
501|  void* userData | 指向通过回调函数传递的应用数据指针。 |
502|  void* audioData | 指向用户写入的音频数据的指针。 |
503|  int32_t audioDataSize | 用户写入的音频数据的数据长度,以字节为单位。 |
504|  void* metadata | 指向用户写入的元数据的指针。 |
505|  int32_t metadataSize | 用户写入的元数据的数据长度,以字节为单位。 |
506
507**返回:**
508
509| 类型 | 说明 |
510| -- | -- |
511| int32_t | 用户返回的回调函数的错误码。 |
512
513### OH_AudioRenderer_OnWriteDataCallback()
514
515```
516typedef OH_AudioData_Callback_Result (*OH_AudioRenderer_OnWriteDataCallback)(OH_AudioRenderer* renderer, void* userData, void* audioData, int32_t audioDataSize)
517```
518
519**描述**
520
521该函数指针将指向用于写入音频数据的回调函数。<br> 回调函数仅用来写入音频数据,请勿在回调函数中调用AudioRenderer相关接口。<br> 该函数的返回结果表示填充到缓冲区的数据是否有效。如果结果无效,用户填写的数据将不被播放。回调函数结束后,音频服务会把audioData指针数据放入队列里等待播放,因此请勿在回调外再次更改audioData指向的数据, 且务必保证往audioData填满audioDataSize长度的待播放数据, 否则会导致音频服务播放杂音。<br> 参数audioDataSize可以通过[OH_AudioStreamBuilder_SetFrameSizeInCallback](capi-native-audiostreambuilder-h.md#oh_audiostreambuilder_setframesizeincallback)设置。
522
523**起始版本:** 12
524
525
526**参数:**
527
528| 参数项 | 描述 |
529| -- | -- |
530| [OH_AudioRenderer](capi-ohaudio-oh-audiorendererstruct.md)* renderer | 指向[OH_AudioStreamBuilder_GenerateRenderer](capi-native-audiostreambuilder-h.md#oh_audiostreambuilder_generaterenderer)创建的音频流实例。 |
531|  void* userData | 指向通过回调函数传递的应用数据指针。 |
532|  void* audioData | 指向用户写入的音频数据的指针。 |
533|  int32_t audioDataSize | 用户写入的音频数据的数据长度,以字节为单位。 |
534
535**返回:**
536
537| 类型 | 说明 |
538| -- | -- |
539| [OH_AudioData_Callback_Result](#oh_audiodata_callback_result) | AUDIO_DATA_CALLBACK_RESULT_INVALID:音频数据回调结果无效,且音频数据不播放。<br>         AUDIO_DATA_CALLBACK_RESULT_VALID:音频数据回调结果有效,将播放音频数据。 |
540
541### OH_AudioRenderer_OnWriteDataCallbackAdvanced()
542
543```
544typedef int32_t (*OH_AudioRenderer_OnWriteDataCallbackAdvanced)(OH_AudioRenderer* renderer, void* userData, void* audioData, int32_t audioDataSize)
545```
546
547**描述**
548
549该函数指针将指向用于写入音频数据的回调函数。不同于OH_AudioRenderer_OnWriteDataCallback,此函数允许应用填充[0, audioDataSize]长度的数据。<br> 其中audioDataSize为回调buffer的长度。调用方通过返回值告知系统写入的数据长度。<br> 如果返回0,回调线程将会sleep一段时间。<br> 否则,系统可能会立刻进行下一次回调。
550
551**起始版本:** 20
552
553
554**参数:**
555
556| 参数项 | 描述 |
557| -- | -- |
558| [OH_AudioRenderer](capi-ohaudio-oh-audiorendererstruct.md)* renderer | 指向发生回调的实例。 |
559|  void* userData | 指向通过回调函数传递的应用数据指针。 |
560|  void* audioData | 指向让应用填充音频数据的指针。 |
561|  int32_t audioDataSize | 应用应写入音频数据的数据长度,以字节为单位。 |
562
563**返回:**
564
565| 类型 | 说明 |
566| -- | -- |
567| int32_t | 应用实际填充有效音频数据的长度。返回值必须在[0, audioDataSize]范围内。<br>如果返回值小于0,系统将调整为0。并且,如果返回值大于audioDataSize,系统将其调整到audioDataSize。<br>注意返回值必须是单个采样点大小的整数倍。<br>比如,双声道s16格式的音频数据,必须是4(216/8)的整数倍。<br>否则,可能造成播放杂音。 |
568
569
570