简介:

基于QT5.12版本的Quick QML项目----恋羽音乐播放器(爆肝中......)

上一讲链接:https://blog.csdn.net/2301_80668528/article/details/153560295
                        
下一讲链接:https://blog.csdn.net/2301_80668528/article/details/153884436?fromshare=blogdetail&sharetype=blogdetail&sharerId=153884436&sharerefer=PC&sharesource=2301_80668528&sharefrom=from_link

上一讲效果:

音乐播放效果⑥

ps:如有错误,欢迎指出^\/^

原视频出处:https://b23.tv/gFnMsLg

一、歌词内容解析

1.请求歌词

(1)歌词获取方式:在https://neteasecloudmusicapi.js.org/中查询获取方式:

(2)在LayoutBottomView.qml文件中添加getLyric()函数接口

(3)在getCover()函数接口的onReply()中调用

Ctrl+R运行,随机点击一首歌曲进行播放,输出栏显示了歌词:

2.解析歌词

(1)用replace()正则表达式将下图所示的所有歌词所在时间点给替换掉


(2)提取时间信息

(3)添加变量--歌词列表

进入PageDetailView.wml文件,新增变量lyricsList

赋予MusicLyricView组件id :

lyrics获取lyricView中的歌词:lyrics

(4)在getLyric()函数中将lyrics赋值给lyricList:

Ctrl+R运行,随机播放一首音乐,并进入音乐详情页面:

滚动鼠标滚轮,发现歌词正常显示:

歌词效果①

二、歌词滚动效果

1.用新变量暴露出PageDetailView的current

在PageDetailView.qml中添加新变量current:

2.添加歌词对应时长变量--times

在main.qml的MediaPlayer组件中添加(75行):

2.在getLyric()函数中调用

进入LayoutBottomView.qml文件的接口函数中:

3.在onPositionChanged:{}中调用

回到main.qml的MediaPlayer组件中:

Ctrl+R运行,发现歌词随时间滚动,且当鼠标滚轮滚动歌词移位后不久也会自动回到当前播放位置:

歌词效果②

三、本地音乐页面

1.本地音乐页面布局

进入DetialLocalPageView.qml文件:

此页面中我们将本地音乐划分成顶部三个按键(添加本地音乐、刷新纪录、清空记录)区域与下方本地音乐列表区:

(1)按键组与音乐列表列布局:

(2)新建组件--“MusicTextButton

复制粘贴一份MusicIconBotton,重命名为“MusicTextButton”:

(3)设置MusicTextButton属性:

删除icon部分设置:

添加按键文本变量:btnText

设置默认文本:

设置选中属性:

设置高宽:

删除气泡提示框:

添加背景其他属性:

设置字体:

整体代码:

/************ 本地音乐页面下:顶部按键 ************/
import QtQuick 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.3  //布局

Button
{
    property alias btnText: self.text   //按键文本
    property alias isCheckable: self.checkable    //不可被选中
    property alias isChecked:  self.checked       //是否被选中
    property alias btnWidth: self.width           //宽度
    property alias btnHeight: self.height         //高度

    /* 赋值 */
    id: self        //按键id

    text: "Button"  //默认文本
    font.family: window.mFONT_FAMILY
    font.pointSize: 10

    background: Rectangle
    {
        implicitHeight: self.height
        implicitWidth: self.width
        //按下按键(true)--赋予颜色#497563
        //未按下按键(false)--赋予颜色#20e9f4ff
        color: self.down || (self.Checkable && self.checked) ? "#e2f0f8" : "#70e9f4ff"
        radius: 3       //圆角
    }

    width: 35
    height: 35
    checkable: false
    checked: false

}

(4)在本地音乐页面布局的按键组RowLayout中调用MusicTextButton:

/* 上方按键组 */
    RowLayout
    {
        height: 70
        Item        //按键组左边间距,防止顶格
        {
            width: 5
        }

        /* 按键:添加本地音乐 */
        MusicTextButton
        {
            btnText: "添加本地音乐"
            btnHeight: 35
            btnWidth: 150
            onClicked:
            {

            }
        }

        /* 按键:刷新记录 */
        MusicTextButton
        {
            btnText: "刷新记录"
            btnHeight: 35
            btnWidth: 100
            onClicked:
            {

            }
        }

        /* 按键:清空记录 */
        MusicTextButton
        {
            btnText: "清空记录"
            btnHeight: 35
            btnWidth: 100
            onClicked:
            {

            }
        }
    }

Ctrl+R运行:

2.添加本地音乐

添加本地音乐时设计流程为:

点击“添加本地音乐”按键-->弹出对话框-->从本地选择音乐-->添加音乐

(1)设计弹出的对话框

对话框需要用到FileDialog组件:

添加包含此组件的模块:

import Qt.labs.platform 1.0

添加FileDialog组件:

/* 按下按键“添加本地音乐”后弹出的对话框” */
    FileDialog
    {
        id: fielDialog
        fileMode: FileDialog.OpenFiles                                          //文件操作方式:打开多个文件
        nameFilters: ["MP3 Music Files(*.mp3)", "FLAC Music Files(*.flac)"]     //被打开文件的格式
        folder: StandardPaths.standardLocations(StandardPaths.MusicLocation)[0] //默认路径
        acceptLabel: "确定"
        rejectLabel: "取消"

        onAccepted:
        {
            var list = []
            for(var index in files)     //遍历
            {
                var path = files[index]
                /* 按照“/”分割path */
                var arr = path.split("/")
                var fileNameArr = arr[arr.length -1].split(".")
                /* 删除末尾的元素(文件后缀名) */
                fileNameArr.pop()
                var fileName = fileNameArr.join(".")   //排除歌名/歌手的名称中带有“.”的情况,如G.E.M邓紫棋

                //默认歌曲文件格式:“歌名-歌手.mp3”
                var nameArr = fileName.split("-")
                var name = "恋羽音乐"
                var artist = "小鱼儿"
                if(nameArr.length > 1)
                {
                    artist = nameArr[0]     //“歌手”
                    nameArr.shift()         //删除第一个元素(歌手)
                }
                name = nameArr.join("-")    //“歌名-”
                /* 在列表中插入元素 */
                list.push({
                              id: path + "",
                              name,artist,
                              url:path + "",
                              album: "本地音乐",
                              type: "1"         //1:本地音乐,0:网络
                          })
                localListView.musicList = list  //赋值
            }

        }
    }

(2)调用FileDialog组件:

Ctrl+R运行,点击左上角“添加本地音乐”按键,就会弹出以下弹窗:

进入存有音乐的文件,选中音乐,点击“确定”,即可将音乐添加至列表中:

3.播放本地音乐

设置默认的type为网络音乐(对应type:0)在LayoutBottomView.qml中根据本地音乐list的“ type ”来播放:

(1)修改获取网络音乐播放链接的接口函数名为"playWebMusic”:


(2)添加新的函数接口—播放本地音乐:

在总播放音乐函数接口 playMusic() 中调用:

Ctrl+R运行,按前面步骤添加本地音乐,点击播放按键,即可播放成功

4.保存、清空、刷新本地音乐

上小节的程序中,添加本地音乐之后关闭程序并重新运行,发现:上次添加的本地音乐没有进行保存,现在来添加本地音乐保存功能:

(1)保存本地音乐

进入DetailLocalPageView.qml文件,与前面实现过的数据保存一样,要用到Settings组件:

①添加settings组件需要的模块:

import Qt.labs.settings 1.1     //数据保存

import QtQml 2.12

②添加settings组件:

③添加获取、保存本地音乐的两个接口函数与组件加载完成的接口函数调用:

④在FileDialog{}组件中调用:

Ctrl+R运行,添加本地音乐:

在不关闭程序的情况下随机右键一个.qml文件->"在Explorer中显示"->返回上一级目录->进入下图中的build文件:

进入conf文件夹:

即可看见 local.ini文件:

右键此文件,打开,看见保存的数据,说明数据已经保存成功:

此时关闭应用程序,重新运行,进入本地音乐页面,可以看见上次添加的本地音乐被保存下来了:

(2)刷新本地音乐

在按键:刷新记录下的onClicked事件中调用getLocal()接口函数即可:

(3)清空本地音乐

①添加新的接口函数clearLocal()

②在按键:清空本地音乐下的onClicked事件中调用clearLocal()接口函数:

Ctrl+R运行:

本地音乐效果①

        至此,QT Quick QML项目音乐播放器13----歌词内容解析、歌词滚动效果、本地音乐页面正式完结,感谢您的阅读!

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐