藍芽音樂之歌詞同步

壞小子VP發表於2020-11-02

藍芽音樂之歌詞同步

在這裡插入圖片描述

旋律成就經典,歌詞昇華曲目,歌詞作為最能體現一首歌曲深度的點,藍芽音樂必然也少不了,本期分享就和大家聊聊藍芽音樂歌詞同步的故事。

藍芽音樂歌詞都是從TG端(手機)的音樂播放器通過藍芽技術傳輸到CT端的,因此保證音樂播放器開啟該功能才能正確傳輸歌詞。日常生活中常見的的幾大音樂播放器的設定中都有該功能開關。

常見的獲取歌曲資訊的AVRCP指令就如下兩條,詳情參考《藍芽音樂之AVRCP常用指令介紹》。

  1. AVRCP Get Element Attributes(控制通道)
  2. 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
在這裡插入圖片描述

相關文章