以麒麟音樂為例,教你如何構(gòu)建專屬自己的音樂播放器
麒麟音樂是一款設(shè)計美觀、功能簡潔、支持多種音樂格式的音樂播放器。在播放本地音樂的同時,還可以根據(jù)用戶喜好、自定義歌單來對音樂進行分組。
除常規(guī)模式外,麒麟音樂還有小窗口模式來滿足用戶的不同需求。想知道麒麟音樂有哪些功能?小優(yōu)這就帶你了解,一款友好易用的音樂播放器是如何打造的。

圖1 麒麟音樂首頁
麒麟音樂主要功能及實現(xiàn):
01 歌單功能
默認歌單為我喜歡歌單,點擊收藏按鈕或者右鍵選擇“添加到我喜歡”來將歌曲添加到默認歌單中。點擊添加歌單圖標可以創(chuàng)建自定義歌單并對自定義歌單進行命名。
在歌單列表區(qū)域點擊鼠標右鍵,可以進行歌單播放、歌單重命名、刪除歌單等操作。

圖2 麒麟音樂歌單列表
02 播放功能
播放/暫停:點擊切換當(dāng)前歌曲的暫停/播放狀態(tài)。
上一首:播放當(dāng)前列表當(dāng)前播放順序的上一首歌曲。
下一首:播放當(dāng)前列表當(dāng)前播放順序的下一首歌曲。
音量:調(diào)整當(dāng)前播放的音量。
收藏:可以添加/刪除歌曲到“我喜歡”的列表。
播放順序:支持列表循環(huán)、單曲循環(huán)、隨機播放三種模式。
播放列表:歷史播放列表顯示播放歷史。
03 使用相關(guān)庫解析音頻文件
對于一個音樂播放器來說,對音頻文件進行解析,從而獲得音頻文件中包含的歌曲名、歌手、專輯名等種種信息,是非常重要的一步。麒麟音樂針對不同格式的音頻文件及不同類型的信息,使用 Taglib、FFmpeg 等多個第三方庫進行解析,避免了單一庫支持的格式不全以及部分信息解析不全的問題。歌曲信息解析完成后,會自動保存在數(shù)據(jù)庫中,方便歌單等模塊調(diào)用歌曲信息。
04 使用MPV播放音頻文件
麒麟音樂使用 mpv 播放音頻文件,支持大多數(shù)常見音頻格式。詳見以下列表:

圖3 麒麟音樂支持的音頻格式
除了正常播放歌曲外,還可以對歌曲進行跳轉(zhuǎn)播放,拖動進度條即可改變歌曲進度。
05 使用數(shù)據(jù)庫保存歌單及歌曲列表
麒麟音樂使用 SQLite 數(shù)據(jù)庫來保存歌單及歌曲信息,SQLite 是一款開源輕量級的數(shù)據(jù)庫軟件,不需要 server,可以集成在其他軟件中,非常適合嵌入式系統(tǒng)。
Qt5以上版本可以直接使用 SQLite。使用數(shù)據(jù)庫模塊時,必須要在項目的 pro 文件中添加:
QT += sql
在需要使用 SQL 的類定義中,引用相關(guān)頭文件。例如:
#include #include #include
QSqlDatabase 類提供了一個接口,用于通過連接訪問數(shù)據(jù)。QSqlDatabase 的一個實例表示連接。通過驅(qū)動程序 QSQLITE 類型和連接名稱 connectionName 提供對數(shù)據(jù)庫的連接及訪問,該驅(qū)動程序派生自 QSqlDriver。
QSqlQuery 類通過 exec() 成員函數(shù)來執(zhí)行 DML(數(shù)據(jù)操作語言)語句,如 SELECT、INSERT、UPDATE 和 DELETE,以及 DDL(數(shù)據(jù)定義語言)語句等。
QSqlQuery 類在發(fā)生錯誤時,提供了錯誤的相關(guān)信息。包括驅(qū)動信息 driverText(),數(shù)據(jù)庫信息 databaseText(),或者它們的綜合(text()方法獲?。?,也提供了 number()和 type()函數(shù),用于顯示錯誤數(shù)量與類別。錯誤可以通過 QSqlDatabase::lastError()、QSqlQuery::lastError()、模型的 lastError()函數(shù)三種方式獲取。
在增刪歌曲或增刪歌單時,都是通過對數(shù)據(jù)庫進行操作,然后反映到前端,前端與數(shù)據(jù)庫的分離,避免了很多異常錯誤情況。
06 使用Model/View 實現(xiàn)歌單及歌曲列表的顯示
麒麟音樂使用 Model/View 實現(xiàn)歌單及歌曲列表頁面的顯示。所以只需要關(guān)注更新 model 的部分,而不需要關(guān)心 view 該如何變化,因為當(dāng) model 改變了,所有關(guān)聯(lián)它的 view 都會得到相應(yīng)的更新。
在傳統(tǒng)的 Widgets 應(yīng)用程序中,Qt 并沒有將數(shù)據(jù)和窗口分開,顯然這樣的工作就留給了用戶。而 Qt 的 MVC 框架則是將界面與數(shù)據(jù)進行了隔離,View(視圖)負責(zé)展示數(shù)據(jù),Model(模型)負責(zé)管理數(shù)據(jù),Delegate(委托)負責(zé) View 和 Model 的交互。

圖4 麒麟音樂歌曲列表頁面
07 播放歷史功能實現(xiàn)
麒麟音樂通過播放歷史保存用戶的播放記錄,播放歷史中的歌曲也可以隨時點擊進行播放。
歌單或歌曲列表中的歌曲播放時,會自動加入播放歷史,播放歷史自身的歌曲播放時不會加入。

圖5 麒麟音樂播放歷史頁面
08 精簡模式
點擊標題欄中 mini 模式圖標可以進入 mini 窗口模式。mini 窗口默認左側(cè)顯示正在播放的歌曲名、專輯封面以及時間模塊,右側(cè)為收藏、播放順序圖標。
當(dāng)鼠標懸浮到 mini 窗口時,歌曲名和時間會隱藏,此時顯示上一首、播放/暫停、下一首、最大化和關(guān)閉圖標。

圖6 麒麟音樂 mini 模式窗口
以上就是對麒麟音樂的一些介紹,想了解有關(guān)麒麟音樂更多內(nèi)容或者有什么好的建議和想法,都可以來 GitHub 跟優(yōu)麒麟的開發(fā)者們一起交流哦,直達鏈接:
https://github.com/UbuntuKylin/kylin-music