蓝牙音乐播放调试
📎 原始文档:https://www.kdocs.cn/l/ccr2V7XWcoJ6 蓝牙音乐播放调试
问题描述:手表连上经典蓝牙,手机播放音乐,手表没声音出来
常见原因:
一、硬件问题
先检查一下喇叭的硬件电路是否有问题,是否可以正常出声。可以利用sdk中的提示音功能,通话功能来验证。即开机会有开机提示音,通话时喇叭会有声音。如有开发板也可直接将喇叭置于开发板上进行验证喇叭是否正常。但如果在自己的硬件电路环境上通话也没声音,那优先排查电路是否有虚焊或者设计缺陷。
- 软件问题 如果硬件上确定喇叭能出声音,那么应该就是软件中的配置不对,或者代码误操作导致。
- 软件配置
- 播放模式配置 Sdk中有两种播放模式。一种是手表音乐,一种是手机音乐。如下图2.1.1。手表音乐就是本地播放,插sd卡播放,以及做发射器,连接蓝牙耳机播放;手机音乐才是播放蓝牙音乐。值得注意的是,只有当手表处于手机音乐模式的时候,手机连接手表的经典蓝牙播放音乐,声音才会从手表端出来。初始化会默认设置为手表音乐,如图2.2.2。

图2.1.1
图2.1.2
2. 蓝牙链路的连接 音乐的数据传输是通过a2dp协议进行传输,所以要首先要保证固件端是支持a2dp协议的。
图2.1.2
2. 代码调试
(1)检查a2dp是否有连上

图2.2.1
播放蓝牙音乐首先要保证a2dp有连上,可在图2.2.1中对应位置添加下打印,a2dp连接上会有以上事件。如果没有该打印,就要考虑是不是手机没切链路过来,或者说固件没开启,可看看软件配置中的(2)。
2. 检查是否有切换到手机音乐 如图2.2.2是sdk中切换到手机音乐模式的代码,需要注意的是两个函数,一个是bt_set_music_device_style,这个是设置出声设备的函数,本地播放需要设置为1,手机音乐需要设置为2;另一个函数是bt_set_a2dp_en_status,这个是手表控制使能a2dp的函数,他的作用不是直接控制a2dp的连接,而是相当于一个a2dp的标志位,当手机有推音乐数据过来时,这个标志位如果是0,那么就不会走音频解码那部分,会直接return,也会导致出不了声音。
图2.2.2
- 检查播放音乐时是否有“BT_STATUS_A2DP_MEDIA_START”打印 手机端点击开始播放音乐时,检查是否有BT_STATUS_A2DP_MEDIA_START事件的打印出现,此打印会出现在手机端刚点击播放音乐的时候,所以可能有时打印太快会没看到,可以保存打印搜索。如果有这个打印,配置应该都是正常的了,如果硬件正常,应该是会有声音出来。如果没有该打印,就要去检查一下第一项和第二项是否有完整,并且自己有没在代码的其他区域,把bt_set_a2dp_en_status设置为了0。

图2.2.3