標(biāo)簽: C++
這是一個(gè)比較簡(jiǎn)易的mp3播放器燕耿,基于ege,一個(gè)最簡(jiǎn)單的圖形庫(kù)舰蟆,剛?cè)腴Tc/c++的同學(xué)可以嘗試一下玩玩,入門檻非常低祟峦,本程序使用的編譯器是Devc++
1.ege環(huán)境配置
2.項(xiàng)目文件結(jié)構(gòu)
│ head//頭文件導(dǎo)入
│ main.cpp//主文件
│ Makefile.win
│ musicPlayer.dev//devc++項(xiàng)目文件
│ musicPlayer.zip//windows軟件包声滥,使用請(qǐng)解壓
│ musicPlayer.ico
│ musicPlayer.layout
├─data
│ about.txt//關(guān)于
│ defaultList//歌單存儲(chǔ)文件
│ usage.txt//使用方法文件
│
├─model
│ FileExplorer.cpp//文件夾瀏覽實(shí)現(xiàn)
│ FileExplorer.h
│ MusicList.cpp//音樂(lè)列表結(jié)構(gòu)
│ MusicList.h
│ MusicPlayer.cpp//播放器基本功能
│ MusicPlayer.h
│ PlayerSystem.cpp//播放系統(tǒng)實(shí)現(xiàn)
│ PlayerSystem.h
├─src
│ │ ablum.jpg//默認(rèn)歌曲封面(沒(méi)有實(shí)現(xiàn)從MP3文件提取圖片)
│ │ file.png//文件夾視圖
│ │ mp3.gif//演示動(dòng)態(tài)圖
│ │ mp3.png//MP3文件試圖
│ │
│ └─mp3
│ //mp3文件
└─view
ListView.cpp//列表視圖
ListView.h
MFrame.cpp//基本框架
MFrame.h
3.播放器原理
導(dǎo)入歌曲:通過(guò)記錄歌曲所在路徑到一個(gè)文本文件下
播放歌曲:通過(guò)路徑來(lái)播放
刪除歌曲:不是實(shí)際的刪除本地文件呜叫,只是把記錄的路徑的數(shù)據(jù)從存儲(chǔ)中擦除妓蛮,重新覆蓋原來(lái)的記錄文件
4.關(guān)鍵代碼文件
- 1 MFrame.h
Name: MFrame
Author: cendeal
Date: 04/02/18 22:14
Description:MFrame主要負(fù)責(zé)主播放界面的渲染怠李,其中包括:進(jìn)度條、時(shí)間計(jì)時(shí)器蛤克、歌曲名等
class MFrame
{
public:
static void createFrame(bool init=false);//創(chuàng)建界面
static void createFrame(int w,int h);
static void destroyFrame();//釋放界面
static int getHeight();//獲取界面高度
static int getWidth();//獲取界面寬度
static void progressBar(const int statuslen);//設(shè)置進(jìn)度條進(jìn)度
static void setAblum(PIMAGE im,int rad=0);//設(shè)置歌曲專輯圖 【20180303修改】
static int getBorder();//獲取界面邊界
static void volumeBar(const float level);//聲音條形 【20180303修改】
static void playAndStopButton(bool isplay);//播放與暫停按鈕
static void songTile(std::string name);//設(shè)置歌曲名字
static void warningInfo(std::string msg);//警告消息
static void curtimer(std::string time);//當(dāng)前時(shí)間顯示
static void textBar(std::string content,int position);
private:
int static height;
int static width;
int static border;
};
- 2 ListView.h
Name: ListView
Author: cendeal
Date: 04/02/18 22:19
Description: ListView主要是負(fù)責(zé)列表視圖渲染捺癞,主要是設(shè)置視圖的樣式
class ListView
{
public:
ListView(int w,int h);
~ListView(){
cleardevice(icon);
};
void setName(string name);//設(shè)置顯示的名字
void setIcon(string path);//通過(guò)路徑來(lái)設(shè)置圖標(biāo)簽
void setSelcted(bool s);//設(shè)置為是否為可選的列表
bool isSelectItem();//是否為可選
void show(int state,int itemcount,bool select=false);//顯示,state為0時(shí)視圖背景為灰色色构挤,其他為白色;itemcout為顯示的位置0-8;select是否為選中狀態(tài)
void hide(int itemcount);//設(shè)置第itemcout項(xiàng)為白色覆蓋
void info(string msg);//提示信息
private:
PIMAGE icon;//圖標(biāo)簽
string name;//顯示文字
bool selected;//是否為可選
int width;//列表的寬度
int height;//列表的高度
};
- 3 Musiclist.h
Name: Musiclist
Author: cendeal
Date: 04/02/18 21:33
Description: Musiclist類主要負(fù)責(zé)從外部存儲(chǔ)器獲取歌單髓介,
更新外部存儲(chǔ)器的歌單,為MusicPlayer類
提供歌曲路徑筋现、歌曲名.....
class MusicList
{
public:
MusicList();
bool loadListData(string filepath);//加載內(nèi)存中的表
bool renewList();//將現(xiàn)在的表更新保存到內(nèi)存中
void clearList();//清空表單包括內(nèi)存中的表單
void delSong(int id);//通過(guò)id刪除歌曲
void addSong(string songNamePath);//增加歌曲
string getSongPath(int id);//通過(guò)id獲取歌曲路徑
map<string,string>::iterator moveIterator(int &id);//迭代到id
string getSongName(string path);//通過(guò)路徑截取歌曲名
string getSongNameById(int id);//通過(guò)id獲取歌名
int getsize();//獲取歌曲總數(shù)
~MusicList();
private:
map<string,string> mclist;
string mfilepath;
bool modify;
fstream f;
};
- 4 FileExplorer.h
Name: FileExplorer
Author: cendeal
Date: 04/02/18 21:38
Description:FileExplorer為客戶導(dǎo)入歌曲提供瀏覽本地電腦下的所有文件夾的入口,
僅提供瀏覽唐础,不可以修改任何文件夾下的內(nèi)容;可以獲取指定后綴名的文件矾飞。
class FileExplorer
{
public:
FileExplorer();//構(gòu)造函數(shù)一膨,會(huì)自動(dòng)導(dǎo)入電腦系統(tǒng)下的所有盤符
void openNextFolder(int id);//根據(jù)id來(lái)打開指定的文件路徑
void backToHome();//返回到盤符初始狀態(tài)
void willAddTolist(int id);//未實(shí)現(xiàn)
bool nameHash(string name,string suffix);//判斷參數(shù)name是否包含參數(shù)suffix相同的后綴
string getCurrentPath();// 返回當(dāng)前的路徑
~FileExplorer();
vector<string> cur_path;//記錄當(dāng)前訪問(wèn)過(guò)的文件夾
vector<string> folder;//記錄當(dāng)前路徑的所有文件夾
vector<string> mp3file;//記錄當(dāng)前路徑的所有MP3文件
vector<int> willList;//愿意清單
private:
_finddata_t file;
};
- 5 PlayerSystem.h
class PlayerSystem
{
public:
PlayerSystem();
~PlayerSystem();
void volumeUp();//聲音加
void volumeDown();//聲音減
void playButton();//播放和暫停
void forword();//快進(jìn)
void goback();//快退
void updateTimer();//更新時(shí)間
void updateProgressBarWithTimer();//更新時(shí)間與進(jìn)度條
void nextSong();//下一曲
int listview(int id);//列表
int importMusicFromFolder();//導(dǎo)入歌曲
void rota_ablum();//【20180303新增】旋轉(zhuǎn)專輯圖
int run();
void showAbout();//[20180314新增]
protected:
MusicPlayer mm;
MusicList ml;
char songlen[11];
int id;
bool button;
int rota_rad;
};
- 6 main.cpp
Name: main
Author: cendeal
Date: 05/02/18 00:09
Description: 主函數(shù)
#include "model/PlayerSystem.h"
int main(){
PlayerSystem sys;
sys.run();
return 0;
}