蓝牙耳机音量控制问题
蓝牙耳机音量控制问题
背景
之前测试提了一个蓝牙音量相关的BUG: 调节蓝牙耳机音量,系统音量不跟随变化,即耳机音量没有和系统音量同步;
虽然知道是绝对音量的问题,但不太清楚整个具体流程,特此记录下
分析与解决
音量调节的流程
音量调节的整个流程:
蓝牙
OS(数字音量)<-- --> 蓝牙耳机(数字音量+模拟音量)
在使用蓝牙耳机时,
调节OS上的音量
当调节OS上的音量时, 其调节的是数字音量,即调整了蓝牙传输的数字音频数据增益,从而使耳机听起来的音量有所变化调节蓝牙耳机上的音量
当调节蓝牙耳机上的音量时,一般是直接调节蓝牙芯片的数字音量,使DAC出来的音量发生变化,所以这种情况下一般不会对OS的音量有所影响。
蓝牙的绝对音量
如果在调节蓝牙耳机上的音量时,需要将耳机音量同步给OS系统该怎么办呢? 也是可以做的,蓝牙协议已经帮忙考虑到这一点了,即设置蓝牙的绝对音量,需要走AVRCP协议,并且主机和蓝牙耳机都要支持该协议
具体流程见下图:
首先,主机(OS)需向耳机注册音量变化的通知事件
耳机回复临时的响应
当用户调节耳机音量时,就会有音量变化的事件上报给主机(OS)
在Android手机的设置里一般都会有是否启用蓝牙绝对音量的选项
在Linux系统中,可能就需要bluez去操作了
参考
- Bluetooth Profile Specification– Audio/Video Remote Control (v1.6.2)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DD'Notes!
评论