VC++ 繁星音乐播放器

本文介绍了一个使用VC++编写的音乐播放器,实现了音乐的导入、删除、播放控制、歌词显示以及界面美化等功能。核心类CPlayMusic包含播放、暂停、快进、快退、音量控制等操作。此外,还介绍了自定义CButton类以增强按钮的视觉效果和交互性,以及使用Silder properties控件控制播放进度和音量。虽然存在一些待改进之处,如删除功能和播放模式,但整体上实现了基本的音乐播放功能。
摘要由CSDN通过智能技术生成

繁星音乐播放器是本人第二次使用VC++编写的小应用。主要实现音乐的导入,删除和现实歌词,另外有一些特效


一、功能需求:

  1.实现基本的音乐播放器的播放、暂停、继续、停止、上一首、下一首。

  2.实现音乐播放器的音乐的快进、快退。

  3.实现声音的增大和减小。

  4.实现歌词的显示。

  5.界面设计与美化。

二、总体设计

 1.系统模块功能图


2.系统业务处理流程图

   (1)、添加、删除、播放模式流程图



(2)、播放音乐流程图

三、程序详细设计

  一、CPlayMusic类的编写

  1、音乐播放器的播放、暂停、继续、停止、上一首、下一首

   编写一个自定义类用来控制音乐的播放、暂停等功能实现。

   类的定义:

class CPlayMusic 

{

public:

       CPlayMusic();

       virtual ~CPlayMusic();

       bool OpenFiles();                //打开CFileDialog,获取歌曲列表

       CString Play();                    //播放(打开设备并初始化)

       void Pause();                //暂停

       void Continue();             //继续

       void Stop();                 //停止

       void Previous();             //上一首

       void Next();                 //下一首

       voidSpeedForward();         //上一首

       voidSpeedBackward();        //下一首

       void OnTimer();                          //循环播放

       DWORD Getinfo(DWORDitem);   //获取媒体文件信息(播放时间,已播放时间等)

       DWORD m_count;               //当前播放的媒体在列表中的位置

       DWORDItemLength,ItemFrom,ItemTo,ItemNow;    //播放总时间,起始时间,结束时间,当前已播放时间

       DWORD SetVolumn(DWORDvol);  //设置音量

     bool GetLrc();

       CString Lrc[100]; //歌词

       CString MusicLrc; //当前歌词

       int TotleLine;  //歌词总行数

       int   iPlayed;                      //当前已播放的媒体文件数

       bool PlayingFalg;                 //标志,是否正在播放

       CStringstrFileName;   //增加的文件路径

};

初始化参数:

       iPlayed=0;

       ItemFrom=0;

       PlayingFalg=false;

       MusicLrc="";

(1)、添加音乐的文件打开:    bool OpenFiles();

//每次只能添加一首音乐

bool CPlayMusic::OpenFiles()

{

     char szFileFilter[]="mp3文件(*.mp3)|*.mp3|"//设置文件播放格式

              "wma文件(*.wma)|*.wma|"

              "wav文件(*.wav)|*.wav|"

              "所有文件(*.*)|*.*|";

       CFileDialogfdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);

       if(fdlg.DoModal()==IDOK)

       {

              strFileName=fdlg.GetPathName();

              m_MusicList.Add(strFileName);

             

              MusicNumber++;

              iPlayed=MusicNumber-1;

              Stop();

              Play();

       }

   return TRUE;

}

(2)、播放音乐 CString Play()

 CString CPlayMusic::Play()

{

       PlayingFalg=TRUE;      //置播放标志

       MCI_OPEN_PARMSmciopenparms;                                       //打开

       MCI_PLAY_PARMSmciplayparms;                                        //播放

       mciopenparms.lpstrElementName=m_MusicList.GetAt(iPlayed);    //播放路径

 

   CurMusic=m_MusicList.GetAt(iPlayed);

       //CurMusic 当前播放歌曲名,  m_FileList[]保存所有的歌曲路径

 

int n=CurMusic.ReverseFind('\\');//得到歌曲名在字符中的位置

       CurMusic=CurMusic.Mid(n+1);    //只保存歌曲名

 

       mciopenparms.lpstrDeviceType=NULL;                    //NULL为各种类型

       mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,

              (DWORD)(LPVOID)&mciopenparms);                    //向MCI设备发送命令消息

 

       m_count=mciopenparms.wDeviceID;

       mciplayparms.dwCallback=NULL;                         //窗口拥有者句柄

 

       ItemLength=Getinfo(MCI_STATUS_LENGTH);   //得到播放长度 

      

       ItemTo=MCI_MAKE_HMS(MCI_HMS_HOUR(ItemLength),

                               MCI_HMS_MINUTE(ItemLength),

                                     MCI_HMS_SECOND(ItemLength));        //根据长度计算出时、分、秒

       mciplayparms.dwFrom=MCI_MAKE_HMS(0,0,0);             //播放起点

       mciplayparms.dwTo=ItemTo;                             //播放终点

       mciSendCommand(m_count,MCI_PLAY,MCI_TO|MCI_FROM,

              (DWORD)(LPVOID)& mciplayparms);      

       IsPlaying=TRUE;//发送播放命令消息

       returnm_FileList[iPlayed];

}

(3)、停止播放void  Stop()

void CPlayMusic::Stop()

{

       PlayingFalg=false;                                                   //关闭正在播放标志

       ItemFrom=MCI_MAKE_HMS(0,0,0);                             //播放位置归文件开头

       mciSendCommand(m_count,MCI_CLOSE,0,NULL);         //发出关闭消息

}

(4)、暂停 void Pasue()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值