Audio

摘要

枚举

Anonymous Enum 0{
  AAUDIO_DIRECTION_OUTPUT,
  AAUDIO_DIRECTION_INPUT
}
enum
Anonymous Enum 1{
  AAUDIO_FORMAT_INVALID = -1,
  AAUDIO_FORMAT_UNSPECIFIED = 0,
  AAUDIO_FORMAT_PCM_I16,
  AAUDIO_FORMAT_PCM_FLOAT,
  AAUDIO_FORMAT_PCM_I24_PACKED,
  AAUDIO_FORMAT_PCM_I32,
  AAUDIO_FORMAT_IEC61937
}
enum
Anonymous Enum 10{
  AAUDIO_ALLOW_CAPTURE_BY_ALL = 1,
  AAUDIO_ALLOW_CAPTURE_BY_SYSTEM = 2,
  AAUDIO_ALLOW_CAPTURE_BY_NONE = 3
}
enum
指定音频是否可由其他应用或系统捕获。
Anonymous Enum 11{
  AAUDIO_SESSION_ID_NONE = -1,
  AAUDIO_SESSION_ID_ALLOCATE = 0
}
enum
这些可与 AAudioStreamBuilder_setSessionId() 一起使用。
Anonymous Enum 12{
  AAUDIO_CHANNEL_INVALID = -1,
  AAUDIO_CHANNEL_FRONT_LEFT = 1 << 0,
  AAUDIO_CHANNEL_FRONT_RIGHT = 1 << 1,
  AAUDIO_CHANNEL_FRONT_CENTER = 1 << 2,
  AAUDIO_CHANNEL_LOW_FREQUENCY = 1 << 3,
  AAUDIO_CHANNEL_BACK_LEFT = 1 << 4,
  AAUDIO_CHANNEL_BACK_RIGHT = 1 << 5,
  AAUDIO_CHANNEL_FRONT_LEFT_OF_CENTER = 1 << 6,
  AAUDIO_CHANNEL_FRONT_RIGHT_OF_CENTER = 1 << 7,
  AAUDIO_CHANNEL_BACK_CENTER = 1 << 8,
  AAUDIO_CHANNEL_SIDE_LEFT = 1 << 9,
  AAUDIO_CHANNEL_SIDE_RIGHT = 1 << 10,
  AAUDIO_CHANNEL_TOP_CENTER = 1 << 11,
  AAUDIO_CHANNEL_TOP_FRONT_LEFT = 1 << 12,
  AAUDIO_CHANNEL_TOP_FRONT_CENTER = 1 << 13,
  AAUDIO_CHANNEL_TOP_FRONT_RIGHT = 1 << 14,
  AAUDIO_CHANNEL_TOP_BACK_LEFT = 1 << 15,
  AAUDIO_CHANNEL_TOP_BACK_CENTER = 1 << 16,
  AAUDIO_CHANNEL_TOP_BACK_RIGHT = 1 << 17,
  AAUDIO_CHANNEL_TOP_SIDE_LEFT = 1 << 18,
  AAUDIO_CHANNEL_TOP_SIDE_RIGHT = 1 << 19,
  AAUDIO_CHANNEL_BOTTOM_FRONT_LEFT = 1 << 20,
  AAUDIO_CHANNEL_BOTTOM_FRONT_CENTER = 1 << 21,
  AAUDIO_CHANNEL_BOTTOM_FRONT_RIGHT = 1 << 22,
  AAUDIO_CHANNEL_LOW_FREQUENCY_2 = 1 << 23,
  AAUDIO_CHANNEL_FRONT_WIDE_LEFT = 1 << 24,
  AAUDIO_CHANNEL_FRONT_WIDE_RIGHT = 1 << 25,
  AAUDIO_CHANNEL_MONO = AAUDIO_CHANNEL_FRONT_LEFT,
  AAUDIO_CHANNEL_STEREO = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT,
  AAUDIO_CHANNEL_2POINT1 = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_LOW_FREQUENCY,
  AAUDIO_CHANNEL_TRI = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_FRONT_CENTER,
  AAUDIO_CHANNEL_TRI_BACK = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_BACK_CENTER,
  AAUDIO_CHANNEL_3POINT1 = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_FRONT_CENTER | AAUDIO_CHANNEL_LOW_FREQUENCY,
  AAUDIO_CHANNEL_2POINT0POINT2 = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_TOP_SIDE_LEFT | AAUDIO_CHANNEL_TOP_SIDE_RIGHT,
  AAUDIO_CHANNEL_2POINT1POINT2 = AAUDIO_CHANNEL_2POINT0POINT2 | AAUDIO_CHANNEL_LOW_FREQUENCY,
  AAUDIO_CHANNEL_3POINT0POINT2 = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_FRONT_CENTER | AAUDIO_CHANNEL_TOP_SIDE_LEFT | AAUDIO_CHANNEL_TOP_SIDE_RIGHT,
  AAUDIO_CHANNEL_3POINT1POINT2 = AAUDIO_CHANNEL_3POINT0POINT2 | AAUDIO_CHANNEL_LOW_FREQUENCY,
  AAUDIO_CHANNEL_QUAD = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_BACK_LEFT | AAUDIO_CHANNEL_BACK_RIGHT,
  AAUDIO_CHANNEL_QUAD_SIDE = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_SIDE_LEFT | AAUDIO_CHANNEL_SIDE_RIGHT,
  AAUDIO_CHANNEL_SURROUND = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_FRONT_CENTER | AAUDIO_CHANNEL_BACK_CENTER,
  AAUDIO_CHANNEL_PENTA = AAUDIO_CHANNEL_QUAD | AAUDIO_CHANNEL_FRONT_CENTER,
  AAUDIO_CHANNEL_5POINT1 = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_FRONT_CENTER | AAUDIO_CHANNEL_LOW_FREQUENCY | AAUDIO_CHANNEL_BACK_LEFT | AAUDIO_CHANNEL_BACK_RIGHT,
  AAUDIO_CHANNEL_5POINT1_SIDE = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_FRONT_CENTER | AAUDIO_CHANNEL_LOW_FREQUENCY | AAUDIO_CHANNEL_SIDE_LEFT | AAUDIO_CHANNEL_SIDE_RIGHT,
  AAUDIO_CHANNEL_6POINT1 = AAUDIO_CHANNEL_FRONT_LEFT | AAUDIO_CHANNEL_FRONT_RIGHT | AAUDIO_CHANNEL_FRONT_CENTER | AAUDIO_CHANNEL_LOW_FREQUENCY | AAUDIO_CHANNEL_BACK_LEFT | AAUDIO_CHANNEL_BACK_RIGHT | AAUDIO_CHANNEL_BACK_CENTER,
  AAUDIO_CHANNEL_7POINT1 = AAUDIO_CHANNEL_5POINT1 | AAUDIO_CHANNEL_SIDE_LEFT | AAUDIO_CHANNEL_SIDE_RIGHT,
  AAUDIO_CHANNEL_5POINT1POINT2 = AAUDIO_CHANNEL_5POINT1 | AAUDIO_CHANNEL_TOP_SIDE_LEFT | AAUDIO_CHANNEL_TOP_SIDE_RIGHT,
  AAUDIO_CHANNEL_5POINT1POINT4 = AAUDIO_CHANNEL_5POINT1 | AAUDIO_CHANNEL_TOP_FRONT_LEFT | AAUDIO_CHANNEL_TOP_FRONT_RIGHT | AAUDIO_CHANNEL_TOP_BACK_LEFT | AAUDIO_CHANNEL_TOP_BACK_RIGHT,
  AAUDIO_CHANNEL_7POINT1POINT2 = AAUDIO_CHANNEL_7POINT1 | AAUDIO_CHANNEL_TOP_SIDE_LEFT | AAUDIO_CHANNEL_TOP_SIDE_RIGHT,
  AAUDIO_CHANNEL_7POINT1POINT4 = AAUDIO_CHANNEL_7POINT1 | AAUDIO_CHANNEL_TOP_FRONT_LEFT | AAUDIO_CHANNEL_TOP_FRONT_RIGHT | AAUDIO_CHANNEL_TOP_BACK_LEFT | AAUDIO_CHANNEL_TOP_BACK_RIGHT,
  AAUDIO_CHANNEL_9POINT1POINT4 = AAUDIO_CHANNEL_7POINT1POINT4 | AAUDIO_CHANNEL_FRONT_WIDE_LEFT | AAUDIO_CHANNEL_FRONT_WIDE_RIGHT,
  AAUDIO_CHANNEL_9POINT1POINT6 = AAUDIO_CHANNEL_9POINT1POINT4 | AAUDIO_CHANNEL_TOP_SIDE_LEFT | AAUDIO_CHANNEL_TOP_SIDE_RIGHT,
  AAUDIO_CHANNEL_FRONT_BACK = AAUDIO_CHANNEL_FRONT_CENTER | AAUDIO_CHANNEL_BACK_CENTER
}
enum
定义音频通道掩码。
Anonymous Enum 13{
  AAUDIO_CALLBACK_RESULT_CONTINUE = 0,
  AAUDIO_CALLBACK_RESULT_STOP
}
enum
从数据回调函数返回这些值之一。
Anonymous Enum 2{
  AAUDIO_OK,
  AAUDIO_ERROR_BASE = -900,
  AAUDIO_ERROR_DISCONNECTED,
  AAUDIO_ERROR_ILLEGAL_ARGUMENT,
  AAUDIO_ERROR_INTERNAL = AAUDIO_ERROR_ILLEGAL_ARGUMENT + 2,
  AAUDIO_ERROR_INVALID_STATE,
  AAUDIO_ERROR_INVALID_HANDLE = AAUDIO_ERROR_INVALID_STATE + 3,
  AAUDIO_ERROR_UNIMPLEMENTED = AAUDIO_ERROR_INVALID_HANDLE + 2,
  AAUDIO_ERROR_UNAVAILABLE,
  AAUDIO_ERROR_NO_FREE_HANDLES,
  AAUDIO_ERROR_NO_MEMORY,
  AAUDIO_ERROR_NULL,
  AAUDIO_ERROR_TIMEOUT,
  AAUDIO_ERROR_WOULD_BLOCK,
  AAUDIO_ERROR_INVALID_FORMAT,
  AAUDIO_ERROR_OUT_OF_RANGE,
  AAUDIO_ERROR_NO_SERVICE,
  AAUDIO_ERROR_INVALID_RATE
}
enum
AAudio 函数返回这些结果代码以指示成功或失败。
Anonymous Enum 3{
  AAUDIO_STREAM_STATE_UNINITIALIZED = 0,
  AAUDIO_STREAM_STATE_UNKNOWN,
  AAUDIO_STREAM_STATE_OPEN,
  AAUDIO_STREAM_STATE_STARTING,
  AAUDIO_STREAM_STATE_STARTED,
  AAUDIO_STREAM_STATE_PAUSING,
  AAUDIO_STREAM_STATE_PAUSED,
  AAUDIO_STREAM_STATE_FLUSHING,
  AAUDIO_STREAM_STATE_FLUSHED,
  AAUDIO_STREAM_STATE_STOPPING,
  AAUDIO_STREAM_STATE_STOPPED,
  AAUDIO_STREAM_STATE_CLOSING,
  AAUDIO_STREAM_STATE_CLOSED,
  AAUDIO_STREAM_STATE_DISCONNECTED
}
enum
AAudio Stream 状态,有关详细信息,请参阅使用音频流
Anonymous Enum 4{
  AAUDIO_SHARING_MODE_EXCLUSIVE,
  AAUDIO_SHARING_MODE_SHARED
}
enum
Anonymous Enum 5{
  AAUDIO_PERFORMANCE_MODE_NONE = 10,
  AAUDIO_PERFORMANCE_MODE_POWER_SAVING,
  AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
}
enum
Anonymous Enum 6{
  AAUDIO_USAGE_MEDIA = 1,
  AAUDIO_USAGE_VOICE_COMMUNICATION = 2,
  AAUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING = 3,
  AAUDIO_USAGE_ALARM = 4,
  AAUDIO_USAGE_NOTIFICATION = 5,
  AAUDIO_USAGE_NOTIFICATION_RINGTONE = 6,
  AAUDIO_USAGE_NOTIFICATION_EVENT = 10,
  AAUDIO_USAGE_ASSISTANCE_ACCESSIBILITY = 11,
  AAUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12,
  AAUDIO_USAGE_ASSISTANCE_SONIFICATION = 13,
  AAUDIO_USAGE_GAME = 14,
  AAUDIO_USAGE_ASSISTANT = 16,
  AAUDIO_SYSTEM_USAGE_EMERGENCY = AAUDIO_SYSTEM_USAGE_OFFSET,
  AAUDIO_SYSTEM_USAGE_SAFETY = AAUDIO_SYSTEM_USAGE_OFFSET + 1,
  AAUDIO_SYSTEM_USAGE_VEHICLE_STATUS = AAUDIO_SYSTEM_USAGE_OFFSET + 2,
  AAUDIO_SYSTEM_USAGE_ANNOUNCEMENT = AAUDIO_SYSTEM_USAGE_OFFSET + 3
}
enum
USAGE 属性表达您播放声音的“目的”,即该声音用于什么。
Anonymous Enum 7{
  AAUDIO_CONTENT_TYPE_SPEECH = 1,
  AAUDIO_CONTENT_TYPE_MUSIC = 2,
  AAUDIO_CONTENT_TYPE_MOVIE = 3,
  AAUDIO_CONTENT_TYPE_SONIFICATION = 4
}
enum
CONTENT_TYPE 属性描述您正在播放的“内容”。
Anonymous Enum 8{
  AAUDIO_SPATIALIZATION_BEHAVIOR_AUTO = 1,
  AAUDIO_SPATIALIZATION_BEHAVIOR_NEVER = 2
}
enum
Anonymous Enum 9{
  AAUDIO_INPUT_PRESET_GENERIC = 1,
  AAUDIO_INPUT_PRESET_CAMCORDER = 5,
  AAUDIO_INPUT_PRESET_VOICE_RECOGNITION = 6,
  AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION = 7,
  AAUDIO_INPUT_PRESET_UNPROCESSED = 9,
  AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE = 10,
  AAUDIO_INPUT_PRESET_SYSTEM_ECHO_REFERENCE = 1997,
  AAUDIO_INPUT_PRESET_SYSTEM_HOTWORD = 1999
}
enum
定义音频源。

类型定义

AAudioStream typedef
struct AAudioStreamStruct
AAudioStreamBuilder typedef
struct AAudioStreamBuilderStruct
AAudioStream_dataCallback)(AAudioStream *_Nonnull stream, void *_Nullable userData, void *_Nonnull audioData, int32_t numFrames) typedef
aaudio_data_callback_result_t(*
传递给 AAudioStreamBuilder_setDataCallback() 的数据函数原型。
AAudioStream_errorCallback)(AAudioStream *_Nonnull stream, void *_Nullable userData, aaudio_result_t error) typedef
void(*
传递给 AAudioStreamBuilder_setErrorCallback() 的回调函数原型。
aaudio_allowed_capture_policy_t typedef
int32_t
aaudio_channel_mask_t typedef
uint32_t
aaudio_content_type_t typedef
int32_t
aaudio_data_callback_result_t typedef
int32_t
aaudio_direction_t typedef
int32_t
aaudio_format_t typedef
int32_t
aaudio_input_preset_t typedef
int32_t
aaudio_performance_mode_t typedef
int32_t
aaudio_result_t typedef
int32_t
aaudio_session_id_t typedef
int32_t
aaudio_sharing_mode_t typedef
int32_t
aaudio_spatialization_behavior_t typedef
int32_t
aaudio_stream_state_t typedef
int32_t
aaudio_usage_t typedef
int32_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_setChannelCount
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_MEDIAAAUDIO_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。

属性
AAUDIO_CHANNEL_2POINT0POINT2

支持输入和输出。

AAUDIO_CHANNEL_2POINT1

仅支持输出。

AAUDIO_CHANNEL_2POINT1POINT2

支持输入和输出。

AAUDIO_CHANNEL_3POINT0POINT2

支持输入和输出。

AAUDIO_CHANNEL_3POINT1

仅支持输出。

AAUDIO_CHANNEL_3POINT1POINT2

支持输入和输出。

AAUDIO_CHANNEL_5POINT1

支持输入和输出。

也称为 5POINT1_BACK

AAUDIO_CHANNEL_5POINT1POINT2

仅支持输出。

AAUDIO_CHANNEL_5POINT1POINT4

仅支持输出。

AAUDIO_CHANNEL_5POINT1_SIDE

仅支持输出。

AAUDIO_CHANNEL_6POINT1

仅支持输出。

AAUDIO_CHANNEL_7POINT1

仅支持输出。

AAUDIO_CHANNEL_7POINT1POINT2

仅支持输出。

AAUDIO_CHANNEL_7POINT1POINT4

仅支持输出。

AAUDIO_CHANNEL_9POINT1POINT4

仅支持输出。

AAUDIO_CHANNEL_9POINT1POINT6

仅支持输出。

AAUDIO_CHANNEL_BACK_CENTER
AAUDIO_CHANNEL_BACK_LEFT
AAUDIO_CHANNEL_BACK_RIGHT
AAUDIO_CHANNEL_BOTTOM_FRONT_CENTER
AAUDIO_CHANNEL_BOTTOM_FRONT_LEFT
AAUDIO_CHANNEL_BOTTOM_FRONT_RIGHT
AAUDIO_CHANNEL_FRONT_BACK

仅支持输入。

AAUDIO_CHANNEL_FRONT_CENTER
AAUDIO_CHANNEL_FRONT_LEFT
AAUDIO_CHANNEL_FRONT_LEFT_OF_CENTER
AAUDIO_CHANNEL_FRONT_RIGHT
AAUDIO_CHANNEL_FRONT_RIGHT_OF_CENTER
AAUDIO_CHANNEL_FRONT_WIDE_LEFT
AAUDIO_CHANNEL_FRONT_WIDE_RIGHT
AAUDIO_CHANNEL_INVALID

无效的通道掩码。

AAUDIO_CHANNEL_LOW_FREQUENCY
AAUDIO_CHANNEL_LOW_FREQUENCY_2
AAUDIO_CHANNEL_MONO

支持输入和输出。

AAUDIO_CHANNEL_PENTA

仅支持输出。

AAUDIO_CHANNEL_QUAD

仅支持输出。

AAUDIO_CHANNEL_QUAD_SIDE

仅支持输出。

AAUDIO_CHANNEL_SIDE_LEFT
AAUDIO_CHANNEL_SIDE_RIGHT
AAUDIO_CHANNEL_STEREO

支持输入和输出。

AAUDIO_CHANNEL_SURROUND

仅支持输出。

AAUDIO_CHANNEL_TOP_BACK_CENTER
AAUDIO_CHANNEL_TOP_BACK_LEFT
AAUDIO_CHANNEL_TOP_BACK_RIGHT
AAUDIO_CHANNEL_TOP_CENTER
AAUDIO_CHANNEL_TOP_FRONT_CENTER
AAUDIO_CHANNEL_TOP_FRONT_LEFT
AAUDIO_CHANNEL_TOP_FRONT_RIGHT
AAUDIO_CHANNEL_TOP_SIDE_LEFT
AAUDIO_CHANNEL_TOP_SIDE_RIGHT
AAUDIO_CHANNEL_TRI

仅支持输出。

AAUDIO_CHANNEL_TRI_BACK

仅支持输出。

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()

以下函数可以在数据回调中调用

如果您需要在回调函数内外移动数据,例如 MIDI 命令,我们建议使用非阻塞技术,例如原子 FIFO。

详细信息
参数
stream
userData
传递给 AAudioStreamBuilder_setCallback() 的同一地址
audioData
指向音频数据的指针
numFrames
要处理的帧数,可能变化
返回值
AAUDIO_CALLBACK_RESULT_*

AAudioStream_errorCallback

aaudio/AAudio.h 中声明
void(* AAudioStream_errorCallback)(AAudioStream *_Nonnull stream, void *_Nullable userData, aaudio_result_t error)

传递给 AAudioStreamBuilder_setErrorCallback() 的回调函数原型。

以下函数不得从错误回调中调用

以下函数可以在错误回调中调用

详细信息
参数
stream
userData
传递给 AAudioStreamBuilder_setErrorCallback() 的同一地址
error
AAUDIO_ERROR_* 值。

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
返回值
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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
stream
指向接收新流引用的变量的指针
返回值
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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
capturePolicy
期望的拒绝被捕获的级别。

AAudioStreamBuilder_setAttributionTag

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setAttributionTag(
  AAudioStreamBuilder *_Nonnull builder,
  const char *_Nonnull attributionTag
)

声明创建流的上下文的归因标签。

这通常是

Context#getAttributionTag() 
.

如果您不调用此函数,默认值为 null。

从 API 级别 31 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
attributionTag
调用上下文的 attributionTag。

AAudioStreamBuilder_setBufferCapacityInFrames

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setBufferCapacityInFrames(
  AAudioStreamBuilder *_Nonnull builder,
  int32_t numFrames
)

设置请求的缓冲区容量(以帧为单位)。

最终的 AAudioStream 容量可能不同,但可能至少有这么大。

如果您不调用此函数,默认值为 AAUDIO_UNSPECIFIED

从 API 级别 26 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
numFrames
期望的以帧为单位的缓冲区容量或 AAUDIO_UNSPECIFIED

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
channelCount
期望的通道数。

AAudioStreamBuilder_setChannelMask

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setChannelMask(
  AAudioStreamBuilder *_Nonnull builder,
  aaudio_channel_mask_t channelMask
)

设置流的音频通道掩码。

如果您不调用此函数,默认值为 AAUDIO_UNSPECIFIED。如果通道掩码和通道数均未设置,则在流打开时将选择立体声。打开具有未指定值的流后,应用必须查询实际值,该值可能因设备而异。

如果指定了确切值,则打开的流将使用该值。如果无法使用指定值打开流,则打开将失败。

由于此处提供的通道掩码的相应通道数可能与 AAudioStreamBuilder_setChannelCountAAudioStreamBuilder_setSamplesPerFrame 中使用的通道数不同,因此如果同时调用此函数和 AAudioStreamBuilder_setChannelCountAAudioStreamBuilder_setSamplesPerFrame,将以最后调用的函数为准。

自 API 级别 32 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
channelMask
期望的音频通道掩码。

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
contentType
音频数据类型,例如 AAUDIO_CONTENT_TYPE_SPEECH

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
callback
指向将处理音频数据的函数的指针。
userData
指向将传递给回调函数的应用数据结构的指针。

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
deviceId
设备标识符或 AAUDIO_UNSPECIFIED

AAudioStreamBuilder_setDirection

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setDirection(
  AAudioStreamBuilder *_Nonnull builder,
  aaudio_direction_t direction
)

请求流的方向。

如果您不调用此函数,默认值为 AAUDIO_DIRECTION_OUTPUT

从 API 级别 26 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
direction

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
callback
指向发生错误时将调用的函数的指针。
userData
指向将传递给回调函数的应用数据结构的指针。

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
format

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
numFrames
期望的以帧为单位的缓冲区大小或 AAUDIO_UNSPECIFIED

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
inputPreset
期望的录音配置

AAudioStreamBuilder_setIsContentSpatialized

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setIsContentSpatialized(
  AAudioStreamBuilder *_Nonnull builder,
  bool isSpatialized
)

指定此输出流的音频数据是否已为空间化进行处理。

如果流已进行空间化处理,将其设置为 true 将防止在会空间化音频数据的平台上出现双重处理等问题。

自 API 级别 32 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
isSpatialized
如果内容已针对双耳或跨耳空间渲染进行处理,则为 true,否则为 false。

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
packageName
调用应用的 packageName。

AAudioStreamBuilder_setPerformanceMode

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setPerformanceMode(
  AAudioStreamBuilder *_Nonnull builder,
  aaudio_performance_mode_t mode
)

设置请求的性能模式。

支持的模式有 AAUDIO_PERFORMANCE_MODE_NONEAAUDIO_PERFORMANCE_MODE_POWER_SAVING * 和 AAUDIO_PERFORMANCE_MODE_LOW_LATENCY

如果您不调用此函数,默认值为 AAUDIO_PERFORMANCE_MODE_NONE

您可能无法获得请求的模式。您可以调用 AAudioStream_getPerformanceMode() 来查明流的最终模式。

从 API 级别 26 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
mode
期望的性能模式,例如 AAUDIO_PERFORMANCE_MODE_LOW_LATENCY

AAudioStreamBuilder_setPrivacySensitive

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setPrivacySensitive(
  AAudioStreamBuilder *_Nonnull builder,
  bool privacySensitive
)

指示此输入流是否必须标记为隐私敏感。

当为 true 时,此输入流是隐私敏感的,不允许任何并发捕获。

默认情况下此选项关闭(false),除非输入预设为 AAUDIO_INPUT_PRESET_VOICE_COMMUNICATIONAAUDIO_INPUT_PRESET_CAMCORDER

明确设置时,始终优先于输入预设的默认值。

仅当流方向为 AAUDIO_DIRECTION_INPUT 时相关。

在 API 级别 30 中添加。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
privacySensitive
如果必须将从此流捕获的内容标记为隐私敏感,则为 true,否则为 false。

AAudioStreamBuilder_setSampleRate

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setSampleRate(
  AAudioStreamBuilder *_Nonnull builder,
  int32_t sampleRate
)

请求采样率(赫兹)。

如果您不调用此函数,默认值为 AAUDIO_UNSPECIFIED。然后在流打开时选择最佳值。打开具有未指定值的流后,应用必须查询实际值,该值可能因设备而异。

如果指定了确切值,则打开的流将使用该值。如果无法使用指定值打开流,则打开将失败。

从 API 级别 26 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
sampleRate
帧每秒。常见速率包括 44100 和 48000 Hz。

AAudioStreamBuilder_setSamplesPerFrame

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setSamplesPerFrame(
  AAudioStreamBuilder *_Nonnull builder,
  int32_t samplesPerFrame
)

AAudioStreamBuilder_setChannelCount() 相同。

从 API 级别 26 开始可用。

已弃用。 使用 AAudioStreamBuilder_setChannelCount

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
samplesPerFrame
一帧中的样本数。

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
sessionId
已分配的 sessionID 或 AAUDIO_SESSION_ID_ALLOCATE

AAudioStreamBuilder_setSharingMode

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setSharingMode(
  AAudioStreamBuilder *_Nonnull builder,
  aaudio_sharing_mode_t sharingMode
)

请求设备共享模式。

如果您不调用此函数,默认值为 AAUDIO_SHARING_MODE_SHARED

请求的共享模式可能不可用。应用可以在流打开后查询实际模式。

从 API 级别 26 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
sharingMode

AAudioStreamBuilder_setSpatializationBehavior

aaudio/AAudio.h 中声明
AAUDIO_API void AAudioStreamBuilder_setSpatializationBehavior(
  AAudioStreamBuilder *_Nonnull builder,
  aaudio_spatialization_behavior_t spatializationBehavior
)

设置影响是否使用空间化的行为。

当支持并启用空间化效果时,AAudio 系统将使用此信息来选择流是否经过空间化效果处理。

自 API 级别 32 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
spatializationBehavior
期望的空间化行为,例如 AAUDIO_SPATIALIZATION_BEHAVIOR_AUTO

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 开始可用。

详细信息
参数
builder
AAudio_createStreamBuilder() 提供的引用
usage
期望的用途,例如 AAUDIO_USAGE_GAME

AAudioStream_close

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_result_t AAudioStream_close(
  AAudioStream *_Nonnull stream
)

删除与 AAudioStreamBuilder_openStream() 创建的流相关的内部数据结构。

如果尚未调用 AAudioStream_release(),则将自动调用它。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
AAUDIO_OK 或负值错误。

AAudioStream_getAllowedCapturePolicy

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_allowed_capture_policy_t AAudioStream_getAllowedCapturePolicy(
  AAudioStream *_Nonnull stream
)

返回确定音频是否可由其他应用或系统捕获的策略。

自 API 级别 29 开始可用。

详细信息
参数
stream
返回值
允许的捕获策略,例如 AAUDIO_ALLOW_CAPTURE_BY_ALL

AAudioStream_getBufferCapacityInFrames

aaudio/AAudio.h 中声明
AAUDIO_API int32_t AAudioStream_getBufferCapacityInFrames(
  AAudioStream *_Nonnull stream
)

查询最大缓冲区容量(以帧为单位)。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
以帧为单位的缓冲区容量

AAudioStream_getBufferSizeInFrames

aaudio/AAudio.h 中声明
AAUDIO_API int32_t AAudioStream_getBufferSizeInFrames(
  AAudioStream *_Nonnull stream
)

查询可以在不阻塞的情况下填充的最大帧数。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
以帧为单位的缓冲区大小。

AAudioStream_getChannelCount

aaudio/AAudio.h 中声明
AAUDIO_API int32_t AAudioStream_getChannelCount(
  AAudioStream *_Nonnull stream
)

一个流包含一个或多个数据通道。

一帧将包含每个通道的一个样本。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
流的实际通道数

AAudioStream_getChannelMask

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_channel_mask_t AAudioStream_getChannelMask(
  AAudioStream *_Nonnull stream
)

返回流的通道掩码。

这将是使用 AAudioStreamBuilder_setChannelMask 设置的掩码,否则为 AAUDIO_UNSPECIFIED

自 API 级别 32 开始可用。

详细信息
参数
stream
返回值
实际通道掩码

AAudioStream_getContentType

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_content_type_t AAudioStream_getContentType(
  AAudioStream *_Nonnull stream
)

返回流的内容类型。

自 API 级别 28 开始可用。

详细信息
参数
stream
返回值
内容类型,例如 AAUDIO_CONTENT_TYPE_MUSIC

AAudioStream_getDeviceId

aaudio/AAudio.h 中声明
AAUDIO_API int32_t AAudioStream_getDeviceId(
  AAudioStream *_Nonnull stream
)

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
实际设备 ID

AAudioStream_getDirection

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_direction_t AAudioStream_getDirection(
  AAudioStream *_Nonnull stream
)

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
direction

AAudioStream_getFormat

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_format_t AAudioStream_getFormat(
  AAudioStream *_Nonnull stream
)

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
流的实际数据格式

AAudioStream_getFramesPerBurst

aaudio/AAudio.h 中声明
AAUDIO_API int32_t AAudioStream_getFramesPerBurst(
  AAudioStream *_Nonnull stream
)

查询应用为获得最佳性能应一次读取或写入的帧数。

如果应用写入不同数量的帧,这是可以接受的。但缓冲区大小可能需要更大,以避免下溢或溢出。

请注意,这可能与实际设备突发大小匹配或不匹配。对于某些端点,突发大小可以动态变化。但这往往是延迟较高的设备。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
突发大小

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 开始可用。

详细信息
参数
stream
返回值
以帧为单位的回调缓冲区大小或 AAUDIO_UNSPECIFIED

AAudioStream_getFramesRead

aaudio/AAudio.h 中声明
AAUDIO_API int64_t AAudioStream_getFramesRead(
  AAudioStream *_Nonnull stream
)

返回自流创建以来已读取的帧数。

对于输出流,此值由端点推进。对于输入流,此值由调用 read() 的应用或数据回调推进。

帧位置单调递增。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
已读取的帧数

AAudioStream_getFramesWritten

aaudio/AAudio.h 中声明
AAUDIO_API int64_t AAudioStream_getFramesWritten(
  AAudioStream *_Nonnull stream
)

返回自流创建以来已写入的帧数。

对于输出流,此值由调用 write() 的应用或数据回调推进。对于输入流,此值由端点推进。

帧位置单调递增。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
已写入的帧数

AAudioStream_getHardwareChannelCount

aaudio/AAudio.h 中声明
AAUDIO_API int32_t AAudioStream_getHardwareChannelCount(
  AAudioStream *_Nonnull stream
)

音频框架中可能存在通道转换。

流构建器中设置的通道数或通道掩码可能不是硬件中使用的实际通道数。

此函数返回硬件使用的通道数。

如果 AAudioStreamBuilder_openStream() 返回 AAUDIO_OK,结果应始终有效。

从 API 级别 34 开始可用。

详细信息
参数
stream
返回值
底层硬件的实际通道数

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 开始可用。

详细信息
参数
stream
返回值
底层硬件的实际数据格式。

AAudioStream_getHardwareSampleRate

aaudio/AAudio.h 中声明
AAUDIO_API int32_t AAudioStream_getHardwareSampleRate(
  AAudioStream *_Nonnull stream
)

音频框架中可能存在采样率转换。

流构建器中设置的采样率可能不是硬件中使用的实际采样率。

此函数以赫兹为单位返回硬件使用的采样率。

如果 AAudioStreamBuilder_openStream() 返回 AAUDIO_OK,结果应始终有效。

从 API 级别 34 开始可用。

详细信息
参数
stream
返回值
底层硬件的实际采样率

AAudioStream_getInputPreset

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_input_preset_t AAudioStream_getInputPreset(
  AAudioStream *_Nonnull stream
)

返回流的输入预设。

自 API 级别 28 开始可用。

详细信息
参数
stream
返回值
输入预设,例如 AAUDIO_INPUT_PRESET_CAMCORDER

AAudioStream_getPerformanceMode

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_performance_mode_t AAudioStream_getPerformanceMode(
  AAudioStream *_Nonnull stream
)

获取流使用的性能模式。

从 API 级别 26 开始可用。

详细信息
参数
stream

AAudioStream_getSampleRate

aaudio/AAudio.h 中声明
AAUDIO_API int32_t AAudioStream_getSampleRate(
  AAudioStream *_Nonnull stream
)

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
流的实际采样率

AAudioStream_getSamplesPerFrame

aaudio/AAudio.h 中声明
AAUDIO_API int32_t AAudioStream_getSamplesPerFrame(
  AAudioStream *_Nonnull stream
)

AAudioStream_getChannelCount() 相同。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
帧的实际样本数

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 开始可用。

详细信息
参数
stream
返回值

AAudioStream_getSharingMode

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_sharing_mode_t AAudioStream_getSharingMode(
  AAudioStream *_Nonnull stream
)

提供实际共享模式。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
实际共享模式

AAudioStream_getSpatializationBehavior

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_spatialization_behavior_t AAudioStream_getSpatializationBehavior(
  AAudioStream *_Nonnull stream
)

返回流的空间化行为。

如果未明确设置,将返回默认的 AAUDIO_SPATIALIZATION_BEHAVIOR_AUTO 行为。

自 API 级别 32 开始可用。

详细信息
参数
stream
返回值
空间化行为,例如 AAUDIO_SPATIALIZATION_BEHAVIOR_AUTO

AAudioStream_getState

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_stream_state_t AAudioStream_getState(
  AAudioStream *_Nonnull stream
)

查询客户端的当前状态,例如。

AAUDIO_STREAM_STATE_PAUSING

此函数将立即返回状态而不更新状态。如果您想根据服务器状态更新客户端状态,请调用 AAudioStream_waitForStateChange(),并将 currentState 设置为 AAUDIO_STREAM_STATE_UNKNOWN,超时时间为零。

从 API 级别 26 开始可用。

详细信息
参数
stream

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 开始可用。

详细信息
参数
stream
clockid
CLOCK_MONOTONIC 或 CLOCK_BOOTTIME
framePosition
指向接收位置的变量的指针
timeNanoseconds
指向接收时间的变量的指针
返回值
AAUDIO_OK 或负值错误

AAudioStream_getUsage

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_usage_t AAudioStream_getUsage(
  AAudioStream *_Nonnull stream
)

返回流的用例。

自 API 级别 28 开始可用。

详细信息
参数
stream
返回值
已读取的帧数

AAudioStream_getXRunCount

aaudio/AAudio.h 中声明
AAUDIO_API int32_t AAudioStream_getXRunCount(
  AAudioStream *_Nonnull stream
)

XRun 是 Underrun 或 Overrun。

播放期间,如果未及时写入流且系统缺少有效数据,将发生下溢。录音期间,如果未及时读取流且没有地方放置传入数据,将发生溢出,因此数据会被丢弃。

下溢或溢出可能导致可听见的“爆音”或“毛刺”。

请注意,某些输入设备可能不支持此函数。在这种情况下,始终返回 0。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
下溢或溢出计数

AAudioStream_isContentSpatialized

aaudio/AAudio.h 中声明
AAUDIO_API bool AAudioStream_isContentSpatialized(
  AAudioStream *_Nonnull stream
)

返回流的内容是否已空间化。

自 API 级别 32 开始可用。

详细信息
参数
stream
返回值
如果内容已空间化,则为 true

AAudioStream_isPrivacySensitive

aaudio/AAudio.h 中声明
AAUDIO_API bool AAudioStream_isPrivacySensitive(
  AAudioStream *_Nonnull stream
)

返回此输入流是否标记为隐私敏感。

请参阅 AAudioStreamBuilder_setPrivacySensitive()

在 API 级别 30 中添加。

详细信息
参数
stream
返回值
如果隐私敏感,则为 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 开始可用。

详细信息
参数
stream
使用 AAudioStreamBuilder_openStream() 创建的流。
buffer
第一个样本的地址。
numFrames
要读取的帧数。只写入完整的帧。
timeoutNanoseconds
等待完成的最大纳秒数。
返回值
实际读取的帧数或负值错误。

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 开始可用。

详细信息
参数
stream
返回值
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_FLUSHINGAAUDIO_STREAM_STATE_FLUSHED 状态。

对于输入流,此函数将返回 AAUDIO_ERROR_UNIMPLEMENTED

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
AAUDIO_OK 或负值错误。

AAudioStream_requestPause

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_result_t AAudioStream_requestPause(
  AAudioStream *_Nonnull stream
)

异步请求流暂停。

暂停流将冻结数据流但不会清空任何缓冲区。使用 AAudioStream_requestStart() 在暂停后恢复播放。调用此函数后,状态将处于 AAUDIO_STREAM_STATE_PAUSINGAAUDIO_STREAM_STATE_PAUSED 状态。

对于输入流,此函数将返回 AAUDIO_ERROR_UNIMPLEMENTED。对于输入流,请使用 AAudioStream_requestStop()

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
AAUDIO_OK 或负值错误。

AAudioStream_requestStart

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_result_t AAudioStream_requestStart(
  AAudioStream *_Nonnull stream
)

异步请求开始播放流。

对于输出流,在开始前应向流写入数据以填充缓冲区。否则将发生下溢。调用此函数后,状态将处于 AAUDIO_STREAM_STATE_STARTINGAAUDIO_STREAM_STATE_STARTED 状态。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
AAUDIO_OK 或负值错误。

AAudioStream_requestStop

aaudio/AAudio.h 中声明
AAUDIO_API aaudio_result_t AAudioStream_requestStop(
  AAudioStream *_Nonnull stream
)

异步请求流停止。

流将在当前所有缓冲数据播放完毕后停止。调用此函数后,状态将处于 AAUDIO_STREAM_STATE_STOPPINGAAUDIO_STREAM_STATE_STOPPED 状态。

从 API 级别 26 开始可用。

详细信息
参数
stream
返回值
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 开始可用。

详细信息
参数
stream
numFrames
无需阻塞即可填充的请求帧数
返回值
以帧为单位的实际缓冲区大小或负值错误

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 开始可用。

详细信息
参数
stream
inputState
我们想要避免的状态。
nextState
指向将设置为新状态的变量的指针。
timeoutNanoseconds
等待完成的最大纳秒数。
返回值
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 开始可用。

详细信息
参数
stream
使用 AAudioStreamBuilder_openStream() 创建的流。
buffer
第一个样本的地址。
numFrames
要写入的帧数。只写入完整的帧。
timeoutNanoseconds
等待完成的最大纳秒数。
返回值
实际写入的帧数或负值错误。

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 开始可用。