(C++)简易MP3播放器基于ege图形库

标签: C++


这是一个比较简易的mp3播放器,基于ege,一个最简单的图形库,刚入门c/c++的同学可以尝试一下玩玩,入门槛非常低,本程序使用的编译器是Devc++

1.ege环境配置

2.项目文件结构

│  head//头文件导入
│  main.cpp//主文件
│  Makefile.win
│  musicPlayer.dev//devc++项目文件
│  musicPlayer.zip//windows软件包,使用请解压
│  musicPlayer.ico
│  musicPlayer.layout
├─data
│      about.txt//关于
│      defaultList//歌单存储文件
│      usage.txt//使用方法文件
│
├─model
│      FileExplorer.cpp//文件夹浏览实现
│      FileExplorer.h
│      MusicList.cpp//音乐列表结构
│      MusicList.h
│      MusicPlayer.cpp//播放器基本功能
│      MusicPlayer.h
│      PlayerSystem.cpp//播放系统实现
│      PlayerSystem.h
├─src
│  │  ablum.jpg//默认歌曲封面(没有实现从MP3文件提取图片)
│  │  file.png//文件夹视图
│  │  mp3.gif//演示动态图
│  │  mp3.png//MP3文件试图
│  │
│  └─mp3
│         //mp3文件
└─view
        ListView.cpp//列表视图
        ListView.h
        MFrame.cpp//基本框架
        MFrame.h

3.播放器原理

导入歌曲:通过记录歌曲所在路径到一个文本文件下
播放歌曲:通过路径来播放
删除歌曲:不是实际的删除本地文件,只是把记录的路径的数据从存储中擦除,重新覆盖原来的记录文件

4.关键代码文件

  • 1 MFrame.h

Name: MFrame 
Author: cendeal
Date: 04/02/18 22:14
Description:MFrame主要负责主播放界面的渲染,其中包括:进度条、时间计时器、歌曲名等 
class MFrame
{
    public:
        static void createFrame(bool init=false);//创建界面
        static void createFrame(int w,int h);
        static void destroyFrame();//释放界面
        static int getHeight();//获取界面高度
        static int getWidth();//获取界面宽度
        static void progressBar(const int statuslen);//设置进度条进度
        static void setAblum(PIMAGE im,int rad=0);//设置歌曲专辑图 【20180303修改】 
        static int getBorder();//获取界面边界
        static void volumeBar(const  float level);//声音条形 【20180303修改】 
        static void playAndStopButton(bool isplay);//播放与暂停按钮
        static void songTile(std::string name);//设置歌曲名字
        static void warningInfo(std::string msg);//警告消息
        static void curtimer(std::string time);//当前时间显示
        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主要是负责列表视图渲染,主要是设置视图的样式 
class ListView
{
    public:
        ListView(int w,int h);
        ~ListView(){
            cleardevice(icon);
        };
        void setName(string name);//设置显示的名字 
        void setIcon(string path);//通过路径来设置图标签 
        void setSelcted(bool s);//设置为是否为可选的列表 
        bool isSelectItem();//是否为可选 
        void show(int state,int itemcount,bool select=false);//显示,state为0时视图背景为灰色色,其他为白色;itemcout为显示的位置0-8;select是否为选中状态    
        void hide(int itemcount);//设置第itemcout项为白色覆盖 
        void info(string msg);//提示信息 
    private:
        PIMAGE icon;//图标签 
        string name;//显示文字 
        bool selected;//是否为可选 
        int  width;//列表的宽度 
        int height;//列表的高度 
};
  • 3 Musiclist.h

Name: Musiclist 
Author: cendeal
Date: 04/02/18 21:33
Description: Musiclist类主要负责从外部存储器获取歌单,
                 更新外部存储器的歌单,为MusicPlayer类
                 提供歌曲路径、歌曲名..... 
class MusicList
{
    public:
        MusicList();
        bool loadListData(string filepath);//加载内存中的表
        bool renewList();//将现在的表更新保存到内存中
        void clearList();//清空表单包括内存中的表单
        void delSong(int id);//通过id删除歌曲
        void addSong(string songNamePath);//增加歌曲
        string getSongPath(int id);//通过id获取歌曲路径
        map<string,string>::iterator moveIterator(int &id);//迭代到id
        string getSongName(string path);//通过路径截取歌曲名
        string getSongNameById(int id);//通过id获取歌名
        int getsize();//获取歌曲总数 
        ~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为客户导入歌曲提供浏览本地电脑下的所有文件夹的入口,  
仅提供浏览,不可以修改任何文件夹下的内容;可以获取指定后缀名的文件。
class FileExplorer
{
    public:
        FileExplorer();//构造函数,会自动导入电脑系统下的所有盘符 
        void openNextFolder(int id);//根据id来打开指定的文件路径 
        void backToHome();//返回到盘符初始状态 
        void willAddTolist(int id);//未实现 
        bool nameHash(string name,string suffix);//判断参数name是否包含参数suffix相同的后缀 
        string getCurrentPath();// 返回当前的路径 
        ~FileExplorer();
        
        vector<string> cur_path;//记录当前访问过的文件夹 
        vector<string> folder;//记录当前路径的所有文件夹 
        vector<string> mp3file;//记录当前路径的所有MP3文件 
        vector<int> willList;//愿意清单 
    private:
        _finddata_t file;
        
};
  • 5 PlayerSystem.h
class PlayerSystem
{
    public:
        PlayerSystem();
        ~PlayerSystem();
        void volumeUp();//声音加 
        void volumeDown();//声音减 
        void playButton();//播放和暂停 
        void forword();//快进 
        void goback();//快退 
        void updateTimer();//更新时间 
        void updateProgressBarWithTimer();//更新时间与进度条 
        void nextSong();//下一曲 
        int listview(int id);//列表 
        int importMusicFromFolder();//导入歌曲 
        void rota_ablum();//【20180303新增】旋转专辑图 
        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: 主函数 
#include "model/PlayerSystem.h"
int main(){
    PlayerSystem sys;
    sys.run();
    return 0;
}

示例演示

mp3.gif

6项目地址

musicPlayer By Cendeal

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351