Audio
摘要
类型定义 |
|
---|---|
AAudioStream
|
typedefstruct AAudioStreamStruct
|
AAudioStreamBuilder
|
typedefstruct AAudioStreamBuilderStruct
|
AAudioStream_dataCallback)(AAudioStream *_Nonnull stream, void *_Nullable userData, void *_Nonnull audioData, int32_t numFrames)
|
typedefaaudio_data_callback_result_t(*
传递给 AAudioStreamBuilder_setDataCallback() 的数据函数原型。 |
AAudioStream_errorCallback)(AAudioStream *_Nonnull stream, void *_Nullable userData, aaudio_result_t error)
|
typedefvoid(*
传递给 AAudioStreamBuilder_setErrorCallback() 的回调函数原型。 |
aaudio_allowed_capture_policy_t
|
typedefint32_t
|
aaudio_channel_mask_t
|
typedefuint32_t
|
aaudio_content_type_t
|
typedefint32_t
|
aaudio_data_callback_result_t
|
typedefint32_t
|
aaudio_direction_t
|
typedefint32_t
|
aaudio_format_t
|
typedefint32_t
|
aaudio_input_preset_t
|
typedefint32_t
|
aaudio_performance_mode_t
|
typedefint32_t
|
aaudio_result_t
|
typedefint32_t
|
aaudio_session_id_t
|
typedefint32_t
|
aaudio_sharing_mode_t
|
typedefint32_t
|
aaudio_spatialization_behavior_t
|
typedefint32_t
|
aaudio_stream_state_t
|
typedefint32_t
|
aaudio_usage_t
|
typedefint32_t
|
函数 |
|
---|---|
AAudioStreamBuilder_delete(AAudioStreamBuilder *_Nonnull builder)
|
AAUDIO_API aaudio_result_t
删除与 StreamBuilder 关联的资源。
|
AAudioStreamBuilder_openStream(AAudioStreamBuilder *_Nonnull builder, AAudioStream *_Nullable *_Nonnull stream)
|
AAUDIO_API aaudio_result_t
根据 StreamBuilder 中的选项打开一个流。
|
AAudioStreamBuilder_setAllowedCapturePolicy(AAudioStreamBuilder *_Nonnull builder, aaudio_allowed_capture_policy_t capturePolicy)
|
AAUDIO_API void
指定此流音频是否可由其他应用或系统捕获。
|
AAudioStreamBuilder_setAttributionTag(AAudioStreamBuilder *_Nonnull builder, const char *_Nonnull attributionTag)
|
AAUDIO_API void
声明创建流的上下文的归因标签。
|
AAudioStreamBuilder_setBufferCapacityInFrames(AAudioStreamBuilder *_Nonnull builder, int32_t numFrames)
|
AAUDIO_API void
设置请求的缓冲区容量(以帧为单位)。
|
AAudioStreamBuilder_setChannelCount(AAudioStreamBuilder *_Nonnull builder, int32_t channelCount)
|
AAUDIO_API void
请求流的通道数。
|
AAudioStreamBuilder_setChannelMask(AAudioStreamBuilder *_Nonnull builder, aaudio_channel_mask_t channelMask)
|
AAUDIO_API void
设置流的音频通道掩码。
|
AAudioStreamBuilder_setContentType(AAudioStreamBuilder *_Nonnull builder, aaudio_content_type_t contentType)
|
AAUDIO_API void
设置输出流将承载的音频数据类型。
|
AAudioStreamBuilder_setDataCallback(AAudioStreamBuilder *_Nonnull builder, AAudioStream_dataCallback _Nullable callback, void *_Nullable userData)
|
AAUDIO_API void
请求 AAudio 在流运行时调用此函数。
|
AAudioStreamBuilder_setDeviceId(AAudioStreamBuilder *_Nonnull builder, int32_t deviceId)
|
AAUDIO_API void
请求由 ID 标识的音频设备。
|
AAudioStreamBuilder_setDirection(AAudioStreamBuilder *_Nonnull builder, aaudio_direction_t direction)
|
AAUDIO_API void
请求流的方向。
|
AAudioStreamBuilder_setErrorCallback(AAudioStreamBuilder *_Nonnull builder, AAudioStream_errorCallback _Nullable callback, void *_Nullable userData)
|
AAUDIO_API void
请求 AAudio 在发生任何错误或流断开连接时调用此函数。
|
AAudioStreamBuilder_setFormat(AAudioStreamBuilder *_Nonnull builder, aaudio_format_t format)
|
AAUDIO_API void
请求采样数据格式,例如 AAUDIO_FORMAT_PCM_I16。
|
AAudioStreamBuilder_setFramesPerDataCallback(AAudioStreamBuilder *_Nonnull builder, int32_t numFrames)
|
AAUDIO_API void
设置请求的数据回调缓冲区大小(以帧为单位)。
|
AAudioStreamBuilder_setInputPreset(AAudioStreamBuilder *_Nonnull builder, aaudio_input_preset_t inputPreset)
|
AAUDIO_API void
设置流的输入(捕获)预设。
|
AAudioStreamBuilder_setIsContentSpatialized(AAudioStreamBuilder *_Nonnull builder, bool isSpatialized)
|
AAUDIO_API void
指定此输出流的音频数据是否已为空间化进行处理。
|
AAudioStreamBuilder_setPackageName(AAudioStreamBuilder *_Nonnull builder, const char *_Nonnull packageName)
|
AAUDIO_API void
声明创建流的包名。
|
AAudioStreamBuilder_setPerformanceMode(AAudioStreamBuilder *_Nonnull builder, aaudio_performance_mode_t mode)
|
AAUDIO_API void
设置请求的性能模式。
|
AAudioStreamBuilder_setPrivacySensitive(AAudioStreamBuilder *_Nonnull builder, bool privacySensitive)
|
AAUDIO_API void
指示此输入流是否必须标记为隐私敏感。
|
AAudioStreamBuilder_setSampleRate(AAudioStreamBuilder *_Nonnull builder, int32_t sampleRate)
|
AAUDIO_API void
请求采样率(赫兹)。
|
AAudioStreamBuilder_setSamplesPerFrame(AAudioStreamBuilder *_Nonnull builder, int32_t samplesPerFrame)
|
AAUDIO_API void
|
AAudioStreamBuilder_setSessionId(AAudioStreamBuilder *_Nonnull builder, aaudio_session_id_t sessionId)
|
AAUDIO_API void
设置请求的会话 ID。
|
AAudioStreamBuilder_setSharingMode(AAudioStreamBuilder *_Nonnull builder, aaudio_sharing_mode_t sharingMode)
|
AAUDIO_API void
请求设备共享模式。
|
AAudioStreamBuilder_setSpatializationBehavior(AAudioStreamBuilder *_Nonnull builder, aaudio_spatialization_behavior_t spatializationBehavior)
|
AAUDIO_API void
设置影响是否使用空间化的行为。
|
AAudioStreamBuilder_setUsage(AAudioStreamBuilder *_Nonnull builder, aaudio_usage_t usage)
|
AAUDIO_API void
设置输出流的预期用例。
|
AAudioStream_close(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_result_t
删除与 AAudioStreamBuilder_openStream() 创建的流相关的内部数据结构。
|
AAudioStream_getAllowedCapturePolicy(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_allowed_capture_policy_t
返回确定音频是否可由其他应用或系统捕获的策略。
|
AAudioStream_getBufferCapacityInFrames(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
查询最大缓冲区容量(以帧为单位)。
|
AAudioStream_getBufferSizeInFrames(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
查询可以在不阻塞的情况下填充的最大帧数。
|
AAudioStream_getChannelCount(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
一个流包含一个或多个数据通道。
|
AAudioStream_getChannelMask(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_channel_mask_t
返回流的通道掩码。
|
AAudioStream_getContentType(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_content_type_t
返回流的内容类型。
|
AAudioStream_getDeviceId(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
从 API 级别 26 开始可用。
|
AAudioStream_getDirection(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_direction_t
从 API 级别 26 开始可用。
|
AAudioStream_getFormat(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_format_t
从 API 级别 26 开始可用。
|
AAudioStream_getFramesPerBurst(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
查询应用为获得最佳性能应一次读取或写入的帧数。
|
AAudioStream_getFramesPerDataCallback(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
查询将在 numFrames 参数中传递给 dataProc 回调的缓冲区大小。
|
AAudioStream_getFramesRead(AAudioStream *_Nonnull stream)
|
AAUDIO_API int64_t
返回自流创建以来已读取的帧数。
|
AAudioStream_getFramesWritten(AAudioStream *_Nonnull stream)
|
AAUDIO_API int64_t
返回自流创建以来已写入的帧数。
|
AAudioStream_getHardwareChannelCount(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
音频框架中可能存在通道转换。
|
AAudioStream_getHardwareFormat(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_format_t
音频框架中可能存在数据格式转换。
|
AAudioStream_getHardwareSampleRate(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
音频框架中可能存在采样率转换。
|
AAudioStream_getInputPreset(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_input_preset_t
返回流的输入预设。
|
AAudioStream_getPerformanceMode(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_performance_mode_t
获取流使用的性能模式。
|
AAudioStream_getSampleRate(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
从 API 级别 26 开始可用。
|
AAudioStream_getSamplesPerFrame(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
|
AAudioStream_getSessionId(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_session_id_t
返回与此流关联的会话 ID。
|
AAudioStream_getSharingMode(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_sharing_mode_t
提供实际共享模式。
|
AAudioStream_getSpatializationBehavior(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_spatialization_behavior_t
返回流的空间化行为。
|
AAudioStream_getState(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_stream_state_t
查询客户端的当前状态,例如。
|
AAudioStream_getTimestamp(AAudioStream *_Nonnull stream, clockid_t clockid, int64_t *_Nonnull framePosition, int64_t *_Nonnull timeNanoseconds)
|
AAUDIO_API aaudio_result_t
返回特定帧在扬声器或头戴式设备上播放或在麦克风上录制的时间。
|
AAudioStream_getUsage(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_usage_t
返回流的用例。
|
AAudioStream_getXRunCount(AAudioStream *_Nonnull stream)
|
AAUDIO_API int32_t
XRun 是 Underrun 或 Overrun。
|
AAudioStream_isContentSpatialized(AAudioStream *_Nonnull stream)
|
AAUDIO_API bool
返回流的内容是否已空间化。
|
AAudioStream_isPrivacySensitive(AAudioStream *_Nonnull stream)
|
AAUDIO_API bool
返回此输入流是否标记为隐私敏感。
|
AAudioStream_read(AAudioStream *_Nonnull stream, void *_Nonnull buffer, int32_t numFrames, int64_t timeoutNanoseconds)
|
AAUDIO_API aaudio_result_t
从流中读取数据。
|
AAudioStream_release(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_result_t
释放与 AAudioStreamBuilder_openStream() 创建的流关联的音频资源。
|
AAudioStream_requestFlush(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_result_t
异步请求流刷新。
|
AAudioStream_requestPause(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_result_t
异步请求流暂停。
|
AAudioStream_requestStart(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_result_t
异步请求开始播放流。
|
AAudioStream_requestStop(AAudioStream *_Nonnull stream)
|
AAUDIO_API aaudio_result_t
异步请求流停止。
|
AAudioStream_setBufferSizeInFrames(AAudioStream *_Nonnull stream, int32_t numFrames)
|
AAUDIO_API aaudio_result_t
这可用于通过更改发生阻塞的阈值来调整缓冲区的延迟。
|
AAudioStream_waitForStateChange(AAudioStream *_Nonnull stream, aaudio_stream_state_t inputState, aaudio_stream_state_t *_Nullable nextState, int64_t timeoutNanoseconds)
|
AAUDIO_API aaudio_result_t
等待直到当前状态不再与输入状态匹配。
|
AAudioStream_write(AAudioStream *_Nonnull stream, const void *_Nonnull buffer, int32_t numFrames, int64_t timeoutNanoseconds)
|
AAUDIO_API aaudio_result_t
将数据写入流。
|
AAudio_convertResultToText(aaudio_result_t returnCode)
|
AAUDIO_API const char *_Nonnull
文本是与 returnCode 对应的 ASCII 符号,或者是一条表示 returnCode 未识别的英文消息。
|
AAudio_convertStreamStateToText(aaudio_stream_state_t state)
|
AAUDIO_API const char *_Nonnull
文本是与流状态对应的 ASCII 符号,或者是一条表示该状态未识别的英文消息。
|
AAudio_createStreamBuilder(AAudioStreamBuilder *_Nullable *_Nonnull builder)
|
AAUDIO_API aaudio_result_t
创建一个可用于打开 Stream 的 StreamBuilder。
|
枚举
Anonymous Enum 0
在aaudio/AAudio.h
中声明
Anonymous Enum 0
属性 | |
---|---|
AAUDIO_DIRECTION_INPUT |
音频数据将进入设备,例如来自麦克风。 |
AAUDIO_DIRECTION_OUTPUT |
音频数据将从设备输出,例如通过扬声器。 |
Anonymous Enum 1
在aaudio/AAudio.h
中声明
Anonymous Enum 1
属性 | |
---|---|
AAUDIO_FORMAT_IEC61937 |
此格式用于包裹在 IEC61937 中的压缩音频,用于 HDMI 或 S/PDIF 直通。 与 PCM 播放不同,Android 框架无法为 IEC61937 进行格式转换。在这种情况下,当请求 IEC61937 时,必须指定采样率和通道数或通道掩码。否则,打开流时可能会失败。应用可以通过调用 AudioManager::getDevices(int) 获取播放的正确配置。 从 API 级别 34 开始可用。 |
AAUDIO_FORMAT_INVALID |
|
AAUDIO_FORMAT_PCM_FLOAT |
此格式使用 float 数据类型。 数据的标称范围是 [-1.0f, 1.0f)。超出此范围的值可能会被剪裁。 另请参阅 write(float[], int, int, int) 中的 float Data。 |
AAUDIO_FORMAT_PCM_I16 |
此格式使用 int16_t 数据类型。 数据的最大范围是 -32768 (0x8000) 到 32767 (0x7FFF)。 |
AAUDIO_FORMAT_PCM_I24_PACKED |
此格式使用打包到 3 个字节中的 24 位样本。 字节采用小端序排列,因此最低有效字节在字节数组中排在前面。 数据的最大范围是 -8388608 (0x800000) 到 8388607 (0x7FFFFF)。 请注意,较低精度位可能会被设备忽略。 从 API 级别 31 开始可用。 |
AAUDIO_FORMAT_PCM_I32 |
此格式使用存储在 int32_t 数据类型中的 32 位样本。 数据的最大范围是 -2147483648 (0x80000000) 到 2147483647 (0x7FFFFFFF)。 请注意,较低精度位可能会被设备忽略。 从 API 级别 31 开始可用。 |
AAUDIO_FORMAT_UNSPECIFIED |
Anonymous Enum 10
在aaudio/AAudio.h
中声明
Anonymous Enum 10
指定音频是否可由其他应用或系统捕获。
请注意,这些值与 Android Java API 中 AudioAttributes 中的等效值匹配。
添加于 API 级别 29。
属性 | |
---|---|
AAUDIO_ALLOW_CAPTURE_BY_ALL |
表示音频可由任何应用捕获。 出于隐私考虑,以下用途不能被录制:AAUDIO_VOICE_COMMUNICATION*、AAUDIO_USAGE_NOTIFICATION*、AAUDIO_USAGE_ASSISTANCE* 和 AAUDIO_USAGE_ASSISTANT。 在 Q 上,这意味着只能捕获 AAUDIO_USAGE_MEDIA 和 AAUDIO_USAGE_GAME。 请参阅 ALLOW_CAPTURE_BY_ALL。 |
AAUDIO_ALLOW_CAPTURE_BY_NONE |
表示音频不能被任何应用录制,即使是系统应用也不行。 建议使用 AAUDIO_ALLOW_CAPTURE_BY_SYSTEM 而非此值,因为系统应用为用户提供了重要且有用的功能(例如无障碍功能)。请参阅 ALLOW_CAPTURE_BY_NONE 了解系统应用如何处理捕获的音频。 |
AAUDIO_ALLOW_CAPTURE_BY_SYSTEM |
表示音频只能由系统应用捕获。 系统应用可以出于许多目的进行捕获,例如无障碍功能、用户指导等...但有严格限制。请参阅 ALLOW_CAPTURE_BY_SYSTEM 了解系统应用如何处理捕获的音频。 |
Anonymous Enum 11
在aaudio/AAudio.h
中声明
Anonymous Enum 11
这些可与 AAudioStreamBuilder_setSessionId() 一起使用。
添加于 API 级别 28。
属性 | |
---|---|
AAUDIO_SESSION_ID_ALLOCATE |
分配一个会话 ID,可用于使用 Java AudioEffects API 附加和控制效果。 请注意,使用此功能可能会导致更高的延迟。 请注意,这与 AudioManager.AUDIO_SESSION_ID_GENERATE 的值匹配。 添加于 API 级别 28。 |
AAUDIO_SESSION_ID_NONE |
不分配会话 ID。 此流不能使用效果。默认。 添加于 API 级别 28。 |
Anonymous Enum 12
在aaudio/AAudio.h
中声明
Anonymous Enum 12
定义音频通道掩码。
通道掩码用于描述音频帧中的样本及其排列方式。它们也用于端点(例如 USB 音频接口、连接到耳机的 DAC)以指定特定设备的允许配置。
通道掩码仅用于输入、仅用于输出或同时用于输入和输出。这些通道掩码与 AudioFormat.java 中定义的通道掩码不同。如果应用从 Java API 获取通道掩码并希望在 AAudio 中使用它,则应由应用执行转换。
添加于 API 级别 32。
Anonymous Enum 13
在aaudio/AAudio.h
中声明
Anonymous Enum 13
从数据回调函数返回这些值之一。
属性 | |
---|---|
AAUDIO_CALLBACK_RESULT_CONTINUE |
继续调用回调。 |
AAUDIO_CALLBACK_RESULT_STOP |
停止调用回调。 应用仍然需要调用 AAudioStream_requestPause() 或 AAudioStream_requestStop()。 |
Anonymous Enum 2
在aaudio/AAudio.h
中声明
Anonymous Enum 2
AAudio 函数返回这些结果代码以指示成功或失败。
请注意,错误返回代码将来可能会更改,因此应用通常不应依赖于特定的返回代码。
属性 | |
---|---|
AAUDIO_ERROR_BASE |
保留。 不应返回此项。 |
AAUDIO_ERROR_DISCONNECTED |
音频设备已断开连接。 例如,这可能会发生在耳机插入或拔出时。设备断开连接后,流无法使用。应用应停止并关闭流。如果在错误回调中收到此错误,则应使用另一个线程来停止和关闭流。 |
AAUDIO_ERROR_ILLEGAL_ARGUMENT |
向 AAudio 传递了无效参数。 |
AAUDIO_ERROR_INTERNAL |
发生内部错误。 |
AAUDIO_ERROR_INVALID_FORMAT |
请求的数据格式不受支持。 |
AAUDIO_ERROR_INVALID_HANDLE |
服务器拒绝了用于标识流的句柄。 |
AAUDIO_ERROR_INVALID_RATE |
请求的采样率不受支持。 |
AAUDIO_ERROR_INVALID_STATE |
请求的操作不适用于 AAudio 的当前状态。 |
AAUDIO_ERROR_NO_FREE_HANDLES |
保留。 不应返回此项。 |
AAUDIO_ERROR_NO_MEMORY |
无法分配内存。 |
AAUDIO_ERROR_NO_SERVICE |
音频服务不可用。 |
AAUDIO_ERROR_NULL |
向 AAudio 传递了 NULL 指针。 或内部检测到 NULL 指针。 |
AAUDIO_ERROR_OUT_OF_RANGE |
请求超出范围。 |
AAUDIO_ERROR_TIMEOUT |
操作时间超出预期。 |
AAUDIO_ERROR_UNAVAILABLE |
资源或信息不可用。 例如,这可能会发生在应用尝试打开太多流,或时间戳不可用时。 |
AAUDIO_ERROR_UNIMPLEMENTED |
此流未实现该函数。 |
AAUDIO_ERROR_WOULD_BLOCK |
队列已满。 此队列将被阻塞。 |
AAUDIO_OK |
调用成功。 |
Anonymous Enum 3
在aaudio/AAudio.h
中声明
Anonymous Enum 3
AAudio Stream 状态,有关详细信息,请参阅使用音频流
属性 | |
---|---|
AAUDIO_STREAM_STATE_CLOSED |
流已关闭。 |
AAUDIO_STREAM_STATE_CLOSING |
流正在关闭。 |
AAUDIO_STREAM_STATE_DISCONNECTED |
流与音频设备断开连接。 |
AAUDIO_STREAM_STATE_FLUSHED |
流已刷新,可以重新启动。 |
AAUDIO_STREAM_STATE_FLUSHING |
流正在刷新。 |
AAUDIO_STREAM_STATE_OPEN |
流已打开,可以使用。 |
AAUDIO_STREAM_STATE_PAUSED |
流已暂停,可以重新启动或刷新。 |
AAUDIO_STREAM_STATE_PAUSING |
流正在暂停。 |
AAUDIO_STREAM_STATE_STARTED |
流已启动。 |
AAUDIO_STREAM_STATE_STARTING |
流刚刚启动。 |
AAUDIO_STREAM_STATE_STOPPED |
流已停止。 |
AAUDIO_STREAM_STATE_STOPPING |
流正在停止。 |
AAUDIO_STREAM_STATE_UNINITIALIZED |
流已创建但尚未初始化。 |
AAUDIO_STREAM_STATE_UNKNOWN |
流处于无法识别的状态。 |
Anonymous Enum 4
在aaudio/AAudio.h
中声明
Anonymous Enum 4
属性 | |
---|---|
AAUDIO_SHARING_MODE_EXCLUSIVE |
这将是唯一使用特定源或接收器的流。 此模式将提供尽可能低的延迟。不使用 EXCLUSIVE 流时,应立即将其关闭。 |
AAUDIO_SHARING_MODE_SHARED |
多个应用将由 AAudio Server 混合。 这将比 EXCLUSIVE 模式具有更高的延迟。 |
Anonymous Enum 5
在aaudio/AAudio.h
中声明
Anonymous Enum 5
属性 | |
---|---|
AAUDIO_PERFORMANCE_MODE_LOW_LATENCY |
降低延迟比延长电池续航时间更重要。 |
AAUDIO_PERFORMANCE_MODE_NONE |
没有特殊的性能需求。 默认。 |
AAUDIO_PERFORMANCE_MODE_POWER_SAVING |
延长电池续航时间比低延迟更重要。 输入流不支持此模式。对于输入,如果请求此模式,将使用 NONE 模式。 |
Anonymous Enum 6
在aaudio/AAudio.h
中声明
Anonymous Enum 6
USAGE 属性表达您播放声音的“目的”,即该声音用于什么。
某些平台或路由策略使用此信息做出更精细的音量或路由决策。
请注意,这些值与 Android Java API 中 AudioAttributes 中的等效值匹配。
添加于 API 级别 28。
属性 | |
---|---|
AAUDIO_SYSTEM_USAGE_ANNOUNCEMENT |
用于交通广播等。 需要特权 MODIFY_AUDIO_ROUTING 权限。 |
AAUDIO_SYSTEM_USAGE_EMERGENCY |
在紧急情况下播放声音时使用此项。 需要特权 MODIFY_AUDIO_ROUTING 权限。 |
AAUDIO_SYSTEM_USAGE_SAFETY |
用于安全声音和警报,例如倒车摄像头障碍物检测。 需要特权 MODIFY_AUDIO_ROUTING 权限。 |
AAUDIO_SYSTEM_USAGE_VEHICLE_STATUS |
用于车辆状态警报和信息,例如检查引擎指示灯。 需要特权 MODIFY_AUDIO_ROUTING 权限。 |
AAUDIO_USAGE_ALARM |
用于引起用户注意。 |
AAUDIO_USAGE_ASSISTANCE_ACCESSIBILITY |
用于屏幕阅读器等。 |
AAUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE |
用于驾驶或导航方向。 |
AAUDIO_USAGE_ASSISTANCE_SONIFICATION |
用于用户界面声音、蜂鸣声等。 |
AAUDIO_USAGE_ASSISTANT |
用于对用户查询的音频响应、音频指令或帮助性言语。 |
AAUDIO_USAGE_GAME |
用于游戏音频和音效。 |
AAUDIO_USAGE_MEDIA |
用于流媒体、音乐表演、视频、播客等。 |
AAUDIO_USAGE_NOTIFICATION |
用于在消息到达或发生其他后台事件时通知用户。 |
AAUDIO_USAGE_NOTIFICATION_EVENT |
例如,在电量低时用于引起用户注意。 |
AAUDIO_USAGE_NOTIFICATION_RINGTONE |
在手机响铃时使用此项。 |
AAUDIO_USAGE_VOICE_COMMUNICATION |
用于 IP 语音、电话等。 |
AAUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING |
用于与电话相关的声音,例如忙音、DTMF 等。 |
Anonymous Enum 7
在aaudio/AAudio.h
中声明
Anonymous Enum 7
CONTENT_TYPE 属性描述您正在播放的“内容”。
它表示内容的通用类别。此信息是可选的。但如果已知此信息(例如,电影流媒体服务为 AAUDIO_CONTENT_TYPE_MOVIE,有声读物应用为 AAUDIO_CONTENT_TYPE_SPEECH),音频框架可能会使用此信息来强制执行音频焦点。
请注意,这些值与 Android Java API 中 AudioAttributes 中的等效值匹配。
添加于 API 级别 28。
属性 | |
---|---|
AAUDIO_CONTENT_TYPE_MOVIE |
用于电影或视频原声。 |
AAUDIO_CONTENT_TYPE_MUSIC |
用于预录或现场音乐。 |
AAUDIO_CONTENT_TYPE_SONIFICATION |
用于设计用于伴随用户操作的声音,例如用户按下按钮时发出的点击或蜂鸣声。 |
AAUDIO_CONTENT_TYPE_SPEECH |
用于语音、有声读物等。 |
Anonymous Enum 8
在aaudio/AAudio.h
中声明
Anonymous Enum 8
属性 | |
---|---|
AAUDIO_SPATIALIZATION_BEHAVIOR_AUTO |
常量,指示与这些属性关联的音频内容将遵循默认平台行为,决定哪些内容将进行空间化或不进行空间化。 |
AAUDIO_SPATIALIZATION_BEHAVIOR_NEVER |
常量,指示与这些属性关联的音频内容不应进行空间化。 |
Anonymous Enum 9
在aaudio/AAudio.h
中声明
Anonymous Enum 9
定义音频源。
音频源定义了音频信号的默认物理源和录音配置。
请注意,这些值与 Android Java API 中 MediaRecorder.AudioSource 的等效值匹配。
添加于 API 级别 28。
属性 | |
---|---|
AAUDIO_INPUT_PRESET_CAMCORDER |
录制视频时使用此预设。 |
AAUDIO_INPUT_PRESET_GENERIC |
当其他预设不适用时使用此预设。 |
AAUDIO_INPUT_PRESET_SYSTEM_ECHO_REFERENCE |
将此预设用于回声消除器,以捕获参考信号。 保留用于系统组件。需要 CAPTURE_AUDIO_OUTPUT 权限。从 API 级别 35 开始可用。 |
AAUDIO_INPUT_PRESET_SYSTEM_HOTWORD |
将此预设用于可抢占的低优先级软件热词检测。 保留用于系统组件。需要 CAPTURE_AUDIO_HOTWORD 权限。从 API 级别 35 开始可用。 |
AAUDIO_INPUT_PRESET_UNPROCESSED |
使用此预设获取无效果的输入。 请注意,此输入将没有自动增益控制,因此录制的音量可能非常低。 |
AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION |
进行电话或语音消息传递时使用此预设。 |
AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE |
将此预设用于捕获旨在实时处理并播放以供现场表演(例如卡拉 OK)的音频。 捕获路径将最大限度地减少延迟以及与播放路径的耦合。从 API 级别 29 开始可用。 |
AAUDIO_INPUT_PRESET_VOICE_RECOGNITION |
进行语音识别时使用此预设。 |
类型定义
AAudioStream
在aaudio/AAudio.h
中声明
struct AAudioStreamStruct AAudioStream
AAudioStreamBuilder
在aaudio/AAudio.h
中声明
struct AAudioStreamBuilderStruct AAudioStreamBuilder
AAudioStream_dataCallback
在aaudio/AAudio.h
中声明
aaudio_data_callback_result_t(* AAudioStream_dataCallback)(AAudioStream *_Nonnull stream, void *_Nullable userData, void *_Nonnull audioData, int32_t numFrames)
传递给 AAudioStreamBuilder_setDataCallback() 的数据函数原型。
对于输出流,此函数应渲染并写入流当前数据格式的 numFrames 数据到 audioData 缓冲区。
对于输入流,此函数应从 audioData 缓冲区读取和处理 numFrames 数据。不得直接修改 audioData 缓冲区中的数据。相反,在进行任何修改之前,应将其复制到另一个缓冲区。在许多情况下,写入输入流的 audioData 缓冲区将导致原生异常。
音频数据通过缓冲区传递。因此,请勿在该流进行回调时调用 AAudioStream_read() 或 AAudioStream_write()。
请注意,numFrames 可以变化,除非调用了 AAudioStreamBuilder_setFramesPerDataCallback()。
另请注意,此回调函数应视为“实时”函数。它不得执行任何可能导致无限期延迟的操作,因为这可能导致音频出现毛刺或爆音。
这些是该函数不应做的事情
- 分配内存,例如使用 malloc() 或 new
- 任何文件操作,例如打开、关闭、读取或写入
- 任何网络操作,例如流式传输
- 使用任何互斥锁或其他同步原语
- 睡眠
- 停止或关闭流
- AAudioStream_read()
- AAudioStream_write()
以下函数可以在数据回调中调用
- AAudioStream_get*()
- AAudio_convertResultToText()
如果您需要在回调函数内外移动数据,例如 MIDI 命令,我们建议使用非阻塞技术,例如原子 FIFO。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
AAUDIO_CALLBACK_RESULT_*
|
AAudioStream_errorCallback
在aaudio/AAudio.h
中声明
void(* AAudioStream_errorCallback)(AAudioStream *_Nonnull stream, void *_Nullable userData, aaudio_result_t error)
传递给 AAudioStreamBuilder_setErrorCallback() 的回调函数原型。
以下函数不得从错误回调中调用
- AAudioStream_requestStop()
- AAudioStream_requestPause()
- AAudioStream_close()
- AAudioStream_waitForStateChange()
- AAudioStream_read()
- AAudioStream_write()
以下函数可以在错误回调中调用
- AAudioStream_get*()
- AAudio_convertResultToText()
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
aaudio_allowed_capture_policy_t
在aaudio/AAudio.h
中声明
int32_t aaudio_allowed_capture_policy_t
aaudio_channel_mask_t
在aaudio/AAudio.h
中声明
uint32_t aaudio_channel_mask_t
aaudio_content_type_t
在aaudio/AAudio.h
中声明
int32_t aaudio_content_type_t
aaudio_data_callback_result_t
在aaudio/AAudio.h
中声明
int32_t aaudio_data_callback_result_t
aaudio_direction_t
在aaudio/AAudio.h
中声明
int32_t aaudio_direction_t
aaudio_format_t
在aaudio/AAudio.h
中声明
int32_t aaudio_format_t
aaudio_input_preset_t
在aaudio/AAudio.h
中声明
int32_t aaudio_input_preset_t
aaudio_performance_mode_t
在aaudio/AAudio.h
中声明
int32_t aaudio_performance_mode_t
aaudio_result_t
在aaudio/AAudio.h
中声明
int32_t aaudio_result_t
aaudio_session_id_t
在aaudio/AAudio.h
中声明
int32_t aaudio_session_id_t
aaudio_sharing_mode_t
在aaudio/AAudio.h
中声明
int32_t aaudio_sharing_mode_t
aaudio_spatialization_behavior_t
在aaudio/AAudio.h
中声明
int32_t aaudio_spatialization_behavior_t
aaudio_stream_state_t
在aaudio/AAudio.h
中声明
int32_t aaudio_stream_state_t
aaudio_usage_t
在aaudio/AAudio.h
中声明
int32_t aaudio_usage_t
函数
AAudioStreamBuilder_delete
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStreamBuilder_delete( AAudioStreamBuilder *_Nonnull builder )
删除与 StreamBuilder 关联的资源。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
AAUDIO_OK 或负值错误。
|
AAudioStreamBuilder_openStream
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStreamBuilder_openStream( AAudioStreamBuilder *_Nonnull builder, AAudioStream *_Nullable *_Nonnull stream )
根据 StreamBuilder 中的选项打开一个流。
AAudioStream_close() 必须在流使用完毕后调用,以回收内存并释放相关资源。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
AAUDIO_OK 或负值错误。
|
AAudioStreamBuilder_setAllowedCapturePolicy
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setAllowedCapturePolicy( AAudioStreamBuilder *_Nonnull builder, aaudio_allowed_capture_policy_t capturePolicy )
指定此流音频是否可由其他应用或系统捕获。
默认值为 AAUDIO_ALLOW_CAPTURE_BY_ALL。
请注意,应用也可以设置其全局策略,在这种情况下,始终应用限制性最强的策略。请参阅 setAllowedCapturePolicy(int)
自 API 级别 29 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setAttributionTag
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setAttributionTag( AAudioStreamBuilder *_Nonnull builder, const char *_Nonnull attributionTag )
声明创建流的上下文的归因标签。
这通常是
Context#getAttributionTag()
如果您不调用此函数,默认值为 null。
从 API 级别 31 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setBufferCapacityInFrames
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setBufferCapacityInFrames( AAudioStreamBuilder *_Nonnull builder, int32_t numFrames )
设置请求的缓冲区容量(以帧为单位)。
最终的 AAudioStream 容量可能不同,但可能至少有这么大。
如果您不调用此函数,默认值为 AAUDIO_UNSPECIFIED。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setChannelCount
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setChannelCount( AAudioStreamBuilder *_Nonnull builder, int32_t channelCount )
请求流的通道数。
如果您不调用此函数,默认值为 AAUDIO_UNSPECIFIED。然后在流打开时选择最佳值。打开具有未指定值的流后,应用必须查询实际值,该值可能因设备而异。
如果指定了确切值,则打开的流将使用该值。如果无法使用指定值打开流,则打开将失败。
由于此处提供的通道数可能与 AAudioStreamBuilder_setChannelMask 中使用的通道掩码的相应通道数不同,因此如果同时调用此函数和 AAudioStreamBuilder_setChannelMask,将以最后调用的函数为准。
请注意,如果通道数为两个,当设备仅支持一个通道时,可能会混音为单声道。如果通道数大于两个但设备支持的通道数小于请求的值,则高于设备通道的通道将被丢弃。如果应混合或空间化较高通道,请改用 AAudioStreamBuilder_setChannelMask。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setChannelMask
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setChannelMask( AAudioStreamBuilder *_Nonnull builder, aaudio_channel_mask_t channelMask )
设置流的音频通道掩码。
如果您不调用此函数,默认值为 AAUDIO_UNSPECIFIED。如果通道掩码和通道数均未设置,则在流打开时将选择立体声。打开具有未指定值的流后,应用必须查询实际值,该值可能因设备而异。
如果指定了确切值,则打开的流将使用该值。如果无法使用指定值打开流,则打开将失败。
由于此处提供的通道掩码的相应通道数可能与 AAudioStreamBuilder_setChannelCount 或 AAudioStreamBuilder_setSamplesPerFrame 中使用的通道数不同,因此如果同时调用此函数和 AAudioStreamBuilder_setChannelCount 或 AAudioStreamBuilder_setSamplesPerFrame,将以最后调用的函数为准。
自 API 级别 32 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setContentType
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setContentType( AAudioStreamBuilder *_Nonnull builder, aaudio_content_type_t contentType )
设置输出流将承载的音频数据类型。
AAudio 系统将使用此信息优化流的行为。例如,这可能会影响通知发生时流是否暂停。
如果您不调用此函数,默认值为 AAUDIO_CONTENT_TYPE_MUSIC。
如果您设置了 ContentType,则需要将音量键与结果流关联起来。否则音量键可能无法正常工作。这在 Java 中通过以下代码块完成。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
AudioAttributes attributes = new AudioAttributes.Builder().setUsage(usage)
.setContentType(contentType).build();
setVolumeControlStream(attributes.getVolumeControlStream());
}
自 API 级别 28 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setDataCallback
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setDataCallback( AAudioStreamBuilder *_Nonnull builder, AAudioStream_dataCallback _Nullable callback, void *_Nullable userData )
请求 AAudio 在流运行时调用此函数。
请注意,使用此回调时,音频数据将作为参数传入或传出函数。因此,您不能在具有活动数据回调的同一流上调用 AAudioStream_write() 或 AAudioStream_read()。
在调用 AAudioStream_requestStart() 后,回调函数将开始被调用。在调用 AAudioStream_requestPause() 或 AAudioStream_requestStop() 后,它将停止被调用。
此回调函数将在 AAudio 拥有的实时线程上被调用。低延迟流的回调线程可能比普通流具有更高的优先级。有关更多信息,请参阅 AAudioStream_dataCallback。
请注意,AAudio 回调绝不会从多个线程同时调用。
从 API 级别 26 开始可用。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setDeviceId
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setDeviceId( AAudioStreamBuilder *_Nonnull builder, int32_t deviceId )
请求由 ID 标识的音频设备。
可以从 Java AudioManager 获取 ID。 AudioManager.getDevices() 返回 AudioDeviceInfo 数组,其中包含 getId() 方法。该 ID 可以传递给此函数。
您可能无法获得请求的设备。因此,如果这对您很重要,您应该在流打开后调用 AAudioStream_getDeviceId() 来验证实际 ID。
如果您不调用此函数,默认值为 AAUDIO_UNSPECIFIED,在这种情况下将使用主设备。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setDirection
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setDirection( AAudioStreamBuilder *_Nonnull builder, aaudio_direction_t direction )
请求流的方向。
如果您不调用此函数,默认值为 AAUDIO_DIRECTION_OUTPUT。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setErrorCallback
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setErrorCallback( AAudioStreamBuilder *_Nonnull builder, AAudioStream_errorCallback _Nullable callback, void *_Nullable userData )
请求 AAudio 在发生任何错误或流断开连接时调用此函数。
例如,如果耳机或 USB 设备拔出导致流设备不可用或“已断开连接”,则会调用此回调。其他可能的错误原因包括超时或意外的内部错误。
作为响应,此函数应发出信号或创建另一个线程来停止和关闭此流。然后,其他线程可以在其他设备上重新打开流。不要直接从此回调中停止或关闭流,或重新打开新流。
此回调不会因应用的操作而调用,例如停止或关闭流。
请注意,AAudio 回调绝不会从多个线程同时调用。
从 API 级别 26 开始可用。
详细信息 | |||||||
---|---|---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setFormat
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setFormat( AAudioStreamBuilder *_Nonnull builder, aaudio_format_t format )
请求采样数据格式,例如 AAUDIO_FORMAT_PCM_I16。
如果您不调用此函数,默认值为 AAUDIO_UNSPECIFIED。然后在流打开时选择最佳值。打开具有未指定值的流后,应用必须查询实际值,该值可能因设备而异。
如果指定了确切值,则打开的流将使用该值。如果无法使用指定值打开流,则打开将失败。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setFramesPerDataCallback
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setFramesPerDataCallback( AAudioStreamBuilder *_Nonnull builder, int32_t numFrames )
设置请求的数据回调缓冲区大小(以帧为单位)。
请参阅 AAudioStream_dataCallback。
如果您不调用此函数,默认值为 AAUDIO_UNSPECIFIED。
为了获得可能的最低延迟,请勿调用此函数。然后 AAudio 将以最佳大小调用 dataProc 回调函数。该大小可能因回调而异。
仅当应用需要特定帧数进行处理时才使用此函数。例如,应用可能正在使用需要特定二的幂大小缓冲区的 FFT。
AAudio 可能需要添加额外的缓冲区,以便在内部缓冲区大小和请求的缓冲区大小之间进行调整。
如果您确实调用此函数,则请求的大小应小于缓冲区容量的一半,以允许双重缓冲。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setInputPreset
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setInputPreset( AAudioStreamBuilder *_Nonnull builder, aaudio_input_preset_t inputPreset )
设置流的输入(捕获)预设。
AAudio 系统将使用此信息优化流的行为。例如,这可能会影响使用哪些麦克风以及如何处理录制的数据。
如果您不调用此函数,默认值为 AAUDIO_INPUT_PRESET_VOICE_RECOGNITION。这是因为在许多平台上,VOICE_RECOGNITION 是延迟最低的预设。
自 API 级别 28 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setIsContentSpatialized
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setIsContentSpatialized( AAudioStreamBuilder *_Nonnull builder, bool isSpatialized )
指定此输出流的音频数据是否已为空间化进行处理。
如果流已进行空间化处理,将其设置为 true 将防止在会空间化音频数据的平台上出现双重处理等问题。
自 API 级别 32 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setPackageName
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setPackageName( AAudioStreamBuilder *_Nonnull builder, const char *_Nonnull packageName )
声明创建流的包名。
这通常是
Context#getPackageName()
如果您不调用此函数,默认值为调用 UID 中的随机包。绝大多数应用每个调用 UID 只有一个包。如果设置了无效的包名,输入流可能在启动时无法获得录音权限。
包名通常是您应用 build.gradle 文件中的 applicationId。
从 API 级别 31 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setPerformanceMode
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setPerformanceMode( AAudioStreamBuilder *_Nonnull builder, aaudio_performance_mode_t mode )
设置请求的性能模式。
支持的模式有 AAUDIO_PERFORMANCE_MODE_NONE、AAUDIO_PERFORMANCE_MODE_POWER_SAVING * 和 AAUDIO_PERFORMANCE_MODE_LOW_LATENCY。
如果您不调用此函数,默认值为 AAUDIO_PERFORMANCE_MODE_NONE。
您可能无法获得请求的模式。您可以调用 AAudioStream_getPerformanceMode() 来查明流的最终模式。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setPrivacySensitive
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setPrivacySensitive( AAudioStreamBuilder *_Nonnull builder, bool privacySensitive )
指示此输入流是否必须标记为隐私敏感。
当为 true 时,此输入流是隐私敏感的,不允许任何并发捕获。
默认情况下此选项关闭(false),除非输入预设为 AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION 或 AAUDIO_INPUT_PRESET_CAMCORDER。
明确设置时,始终优先于输入预设的默认值。
仅当流方向为 AAUDIO_DIRECTION_INPUT 时相关。
在 API 级别 30 中添加。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setSampleRate
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setSampleRate( AAudioStreamBuilder *_Nonnull builder, int32_t sampleRate )
请求采样率(赫兹)。
如果您不调用此函数,默认值为 AAUDIO_UNSPECIFIED。然后在流打开时选择最佳值。打开具有未指定值的流后,应用必须查询实际值,该值可能因设备而异。
如果指定了确切值,则打开的流将使用该值。如果无法使用指定值打开流,则打开将失败。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setSamplesPerFrame
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setSamplesPerFrame( AAudioStreamBuilder *_Nonnull builder, int32_t samplesPerFrame )
与 AAudioStreamBuilder_setChannelCount() 相同。
从 API 级别 26 开始可用。
已弃用。 使用 AAudioStreamBuilder_setChannelCount
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setSessionId
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setSessionId( AAudioStreamBuilder *_Nonnull builder, aaudio_session_id_t sessionId )
设置请求的会话 ID。
会话 ID 可用于将流与效果处理器关联。效果使用 Android AudioEffect Java API 控制。
如果您不调用此函数,默认值为 AAUDIO_SESSION_ID_NONE。
如果设置为 AAUDIO_SESSION_ID_ALLOCATE,则在流打开时将分配会话 ID。
分配的会话 ID 可以通过调用 AAudioStream_getSessionId() 获得,然后在打开另一个流时与此函数一起使用。这允许在流之间共享效果。
来自 AAudio 的会话 ID 可以与 Android Java API 互通使用。因此,AAudio 流的会话 ID 可以传递给 Java,并使用 Java AudioEffect API 应用效果。
请注意,分配或设置会话 ID 可能导致流具有更高的延迟。
分配的会话 ID 始终为正值且非零。
自 API 级别 28 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setSharingMode
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setSharingMode( AAudioStreamBuilder *_Nonnull builder, aaudio_sharing_mode_t sharingMode )
请求设备共享模式。
如果您不调用此函数,默认值为 AAUDIO_SHARING_MODE_SHARED。
请求的共享模式可能不可用。应用可以在流打开后查询实际模式。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setSpatializationBehavior
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setSpatializationBehavior( AAudioStreamBuilder *_Nonnull builder, aaudio_spatialization_behavior_t spatializationBehavior )
设置影响是否使用空间化的行为。
当支持并启用空间化效果时,AAudio 系统将使用此信息来选择流是否经过空间化效果处理。
自 API 级别 32 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStreamBuilder_setUsage
在aaudio/AAudio.h
中声明
AAUDIO_API void AAudioStreamBuilder_setUsage( AAudioStreamBuilder *_Nonnull builder, aaudio_usage_t usage )
设置输出流的预期用例。
AAudio 系统将使用此信息优化流的行为。例如,这可能会影响流的音量和焦点处理方式。
如果您不调用此函数,默认值为 AAUDIO_USAGE_MEDIA。
如果您设置了 Usage,则需要将音量键与结果流关联起来。否则音量键可能无法正常工作。这在 Java 中通过以下代码块完成。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
AudioAttributes attributes = new AudioAttributes.Builder().setUsage(usage)
.setContentType(contentType).build();
setVolumeControlStream(attributes.getVolumeControlStream());
}
自 API 级别 28 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
AAudioStream_close
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_close( AAudioStream *_Nonnull stream )
删除与 AAudioStreamBuilder_openStream() 创建的流相关的内部数据结构。
如果尚未调用 AAudioStream_release(),则将自动调用它。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
AAUDIO_OK 或负值错误。
|
AAudioStream_getAllowedCapturePolicy
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_allowed_capture_policy_t AAudioStream_getAllowedCapturePolicy( AAudioStream *_Nonnull stream )
返回确定音频是否可由其他应用或系统捕获的策略。
自 API 级别 29 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
允许的捕获策略,例如 AAUDIO_ALLOW_CAPTURE_BY_ALL
|
AAudioStream_getBufferCapacityInFrames
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getBufferCapacityInFrames( AAudioStream *_Nonnull stream )
查询最大缓冲区容量(以帧为单位)。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
以帧为单位的缓冲区容量
|
AAudioStream_getBufferSizeInFrames
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getBufferSizeInFrames( AAudioStream *_Nonnull stream )
查询可以在不阻塞的情况下填充的最大帧数。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
以帧为单位的缓冲区大小。
|
AAudioStream_getChannelCount
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getChannelCount( AAudioStream *_Nonnull stream )
一个流包含一个或多个数据通道。
一帧将包含每个通道的一个样本。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
流的实际通道数
|
AAudioStream_getChannelMask
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_channel_mask_t AAudioStream_getChannelMask( AAudioStream *_Nonnull stream )
返回流的通道掩码。
这将是使用 AAudioStreamBuilder_setChannelMask 设置的掩码,否则为 AAUDIO_UNSPECIFIED。
自 API 级别 32 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
实际通道掩码
|
AAudioStream_getContentType
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_content_type_t AAudioStream_getContentType( AAudioStream *_Nonnull stream )
返回流的内容类型。
自 API 级别 28 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
内容类型,例如 AAUDIO_CONTENT_TYPE_MUSIC
|
AAudioStream_getDeviceId
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getDeviceId( AAudioStream *_Nonnull stream )
AAudioStream_getDirection
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_direction_t AAudioStream_getDirection( AAudioStream *_Nonnull stream )
AAudioStream_getFormat
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_format_t AAudioStream_getFormat( AAudioStream *_Nonnull stream )
AAudioStream_getFramesPerBurst
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getFramesPerBurst( AAudioStream *_Nonnull stream )
查询应用为获得最佳性能应一次读取或写入的帧数。
如果应用写入不同数量的帧,这是可以接受的。但缓冲区大小可能需要更大,以避免下溢或溢出。
请注意,这可能与实际设备突发大小匹配或不匹配。对于某些端点,突发大小可以动态变化。但这往往是延迟较高的设备。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
突发大小
|
AAudioStream_getFramesPerDataCallback
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getFramesPerDataCallback( AAudioStream *_Nonnull stream )
查询将在 numFrames 参数中传递给 dataProc 回调的缓冲区大小。
如果应用需要在流启动之前知道 numFrames 的值,可以使用此调用。这通常不是必需的。
如果通过调用 AAudioStreamBuilder_setFramesPerDataCallback() 请求了特定大小,则此值将与该大小相同。
如果未调用 AAudioStreamBuilder_setFramesPerDataCallback(),则此函数将返回 AAudio 选择的大小,或 AAUDIO_UNSPECIFIED。
AAUDIO_UNSPECIFIED 表示此流的回调缓冲区大小可能因不同的 dataProc 回调而异。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
以帧为单位的回调缓冲区大小或 AAUDIO_UNSPECIFIED
|
AAudioStream_getFramesRead
在aaudio/AAudio.h
中声明
AAUDIO_API int64_t AAudioStream_getFramesRead( AAudioStream *_Nonnull stream )
返回自流创建以来已读取的帧数。
对于输出流,此值由端点推进。对于输入流,此值由调用 read() 的应用或数据回调推进。
帧位置单调递增。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
已读取的帧数
|
AAudioStream_getFramesWritten
在aaudio/AAudio.h
中声明
AAUDIO_API int64_t AAudioStream_getFramesWritten( AAudioStream *_Nonnull stream )
返回自流创建以来已写入的帧数。
对于输出流,此值由调用 write() 的应用或数据回调推进。对于输入流,此值由端点推进。
帧位置单调递增。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
已写入的帧数
|
AAudioStream_getHardwareChannelCount
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getHardwareChannelCount( AAudioStream *_Nonnull stream )
音频框架中可能存在通道转换。
流构建器中设置的通道数或通道掩码可能不是硬件中使用的实际通道数。
此函数返回硬件使用的通道数。
如果 AAudioStreamBuilder_openStream() 返回 AAUDIO_OK,结果应始终有效。
从 API 级别 34 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
底层硬件的实际通道数
|
AAudioStream_getHardwareFormat
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_format_t AAudioStream_getHardwareFormat( AAudioStream *_Nonnull stream )
音频框架中可能存在数据格式转换。
流构建器中设置的数据格式可能不是硬件中使用的实际格式。
此函数返回硬件使用的音频格式。
如果 AAudioStreamBuilder_openStream() 返回 AAUDIO_OK,此函数应始终返回 an aaudio_format_t。
AAudio 目前不支持 AUDIO_FORMAT_PCM_8_24_BIT,但硬件可能使用它。如果硬件使用 AUDIO_FORMAT_PCM_8_24_BIT,则返回 AAUDIO_FORMAT_PCM_I24_PACKED。
如果硬件使用的任何其他格式不受 AAudio 支持,则此函数将返回 AAUDIO_FORMAT_INVALID。
从 API 级别 34 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
底层硬件的实际数据格式。
|
AAudioStream_getHardwareSampleRate
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getHardwareSampleRate( AAudioStream *_Nonnull stream )
音频框架中可能存在采样率转换。
流构建器中设置的采样率可能不是硬件中使用的实际采样率。
此函数以赫兹为单位返回硬件使用的采样率。
如果 AAudioStreamBuilder_openStream() 返回 AAUDIO_OK,结果应始终有效。
从 API 级别 34 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
底层硬件的实际采样率
|
AAudioStream_getInputPreset
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_input_preset_t AAudioStream_getInputPreset( AAudioStream *_Nonnull stream )
返回流的输入预设。
自 API 级别 28 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
输入预设,例如 AAUDIO_INPUT_PRESET_CAMCORDER
|
AAudioStream_getPerformanceMode
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_performance_mode_t AAudioStream_getPerformanceMode( AAudioStream *_Nonnull stream )
AAudioStream_getSampleRate
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getSampleRate( AAudioStream *_Nonnull stream )
AAudioStream_getSamplesPerFrame
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getSamplesPerFrame( AAudioStream *_Nonnull stream )
与 AAudioStream_getChannelCount() 相同。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
帧的实际样本数
|
AAudioStream_getSessionId
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_session_id_t AAudioStream_getSessionId( AAudioStream *_Nonnull stream )
返回与此流关联的会话 ID。
会话 ID 可用于将流与效果处理器关联。效果使用 Android AudioEffect Java API 控制。
如果使用 AAudioStreamBuilder_setSessionId() 调用了 AAUDIO_SESSION_ID_ALLOCATE,则在流打开时应分配一个新的会话 ID。
如果使用先前分配的会话 ID 调用了 AAudioStreamBuilder_setSessionId(),则应返回该值。
如果未调用 AAudioStreamBuilder_setSessionId(),则此函数应返回 AAUDIO_SESSION_ID_NONE。
流的会话 ID 在流打开后不应更改。
自 API 级别 28 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
会话 ID 或 AAUDIO_SESSION_ID_NONE
|
AAudioStream_getSharingMode
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_sharing_mode_t AAudioStream_getSharingMode( AAudioStream *_Nonnull stream )
AAudioStream_getSpatializationBehavior
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_spatialization_behavior_t AAudioStream_getSpatializationBehavior( AAudioStream *_Nonnull stream )
返回流的空间化行为。
如果未明确设置,将返回默认的 AAUDIO_SPATIALIZATION_BEHAVIOR_AUTO 行为。
自 API 级别 32 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
空间化行为,例如 AAUDIO_SPATIALIZATION_BEHAVIOR_AUTO
|
AAudioStream_getState
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_stream_state_t AAudioStream_getState( AAudioStream *_Nonnull stream )
查询客户端的当前状态,例如。
此函数将立即返回状态而不更新状态。如果您想根据服务器状态更新客户端状态,请调用 AAudioStream_waitForStateChange(),并将 currentState 设置为 AAUDIO_STREAM_STATE_UNKNOWN,超时时间为零。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
AAudioStream_getTimestamp
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_getTimestamp( AAudioStream *_Nonnull stream, clockid_t clockid, int64_t *_Nonnull framePosition, int64_t *_Nonnull timeNanoseconds )
返回特定帧在扬声器或头戴式设备上播放或在麦克风上录制的时间。
这可用于将音频与视频或 MIDI 同步。也可用于将录制的流与播放流对齐。
framePosition 是音频数据流中的索引。播放或录制的第一帧位于 framePosition 0。
这些 framePosition 与您从 AAudioStream_getFramesRead() 或 AAudioStream_getFramesWritten() 获得的单位相同。“帧”是一组同时播放的音频样本值。例如,立体声流一帧中有两个样本,左声道和右声道。
仅当流处于 AAUDIO_STREAM_STATE_STARTED 状态时,时间戳才有效。如果流未启动,将返回 AAUDIO_ERROR_INVALID_STATE。请注意,由于 requestStart() 是异步的,时间戳直到调用 requestStart() 后短时间内才有效。因此,AAUDIO_ERROR_INVALID_STATE 不应被视为致命错误。稍后重试即可。
如果发生错误,则位置和时间将不会修改。
返回的位置和时间单调递增。
从 API 级别 26 开始可用。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
AAUDIO_OK 或负值错误
|
AAudioStream_getUsage
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_usage_t AAudioStream_getUsage( AAudioStream *_Nonnull stream )
AAudioStream_getXRunCount
在aaudio/AAudio.h
中声明
AAUDIO_API int32_t AAudioStream_getXRunCount( AAudioStream *_Nonnull stream )
XRun 是 Underrun 或 Overrun。
播放期间,如果未及时写入流且系统缺少有效数据,将发生下溢。录音期间,如果未及时读取流且没有地方放置传入数据,将发生溢出,因此数据会被丢弃。
下溢或溢出可能导致可听见的“爆音”或“毛刺”。
请注意,某些输入设备可能不支持此函数。在这种情况下,始终返回 0。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
下溢或溢出计数
|
AAudioStream_isContentSpatialized
在aaudio/AAudio.h
中声明
AAUDIO_API bool AAudioStream_isContentSpatialized( AAudioStream *_Nonnull stream )
返回流的内容是否已空间化。
自 API 级别 32 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
如果内容已空间化,则为 true
|
AAudioStream_isPrivacySensitive
在aaudio/AAudio.h
中声明
AAUDIO_API bool AAudioStream_isPrivacySensitive( AAudioStream *_Nonnull stream )
返回此输入流是否标记为隐私敏感。
请参阅 AAudioStreamBuilder_setPrivacySensitive()。
在 API 级别 30 中添加。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
如果隐私敏感,则为 true,否则为 false
|
AAudioStream_read
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_read( AAudioStream *_Nonnull stream, void *_Nonnull buffer, int32_t numFrames, int64_t timeoutNanoseconds )
从流中读取数据。
此调用将等待直到读取完成或超时。如果 timeoutNanos 为零,则此调用不会等待。
请注意,timeoutNanoseconds 是墙钟时间中的相对持续时间。如果线程处于睡眠状态,时间不会停止。因此它将使用 CLOCK_BOOTTIME 实现。
除非需要等待数据,否则此调用是“强非阻塞”的。
如果调用超时,则返回零或部分帧计数。
从 API 级别 26 开始可用。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
实际读取的帧数或负值错误。
|
AAudioStream_release
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_release( AAudioStream *_Nonnull stream )
释放与 AAudioStreamBuilder_openStream() 创建的流关联的音频资源。
在此函数调用后的某个时刻应调用 AAudioStream_close()。
调用此函数后,流将处于 AAUDIO_STREAM_STATE_CLOSING 状态
如果您想立即释放音频资源,但仍允许其他线程查询流,此函数很有用。如果您从 UI 线程监控流进度,通常会发生这种情况。
注意:此函数仅在 MMAP 流中完全实现,MMAP 流是一些设备支持的低延迟流。在其他“传统”流上,某些音频资源仍在使用,并且在此调用后某些回调可能仍在处理中。
自 API 级别 30 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
AAUDIO_OK 或负值错误。
|
AAudioStream_requestFlush
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_requestFlush( AAudioStream *_Nonnull stream )
异步请求流刷新。
刷新将丢弃任何待处理的数据。此调用仅在流处于 OPEN、PAUSED、STOPPED 或 FLUSHED 状态时有效。在其他状态下调用此函数,或从 AAudio 回调函数中调用,将无效并返回错误。帧计数器不会因刷新而重置。它们可能会前进。调用此函数后,状态将处于 AAUDIO_STREAM_STATE_FLUSHING 或 AAUDIO_STREAM_STATE_FLUSHED 状态。
对于输入流,此函数将返回 AAUDIO_ERROR_UNIMPLEMENTED。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
AAUDIO_OK 或负值错误。
|
AAudioStream_requestPause
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_requestPause( AAudioStream *_Nonnull stream )
异步请求流暂停。
暂停流将冻结数据流但不会清空任何缓冲区。使用 AAudioStream_requestStart() 在暂停后恢复播放。调用此函数后,状态将处于 AAUDIO_STREAM_STATE_PAUSING 或 AAUDIO_STREAM_STATE_PAUSED 状态。
对于输入流,此函数将返回 AAUDIO_ERROR_UNIMPLEMENTED。对于输入流,请使用 AAudioStream_requestStop()。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
AAUDIO_OK 或负值错误。
|
AAudioStream_requestStart
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_requestStart( AAudioStream *_Nonnull stream )
异步请求开始播放流。
对于输出流,在开始前应向流写入数据以填充缓冲区。否则将发生下溢。调用此函数后,状态将处于 AAUDIO_STREAM_STATE_STARTING 或 AAUDIO_STREAM_STATE_STARTED 状态。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
AAUDIO_OK 或负值错误。
|
AAudioStream_requestStop
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_requestStop( AAudioStream *_Nonnull stream )
异步请求流停止。
流将在当前所有缓冲数据播放完毕后停止。调用此函数后,状态将处于 AAUDIO_STREAM_STATE_STOPPING 或 AAUDIO_STREAM_STATE_STOPPED 状态。
从 API 级别 26 开始可用。
详细信息 | |||
---|---|---|---|
参数 |
|
||
返回值 |
AAUDIO_OK 或负值错误。
|
AAudioStream_setBufferSizeInFrames
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_setBufferSizeInFrames( AAudioStream *_Nonnull stream, int32_t numFrames )
这可用于通过更改发生阻塞的阈值来调整缓冲区的延迟。
通过将其与 AAudioStream_getXRunCount() 结合使用,可以在运行时针对每个设备调整延迟。
此值不能高于 AAudioStream_getBufferCapacityInFrames()。
请注意,您可能无法获得请求的确切大小。您可以检查返回值或调用 AAudioStream_getBufferSizeInFrames() 来查看实际最终大小。
从 API 级别 26 开始可用。
详细信息 | |||||
---|---|---|---|---|---|
参数 |
|
||||
返回值 |
以帧为单位的实际缓冲区大小或负值错误
|
AAudioStream_waitForStateChange
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_waitForStateChange( AAudioStream *_Nonnull stream, aaudio_stream_state_t inputState, aaudio_stream_state_t *_Nullable nextState, int64_t timeoutNanoseconds )
等待直到当前状态不再与输入状态匹配。
这将更新当前客户端状态。
aaudio_result_t result = AAUDIO_OK;
aaudio_stream_state_t currentState = AAudioStream_getState(stream);
aaudio_stream_state_t inputState = currentState;
while (result == AAUDIO_OK && currentState != AAUDIO_STREAM_STATE_PAUSED) {
result = AAudioStream_waitForStateChange(
stream, inputState, ¤tState, MY_TIMEOUT_NANOS);
inputState = currentState;
}
从 API 级别 26 开始可用。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
AAUDIO_OK 或负值错误。
|
AAudioStream_write
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudioStream_write( AAudioStream *_Nonnull stream, const void *_Nonnull buffer, int32_t numFrames, int64_t timeoutNanoseconds )
将数据写入流。
此调用将等待直到写入完成或超时。如果 timeoutNanos 为零,则此调用不会等待。
请注意,timeoutNanoseconds 是墙钟时间中的相对持续时间。如果线程处于睡眠状态,时间不会停止。因此它将使用 CLOCK_BOOTTIME 实现。
除非需要等待缓冲区中的空间,否则此调用是“强非阻塞”的。
如果调用超时,则返回零或部分帧计数。
从 API 级别 26 开始可用。
详细信息 | |||||||||
---|---|---|---|---|---|---|---|---|---|
参数 |
|
||||||||
返回值 |
实际写入的帧数或负值错误。
|
AAudio_convertResultToText
在aaudio/AAudio.h
中声明
AAUDIO_API const char *_Nonnull AAudio_convertResultToText( aaudio_result_t returnCode )
文本是与 returnCode 对应的 ASCII 符号,或者是一条表示 returnCode 未识别的英文消息。
这旨在供开发者调试时使用。不用于向用户显示。
从 API 级别 26 开始可用。
详细信息 | |
---|---|
返回值 |
指向 AAudio 结果代码文本表示形式的指针。
|
AAudio_convertStreamStateToText
在aaudio/AAudio.h
中声明
AAUDIO_API const char *_Nonnull AAudio_convertStreamStateToText( aaudio_stream_state_t state )
文本是与流状态对应的 ASCII 符号,或者是一条表示该状态未识别的英文消息。
这旨在供开发者调试时使用。不用于向用户显示。
从 API 级别 26 开始可用。
详细信息 | |
---|---|
返回值 |
指向 AAudio 状态文本表示形式的指针。
|
AAudio_createStreamBuilder
在aaudio/AAudio.h
中声明
AAUDIO_API aaudio_result_t AAudio_createStreamBuilder( AAudioStreamBuilder *_Nullable *_Nonnull builder )
创建一个可用于打开 Stream 的 StreamBuilder。
deviceId 最初未指定,表示将使用当前默认设备。
默认方向为 AAUDIO_DIRECTION_OUTPUT。默认共享模式为 AAUDIO_SHARING_MODE_SHARED。数据格式、samplesPerFrames 和 sampleRate 未指定,将在设备打开时由设备选择。
使用完构建器后,必须调用 AAudioStreamBuilder_delete()。
从 API 级别 26 开始可用。