AudioManagerA2dpSink
AudioManagerA2dpSink模块提供A2DP(Advanced Audio Distribution Profile)Sink角色的音频管理功能,包括A2DP Sink音频流的创建与销毁、音效算法参数配置与开关控制、语音增强算法参数的设置与获取、音频格式配置以及A2DP蓝牙回调注册。
头文件清单
#include "middleware/services/media/foundation/service/a2dp_sink_service/include/a2dp_sink_service.h"
接口清单
| 接口名称 | 功能简述 |
|---|---|
| AudioManagerA2dpSinkSetAefParam | 设置A2DP sink通道音效算法参数 |
| AudioManagerA2dpSinkSetAefEnable | 设置A2DP sink通道音效算法开关 |
| AudioManagerSetSeaParam | 设置语音增强算法参数 |
| AudioManagerGetSeaParam | 获取语音增强算法参数 |
| AudioManagerA2dpSinkSetParam | 设置A2DP sink通道音频格式配置 |
| AudioManagerA2dpSinkCreate | 创建A2DP sink音频流 |
| AudioManagerA2dpSinkDestroy | 销毁A2DP sink音频流 |
| AudioManagerA2dpSinkRegistCallback | 注册A2DP蓝牙回调 |
Functions
AudioManagerA2dpSinkSetAefParam
头文件清单
#include "middleware/services/media/foundation/service/a2dp_sink_service/include/a2dp_sink_service.h"
功能说明
- 设置A2DP sink通道音效算法参数
- 通过音效算法类型索引,将参数数据写入音频输出流
- 参数通过前缀拼接后传递至AudioStreamOut进行配置
前置条件
- A2DP sink音频流已通过AudioManagerA2dpSinkCreate()创建完成,且内部AudioStreamOut句柄已初始化
- 入参param不为NULL,且指向的内存空间已申请成功,长度不小于入参length规定值
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| effectType | int32_t | 音效算法类型 | 参见uapi_aef_type枚举值 |
| param | const char * | 音效算法参数指针 | 不为NULL |
| length | uint32_t | 音效算法参数长度 | 大于0 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 设置成功 | 音效算法参数设置成功 |
| -1 | 设置失败 | param为NULL、AudioStreamOut句柄为NULL、内存分配失败或参数写入失败 |
参考案例
AudioManagerA2dpSinkSetAefEnable
头文件清单
#include "middleware/services/media/foundation/service/a2dp_sink_service/include/a2dp_sink_service.h"
功能说明
- 设置A2DP sink通道音效算法开关
- 通过音效算法类型索引和使能标志,控制音效算法的启停
- 在播放音频前,应用通过此接口控制音效算法的开启与关闭
前置条件
- A2DP sink音频流已通过AudioManagerA2dpSinkCreate()创建完成,且内部AudioStreamOut句柄已初始化
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| effectType | int32_t | 音效算法类型 | 参见uapi_aef_type枚举值 |
| enable | bool | 音效算法使能开关 | true:启用;false:禁用 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 设置成功 | 音效开关设置成功 |
| -1 | 设置失败 | AudioStreamOut句柄为NULL或参数写入失败 |
参考案例
AudioManagerSetSeaParam
头文件清单
#include "middleware/services/media/foundation/service/a2dp_sink_service/include/a2dp_sink_service.h"
功能说明
- 设置语音增强算法(SEA)参数
- 将SEA参数数据写入音频管理器进行配置
- 用于配置语音增强算法的相关参数
前置条件
- 音频管理器已初始化完成
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| seaParam | const uint8_t * | SEA算法参数指针 | 不为NULL |
| len | uint16_t | SEA算法参数长度 | 大于0 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 设置成功 | SEA参数设置成功 |
| -1 | 设置失败 | 参数设置失败 |
AudioManagerGetSeaParam
头文件清单
#include "middleware/services/media/foundation/service/a2dp_sink_service/include/a2dp_sink_service.h"
功能说明
- 获取语音增强算法(SEA)参数
- 从音频管理器读取当前SEA算法参数数据
- 用于读取当前语音增强算法的配置参数
前置条件
- 音频管理器已初始化完成
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| seaParam | uint8_t * | SEA算法参数输出缓冲区 | 不为NULL,缓冲区长度不小于len |
| len | uint16_t | SEA算法参数长度 | 大于0 |
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| seaParam | uint8_t * | 当前SEA算法参数数据 |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 获取成功 | SEA参数获取成功 |
| -1 | 获取失败 | 参数获取失败 |
AudioManagerA2dpSinkSetParam
头文件清单
#include "middleware/services/media/foundation/service/a2dp_sink_service/include/a2dp_sink_service.h"
功能说明
- 设置A2DP sink通道音频格式配置参数
- 配置音频编解码格式、采样率、通道数等音频流参数
- 配置完成后,内部自动设置流类型为AUDIO_STREAM_A2DP_MUSIC、链路方向为AUDIO_DOWN_LINK、位宽为BIT_WIDTH_16
前置条件
- A2DP sink音频流尚未创建或已销毁,在AudioManagerA2dpSinkCreate()之前调用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| config | AudioFormatConfig | 音频格式配置 | - |
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 设置成功 | 音频格式配置设置成功 |
参考案例
AudioManagerA2dpSinkCreate
头文件清单
#include "middleware/services/media/foundation/service/a2dp_sink_service/include/a2dp_sink_service.h"
功能说明
- 创建A2DP sink音频流,初始化A2DP sink上下文并启动音频处理线程
- 内部完成音频焦点申请、AudioStreamOut初始化及音频播放启动
- 重复调用时返回成功,不重复创建
前置条件
- 已通过AudioManagerA2dpSinkSetParam()设置音频格式配置
- 已通过AudioManagerA2dpSinkRegistCallback()注册A2DP蓝牙回调
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 创建成功 | A2DP sink音频流创建并启动成功 |
| -1 | 创建失败 | 上下文初始化失败或线程创建失败 |
参考案例
AudioManagerA2dpSinkDestroy
头文件清单
#include "middleware/services/media/foundation/service/a2dp_sink_service/include/a2dp_sink_service.h"
功能说明
- 销毁A2DP sink音频流,停止音频播放并释放相关资源
- 内部发送停止信号,等待音频处理线程退出,释放互斥锁、条件变量及上下文内存
- 若A2DP sink上下文不存在,直接返回成功
前置条件
- A2DP sink音频流已通过AudioManagerA2dpSinkCreate()创建完成
返回值
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 0 | 销毁成功 | A2DP sink音频流销毁成功 |
参考案例
AudioManagerA2dpSinkRegistCallback
头文件清单
#include "middleware/services/media/foundation/service/a2dp_sink_service/include/a2dp_sink_service.h"
功能说明
- 注册A2DP蓝牙sink和source回调函数
- 内部创建状态互斥锁,注册A2DP sink连接状态和流状态回调,注册A2DP source连接状态和流状态回调
- 重复调用时直接返回,不重复注册
前置条件
- A2DP蓝牙协议栈已初始化
- 尚未调用过此接口(状态互斥锁未创建时才执行注册)
Structures
AudioFormatConfig
typedef struct {
AudioCodecFormat audioFormat;
uint32_t sampleRate;
uint32_t channelCount;
} AudioFormatConfig;
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| audioFormat | AudioCodecFormat | 音频编解码格式 |
| sampleRate | uint32_t | 采样率 |
| channelCount | uint32_t | 通道数 |
Enumerations
AudioCodecFormat
typedef enum {
AUDIO_DEFAULT = 0,
PCM = 1,
AAC_LC = 2,
AAC_HE_V1 = 3,
AAC_HE_V2 = 4,
AAC_LD = 5,
AAC_ELD = 6,
G711A = 7,
G711U = 8,
G726 = 9,
OPUS = 10,
FLAC = 11,
VORBIS = 12,
APE = 13,
MP3 = 14,
mSBC = 15,
SILK = 16,
SBC = 17,
L2HC = 18,
AMR_WB = 19,
LHDC = 20,
LDAC = 21,
L2HC_VOICE = 22,
AUDIO_FORMAT_MAX,
FORMAT_INVALID = 0xFFFFFFFF,
} AudioCodecFormat;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| AUDIO_DEFAULT | 0 | 默认音频格式 |
| PCM | 1 | PCM格式 |
| AAC_LC | 2 | 高级音频编码低复杂度(AAC-LC) |
| AAC_HE_V1 | 3 | 高效高级音频编码(AAC-HE) |
| AAC_HE_V2 | 4 | AAC++或aacPlus v2 |
| AAC_LD | 5 | 高级音频编码低时延(AAC-LD) |
| AAC_ELD | 6 | 高级音频编码增强型低延迟(AAC-ELD) |
| G711A | 7 | G711A格式 |
| G711U | 8 | G711U格式 |
| G726 | 9 | G726格式 |
| OPUS | 10 | OPUS格式 |
| FLAC | 11 | FLAC格式 |
| VORBIS | 12 | VORBIS格式 |
| APE | 13 | APE格式 |
| MP3 | 14 | MP3格式 |
| mSBC | 15 | mSBC格式 |
| SILK | 16 | SILK格式 |
| SBC | 17 | SBC格式 |
| L2HC | 18 | L2HC格式 |
| AMR_WB | 19 | AMR_WB格式 |
| LHDC | 20 | LHDC格式 |
| LDAC | 21 | LDAC格式 |
| L2HC_VOICE | 22 | L2HC语音格式 |
| AUDIO_FORMAT_MAX | 23 | 格式最大值 |
| FORMAT_INVALID | 0xFFFFFFFF | 无效格式 |
uapi_aef_type
typedef enum {
UAPI_AEF_TYPE_NULL,
UAPI_AEF_TYPE_SWS,
UAPI_AEF_TYPE_SMARTPA,
UAPI_AEF_TYPE_WDRC,
UAPI_AEF_TYPE_AVC,
UAPI_AEF_TYPE_GEQ,
UAPI_AEF_TYPE_DRC,
UAPI_AEF_TYPE_PEQ,
UAPI_AEF_TYPE_AEF_PRE,
UAPI_AEF_TYPE_HVS,
UAPI_AEF_TYPE_CUSTOMER = 0x80,
UAPI_AEF_TYPE_MAX
} uapi_aef_type;
| 枚举成员 | 取值 | 描述 |
|---|---|---|
| UAPI_AEF_TYPE_NULL | 0 | 无效音效 |
| UAPI_AEF_TYPE_SWS | 1 | SWS音效 |
| UAPI_AEF_TYPE_SMARTPA | 2 | Smart PA音效 |
| UAPI_AEF_TYPE_WDRC | 3 | 助听WDRC音效 |
| UAPI_AEF_TYPE_AVC | 4 | 自动音量控制 |
| UAPI_AEF_TYPE_GEQ | 5 | GEQ音效 |
| UAPI_AEF_TYPE_DRC | 6 | 音频动态范围控制 |
| UAPI_AEF_TYPE_PEQ | 7 | PEQ音效 |
| UAPI_AEF_TYPE_AEF_PRE | 8 | AEF前处理音效 |
| UAPI_AEF_TYPE_HVS | 9 | HVS lite音效 |
| UAPI_AEF_TYPE_CUSTOMER | 0x80 | 客户自研音效 |
| UAPI_AEF_TYPE_MAX | 0x81 | 音效类型最大值 |