[項(xiàng)目地址] (https://github.com/Remaker01/TinyPlayer)
創(chuàng)新互聯(lián)主打移動(dòng)網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、空間域名、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再?zèng)Q定采用什么樣的設(shè)計(jì)。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計(jì),我們還會(huì)規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。
自己做的一個(gè)小項(xiàng)目,GUI界面使用的是Qt5.12,播放模塊一開始使用Qt自帶的multimedia模塊,后改為VLC-qt以支持更多格式。
主要有主窗口(Playerwindow),播放器核心(PlayerCore),播放列表(PlayList),播放器控件(PlayButton),音樂文件信息(Music)等模塊。
可以支持打開文件夾并自動(dòng)搜索合法音頻文件,還可以拖拽文件到界面上??梢员4娌シ帕斜怼?br>
目前界面比較丑,后期可能會(huì)美化界面,還可能加入網(wǎng)絡(luò)音樂播放功能之類的。
音樂信息模塊:存放音頻文件信息,包括時(shí)長、標(biāo)題、專輯等。
類定義:
class Music{
private:
QString formattedTime;
const QUrl url;
int length;
QString title,description,album;
static bool isMP3(QFile *media,QDataStream &reader);
static bool isWav(QFile *media,QDataStream &reader);
static bool isWma(QFile *media,QDataStream &reader);
static bool isAiff(QFile *media,QDataStream &reader);
static bool isFlac(QFile *media,QDataStream &reader);
static bool isAAC(QFile *media,QDataStream &reader);
public:
/**
* 根據(jù)指定的URL建立音樂對(duì)象
* @param uri 給定的URL
* @note 本構(gòu)造函數(shù)**不會(huì)**判斷URL是否合法
*/
Music(const QUrl &uri = QUrl());
///獲取包含標(biāo)題、時(shí)間、唱片集、描述的音樂信息
QString toString();
/**
* 比較兩個(gè)Music是否相等
* @param a 另一個(gè)Music
* @return 當(dāng)且僅當(dāng)滿足以下條件之一時(shí)返回true:
* 1.url相同
* 2.文件名,長度,標(biāo)題均相同
*/
bool equals(const Music &a) const;
friend bool operator==(const Music &a,const Music &b) {
return a.equals(b);
}
friend bool operator!=(const Music &a,const Music &b) {
return !a.equals(b);
}
friend uint qHash(const Music &key,uint seed = 0) {
return qHash(key.title,seed) ^ qHash(key.length,seed) ^ qHash(key.url.fileName(),seed);
}
///獲取Url
const QUrl &getUrl() const;
///獲取經(jīng)格式化后的時(shí)間
QString formatTime();
static Music getMediaDetail(const QString &fileName);
static bool isLegal(QString media);
};
播放器核心模塊:其實(shí)就是對(duì)VlcMediaPlayer的一些封裝與擴(kuò)展
類定義:
class PlayerCore : public VlcMediaPlayer{
Q_OBJECT
private:
static VlcInstance *ins;
VlcMedia *curMedia;
QSet<Music> medias; //去重用
QList<QUrl> list;
int current = -1;
int startLoc = 0;
void connectSlots();
void setMedia(const QString &media,bool start = true);
public:
static constexpr int MODE_COUNT = 4,FORMAT_COUNT = 6;
static const QString Formats[FORMAT_COUNT];
static const QString MODE_TIPS[MODE_COUNT];
enum PlayMode{SIGNLE = 0,SEQUENTIAL,SIGNLE_LOOP,LIST_LOOP};
PlayMode mode = SIGNLE;
explicit PlayerCore(QObject *parent = nullptr);
///獲取當(dāng)前媒體
QString getMedia();
///獲取指定編號(hào)的媒體目錄
QString getMedia(int i);
///獲取媒體詳細(xì)信息
Music getMediaDetail(int i);
///獲取以秒為單位的時(shí)間
int getPosInSecond();
int getCurrentMediaIndex();
///設(shè)置時(shí)間,以秒為單位
void setPos(int pos);
void setCurrentMediaIndex(int i);
///添加到播放列表
bool addToList(const QString &media);
///從播放列表中移除
bool removeFromList(int loc);
///清空播放列表
void clear();
void play();
~PlayerCore();
signals:
void finished();
//void mediaSourceChanged(qint64 newTime);
};
主窗口模塊(PlayerWindow):顧名思義,就是整個(gè)播放器的主窗口。負(fù)責(zé)用戶與播放器的交互。繼承于QMainWindow。
播放列表模塊(PlayListView):主窗口上的播放列表,繼承于QListView。
滑動(dòng)條模塊(PlayerSlider):主窗口上的播放進(jìn)度條與音量進(jìn)度條,繼承于QSlider。
播放按鈕模塊(PlayerButton):主窗口上的各種播放器控件,如開始、停止按鈕等。繼承于QLabel。
實(shí)現(xiàn)效果:
網(wǎng)站欄目:使用Qt制作的簡易音樂播放器
文章分享:http://chinadenli.net/article28/dsoipcp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站收錄、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)公司、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)