繁星音乐播放器是本人第二次使用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()