蓝牙音乐歌词同步
蓝牙音乐之歌词同步
旋律成就经典,歌词升华曲目,歌词作为最能体现一首歌曲深度的点,蓝牙音乐必然也少不了,本期分享就和大家聊聊蓝牙音乐歌词同步的故事。
蓝牙音乐歌词都是从TG端(手机)的音乐播放器通过蓝牙技术传输到CT端的,因此保证音乐播放器打开该功能才能正确传输歌词。日常生活中常见的的几大音乐播放器的设置中都有该功能开关。
常见的获取歌曲信息的AVRCP指令就如下两条,详情参考《蓝牙音乐之AVRCP常用指令介绍》。
- AVRCP Get Element Attributes(控制通道)
- AVRCP Get Item Attributes(浏览通道)
这里着重分享下控制通道的这条歌曲信息获取命令,另一条浏览通道使用的命令大同小异。由于AVRCP协议规定了蓝牙连接设备两端的角色定位及以 “ 请求-回复 ” 为格式的命令传输方向,因此蓝牙耳机、车载蓝牙等设备作为CT,负责歌曲信息请求命令的发起者,相对应的手机等设备则为TG,回复这些命令。
安卓系统中 Avrcp.java 类作为TG角色,AvrcpControllerService.java 则作为CT角色,这两个类相互配合共同承担了AVRCP协议中定义的相关交互。
CT端触发 AVRCP Get Element Attributes 请求命令的时机基本上都是在TG端通知到CT端歌曲信息改变时才会主动获取,而通知的实现就得依赖 AVRCP Register Notification命令,CT端主动注册一个 Event = Track 的通知事件到TG,这样就能实现TG端Track事件改变及时通知到CT,CT再通过命令获取到歌曲信息变化的详细情况。
具体交互时序图如下图所示:
歌曲信息请求指令主要是获取如下字段的内容:
AVRC_MEDIA_ATTR_ID_COVER_ART 封面艺术字段只有在v1.6版本及以上的AVRCP协议上才支持,其他字段中比较重要的就是前三个了,分别表示:歌名(歌词)、歌手、专辑名。所以蓝牙音乐歌词同步的实现也就是需要获取到 AVRC_MEDIA_ATTR_ID_TITLE 字段所携带的内容。
因为只有这么几个字段来传输歌曲信息,所以在音乐播放器关闭蓝牙歌词同步时,TITLE字段内保存的就是歌名,但是开启蓝牙歌词同步后,TITLE字段内保存的就是歌词信息,即TITLE字段是复用的。从而CT端的蓝牙音乐应用需考虑到这样的情况正确处理TITLE中的内容。
下图截取了一小段HCI上的音乐歌曲信息交互,给大家更加直观的感受。
本篇蓝牙歌词同步的分享到这里就结束了,感兴趣的小伙伴欢迎私信留言一起讨论,共同学习,一起进步!
更多互联互通技术,欢迎关注微信公众号:Connectivity
上一篇: 生的希望》歌词
推荐阅读
-
这款让人脸红的双平台音乐同步应用:2人共享歌单,安卓和iOS都行,单身人士需谨慎体验哦...
-
Love C Language,Love C Language_HAO GIRLS_高品质在线听_Love C Language 歌词歌曲下载_酷狗音乐...
-
基于 Qt 的网络音乐播放器(V)实现歌词滚动显示
-
VUE 移动音乐 APP 学习[16]:播放器歌词显示开发
-
Android 超简单音乐播放器 (X) 歌词的实现
-
基于 Qt 的网络音乐播放器(V)实现歌词滚动显示
-
网易云音乐云盘存歌加歌词(解决双语歌词问题)
-
抓取网易云音乐某歌手的所有歌曲歌词 - 获取所有歌曲歌词
-
蓝牙音乐歌词同步
-
反应网易云音乐(实现唱片滚动和 lrc 歌词滚动效果)