本文主要是介绍蓝牙音频传输协议(A2DP)-绝对音量笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 前言
- 一、A2DP中的角色介绍
- 二、绝对音量机制原理
- 1.判断对端设备是否支持绝对音量
- 2.音量等级介绍
- 3.绝对音量交互流程
- 三、绝对音量机制应用-BES2500IU原生代码示例
- 总结
前言
绝对音量是什么意思?
绝对音量(Absolute volume)是指在蓝牙音频传输中,设备之间通过协议来协商音量控制的方式。传统上,音量控制是由音频源设备(如手机、电脑等)来控制,音频接收设备(如耳机、扬声器等)只是根据音频源设备发送的音量指令来调整音量大小。但是,这种方式存在一些问题,例如不同的设备音量范围不同,无法实现设备之间的统一音量控制等。
为了解决这些问题,蓝牙SIG(Bluetooth Special Interest Group)提出了绝对音量协议,通过该协议,音频源设备和音频接收设备可以互相通信,协商并同步音量控制,从而实现设备之间的统一音量控制。绝对音量协议可以确保不同设备的音量控制方式相同,使得用户可以在不同设备之间无缝切换,同时也提高了音频传输的质量和稳定性
一、A2DP中的角色介绍
在A2DP(Advanced Audio Distribution Profile)协议中,有两个重要的角色:CT端和TG端,分别代表连接的主设备和从设备。
CT端(Source):CT端是指连接蓝牙音频源设备(如手机、电脑等)的主设备。CT端主要负责音频数据的传输和控制,包括音频数据的编码、传输和解码等。
TG端(Sink):TG端是指连接蓝牙音频接收设备(如耳机、扬声器等)的从设备。TG端主要负责音频数据的接收和播放,包括音频数据的解码和输出等。
在A2DP协议中,CT端和TG端通过蓝牙进行连接,并通过协议进行音频数据的传输和控制。CT端可以向TG端发送音频数据和控制指令,如音量控制、播放控制等。TG端则接收音频数据并进行解码和播放。通过A2DP协议,用户可以通过蓝牙连接手机、电脑等音频源设备和耳机、扬声器等音频接收设备,实现无线音频传输和控制。
二、绝对音量机制原理
1.判断对端设备是否支持绝对音量
以手机为例:
1.手机端先看AVDTP协议是否支持,从空中包看
如下图:与耳机建立连接时,手机端会通过SDP服务查询当前耳机是否支持绝对音量功能
Category 2: 官方解释是用于定义视频监视器或音频放大器的基本操作。
简单来讲,设备的基本操作,包括设备的开关、音量控制、亮度调节等都是由它决定是否支持
2.手机端看有无指令(set Absolute volume)交互来判断是否支持,从空中包看
注:不支持绝对音量设备 不会有指令下发
2.音量等级介绍
绝对音量用一个八位字节表示。顶部位(第7位)是为将来添加(RFD)保留的。
绝对音量的值以最大值的百分比指定。0x0表示0%。0x7F对应100%。对应蓝牙等级设置会以x%通知给到TG端设备。但是在实际的项目运用中,例如手机和耳机设备,一般都是只支持16or15个音量等级,这里就会涉及到一个音量换算的问题,原理都是把127个音量等级划分成对应的16阶or15阶音量百分比,以耳机项目示例(这里是将音量等级划分成16阶):
3.绝对音量交互流程
SetAbsoluteVolume:SetAbsoluteVolume指令用于设置蓝牙设备的绝对音量。在A2DP协议中,传统的音量控制是由音频源设备(如手机、电脑等)来控制,音频接收设备(如耳机、扬声器等)只是根据音频源设备发送的音量指令来调整音量大小。而通过SetAbsoluteVolume指令,音频源设备可以向音频接收设备发送音量值,并要求设备将其设置为绝对音量。这样就可以实现设备之间的统一音量控制。
RegisterNotification:RegisterNotification指令用于注册事件通知。在A2DP协议中,音频源设备和音频接收设备可以通过RegisterNotification指令来注册一些事件,如音量变化、播放状态变化等。当这些事件发生时,音频接收设备会向音频源设备发送通知消息,以便音频源设备可以及时地做出相应的处理。
CT端与TG端消息交互如下:
三、绝对音量机制应用-BES2500IU原生代码示例
a.收到AVRCP CMD — EVENT_VOLUME_CHANGED
b.耳机端更新音量等级参数
根据CT端下发音量等级参数换算成对应的15阶或16阶耳机本地音量等级
c.根据本地音量等级 耳机更新本地音量衰减参数
HFP和A2DP使用不同音量衰减参数
总结
具体的绝对音量指令对应的功能显示,大家可以使用ellisys或者frontline等hci_log分析工具自行对应查看。对没有提及到的一些feature,有兴趣的兄弟可以去A2DP协议中自行查找,这一篇文章只是我在项目中碰到的绝对音量问题时的一些理解,希望对大家会有一些帮助,也欢迎大家指出问题。
————————————————
版权声明:本文为CSDN博主「无敌幸运七」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42176891/article/details/127284000
这篇关于蓝牙音频传输协议(A2DP)-绝对音量笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!