美文网首页IT技术篇程序员码农的世界
C++简易MP3播放器基于ege图形库

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

作者: CENDEAL | 来源:发表于2018-03-15 00:11 被阅读389次

    标签: 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

    相关文章

      网友评论

        本文标题:C++简易MP3播放器基于ege图形库

        本文链接:https://www.haomeiwen.com/subject/fwtqqftx.html