(C++)簡(jiǎn)易MP3播放器基于ege圖形庫(kù)

標(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;
}

示例演示

mp3.gif

6項(xiàng)目地址

musicPlayer By Cendeal

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凰慈,隨后出現(xiàn)的幾起案子汞幢,更是在濱河造成了極大的恐慌,老刑警劉巖微谓,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件森篷,死亡現(xiàn)場(chǎng)離奇詭異输钩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)仲智,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門买乃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人钓辆,你說(shuō)我怎么就攤上這事剪验。” “怎么了前联?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵功戚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我似嗤,道長(zhǎng)啸臀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任烁落,我火速辦了婚禮乘粒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伤塌。我一直安慰自己灯萍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布每聪。 她就那樣靜靜地躺著旦棉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熊痴。 梳的紋絲不亂的頭發(fā)上他爸,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音果善,去河邊找鬼诊笤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛巾陕,可吹牛的內(nèi)容都是我干的讨跟。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼鄙煤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晾匠!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起梯刚,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凉馆,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澜共,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡向叉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗦董。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片母谎。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖京革,靈堂內(nèi)的尸體忽然破棺而出奇唤,到底是詐尸還是另有隱情,我是刑警寧澤匹摇,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布咬扇,位于F島的核電站,受9級(jí)特大地震影響来惧,放射性物質(zhì)發(fā)生泄漏冗栗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一供搀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钠至,春花似錦葛虐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宪卿,卻和暖如春的诵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佑钾。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工西疤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人休溶。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓代赁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親兽掰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芭碍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351