为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 可换肤MP3播放器详细设计

可换肤MP3播放器详细设计

2018-09-13 17页 doc 77KB 2阅读

用户头像

is_633808

暂无简介

举报
可换肤MP3播放器详细设计可换肤MP3播放器详细设计 南京信息工程大学 实验(实习)报告 实验(实习)名称 详细设计 实验(实习)日期 2011.5.20 得分 指导教师 李振宏 滨江学院 专业 网络工程 年级 大三 班次 二班 姓名 杨武 学号 20102346066 一、实验目的 1(通过对所选题目进行详细设计,掌握算法的设计方法与算法的描述; 2(掌握常用算法描述工具的使用; 3. 完成一个小型软件系统的算法设计。 二、实验准备 1. 熟悉算法描述工具的使用 三、实验要求 完成可换肤MP3播放器的设计与实现的详细设计,提交实...
可换肤MP3播放器详细设计
可换肤MP3播放器详细设计 南京信息工程大学 实验(实习) 实验(实习)名称 详细设计 实验(实习)日期 2011.5.20 得分 指导教师 李振宏 滨江学院 专业 网络工程 年级 大三 班次 二班 姓名 杨武 学号 20102346066 一、实验目的 1(通过对所选题目进行详细设计,掌握算法的设计方法与算法的描述; 2(掌握常用算法描述工具的使用; 3. 完成一个小型软件系统的算法设计。 二、实验准备 1. 熟悉算法描述工具的使用 三、实验要求 完成可换肤MP3播放器的设计与实现的详细设计,提交实验报告。 四、实验内容: 1. 背景 多媒体技术的概念和应用出现于20世纪80年代初期,经过十余年的发展,随着计算机 科学网络的普及和多媒体技术的发展,已成为计算机领域发展的热点技术,针对目前各 种媒体格式,如何简单方便的播放各类媒体已成为人们普遍关注的问题,而媒体播放器 的开发也变得十分重要。本课程设计就是基于面向对象的, 利用vc++6.0开发出适合AVI 的多媒体播放器。该播放器是基于MFC集成开发环境,利用系统的MCI(media controller interface)命令接口来编程,具有体积小,支持的播放格式多、系统资源占用少、支持 播放列编辑等功能优势。 2. 程序(模块)系统的组织结构 3. 界面设计要求 图形界面mp3播放器。根据常识来看,打开软件后,会出现图形界面,然后点击图形 界面,选择mp3文件,点击开始,即可播放了。程序编写完毕,编译、运行,用户即可 看到一个美观大方的简单MP3播放器。当程序运行时,Mp3播放起将会实现其播放功 能,它能实现播放WAV、MID、MP3、VCD、AVI、CD、MPEG等全部Windows音频 格式的文件,运行界面。 4(本软件系统中各程序(模块)的设计说明 1、处理“打开”按钮 单击“打开”按钮后,在OnButtonOpen()函数中,首先对文件类型进行过滤,调用DoModa() 函数打开对话框选择一个媒体文件,通过GetPathName()函数获取文件路径,通过 GetFileName()函数获取文件名后,调用DisplayInfo()函数在Static Text控件上显示“你选择 的歌曲是(文件名)”,然后利用GetDlgItem()函数设置“暂停”按钮以及“停止”按钮不可 用。 先点击打开按钮,弹出如下图对话框: void CActiveMovie3::OnOpen() { char szFileFilter[]= "Mp3 File(*.mp3)|*.mp3|" "Wma File(*.wma)|*.wma|" "Video File(*.dat)|*.dat|" "Wave File(*.wav)|*.wav|" "AVI File(*.avi)|*.avi|" "Movie File(*.mov)|*.mov|"www.findart.com.cn "Media File(*.mmm)|*.mmm|" "Mid File(*.mid;*,rmi)|*.mid;*.rmi|" "MPEG File(*.mpeg)|*.mpeg|" "All File(*.*)|*.*||";//文件类型过滤 CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(dlg.DoModal()==IDOK){ CString PathName=dlg.GetPathName(); PathName.MakeUpper(); m_ActiveMovie.SetFileName(PathName); } } 打开文件以及对文件的处理之类的函数控制 #if !defined(AFX_PLAYERDLG_H__FE3B843D_BE0F_46C6_9038_4AA6AA8032A8__INCLUDED_) #define AFX_PLAYERDLG_H__FE3B843D_BE0F_46C6_9038_4AA6AA8032A8__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 ///////////////////////////////////////////////////////////////////////////// // CPlayerDlg dialog #include"mmsystem.h" class CPlayerDlg : public CDialog { // Construction public: int hour,minute,second;//时间变量:小时、分钟、秒钟 DWORD cdlen;//某个音频文件的总时间长度 DWORD m_count;//设备型号 void Tplay(); Void Thide(); void Tdehide(); void forfor(); void forfor1(); DWORD getinfo(DWORD item); CString aa;//当前播放文件的路径 CString file[255];//存放所有待播放文件路径名的字符串数组 CString file1[255];//存放所有待播放文件路径名的字符串数组1 int fi,fr;//歌曲文件列表中,当前歌曲所在位置及最后一首歌曲所在的位置 DWORD cdfrom,cdto; //歌曲的起点和终点 CBitmapButton m_bexit; CBitmapButton m_bmim; CBitmapButton m_bhelp; CBitmapButton m_play; CBitmapButton m_stop; CBitmapButton m_open; CBitmapButton m_rp; CBitmapButton m_pop; CBitmapButton m_next; CBitmapButton m_sdel; CBitmapButton m_per; CBitmap m_bg,m_bg1; BOOL m_flag,m_flag1,m_flag2,m_flag3;//各个控件的状态标志 CPlayerDlg(CWnd* pParent = NULL); // standard constructor 对播放器的整体结构进行模块的总体设计 // CAboutDlg dialog used for App About //进行程序主界面的初始化,并向控件中添加Bitmap图 BOOL CPlayerDlg::OnInitDialog() { ..... SetWindowText("MCI播放器"); //程序主界面在屏幕中的位置,及主界面的大小 MoveWindow(200,200,303,103); //加载程序背景图片 m_bg.LoadBitmap(IDB_BITMAPBG); //以下部分是在控件上加载图片 m_play.LoadBitmaps(IDB_BITMAPPLAY1,IDB_BITMAPPLAY3); m_stop.LoadBitmaps(IDB_BITMAPSTOP1,IDB_BITMAPSTOP3); m_open.LoadBitmaps(IDB_BITMAPOPEN1,IDB_BITMAPOPEN3); m_bhelp.LoadBitmaps(IDB_BITMAPHELP1,IDB_BITMAPHELP2); m_bmim.LoadBitmaps(IDB_BITMAPMIM1,IDB_BITMAPMIM2); m_bexit.LoadBitmaps(IDB_BITMAPEXIT1,IDB_BITMAPEXIT2); m_rp.LoadBitmaps(IDB_BITMAPRP1,IDB_BITMAPRP2); m_pop.LoadBitmaps(IDB_BITMAPC,IDB_BITMAPD); m_pop.LoadBitmaps(IDB_BITMAPA,IDB_BITMAPB); m_per.LoadBitmaps(IDB_BITMAPPER1,IDB_BITMAPPER2); m_next.LoadBitmaps(IDB_BITMAPNEXT1,IDB_BITMAPNEXT2); m_sdel.LoadBitmaps(IDB_BITMAPDEL1,IDB_BITMAPDEL2); ...... } //在程序的主界面上显示控件 void CPlayerDlg::OnPaint() { if (IsIconic())// 判断是否为程序的主界面 { //以下部分有Visual C++自动生成 CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; dc.DrawIcon(x, y, m_hIcon); } else { //画笔工作区 CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); BITMAP bitMap; m_bg.GetBitmap(&bitMap); CBitmap *pbmpOld=dcMem.SelectObject(&m_bg); dc.StretchBlt(0,0,502,rect.Height(),&dcMem,0,0,bitMap.bmWidth, bitMap.bmHeight,SRCCOPY);//利用位图填充应用程序的界面 //添加控件,设定主界面上控件的位置和大小 m_bexit.MoveWindow(284,0,19,19,false); m_bmim.MoveWindow(263,0,19,19,false); m_bhelp.MoveWindow(242,0,19,19,false); m_play.MoveWindow(13,60,40,40,false); m_stop.MoveWindow(55,68,30,30,false); m_open.MoveWindow(93,65,30,30,false); m_rp.MoveWindow(133,68,30,30,false); m_pop.MoveWindow(282,22,20,78,false); m_per.MoveWindow(170,60,40,40,false); m_next.MoveWindow(200,60,40,40,false); m_sdel.MoveWindow(484,30,18,40,false); } } CPlayerDlg::CPlayerDlg(CWnd* pParent /*=NULL*/) : CDialog(CPlayerDlg::IDD, pParent) { (10) 实现弹出关于对话框的功能 void CActiveMovie3::About() { CAboutDlg aboutDlg; //定义变量 aboutDlg.DoModal(); //弹出关于对话框 } 2 处理“播放”按钮 单击“播放”按钮后,在OnButtonPlay()函数中,通过调用MCIMP3类的MCIOpen()函数获 取刚才选择的文件路径以及文件名,调用该类的MCIPlay()函数播放歌曲,此时调用 DisplayInfo()函数在Static Text控件上显示“正在播放的歌曲是(文件名)”,进行歌曲的播 放,然后利用GetDlgItem()函数设置“播放”按钮不可用。 为了循环播放,我们利用定时器来工作,采用OnTimer()函数来激活定时器: void CActiveMovie3::OnTimer(UINT nIDEvent) { CString m_filename; //定义文件变量 double CurPos=m_ActiveMovie.GetCurrentPosition(); //获得播放位置 if(CurPos= = 0) { m_list.SetCurSel(0); //选择列表框的第一个文件 m_list.GetText(0,m_filename); m_ActiveMovie.SetAutoStart(1); //设置自动播放 m_ActiveMovie.SetFileName(m_filename); //设置文件 m_ActiveMovie.Run(); //播放 m_list.GetCurSel(); //获得播放文件 m_list.InsertString(-1,m_filename); //插入列表框最后 m_list.DeleteString(0); //删除用过的文件 } CDialog::OnTimer(nIDEvent); } (3)循环控制函数 oid CMediaPlayerDlg::OnRepeat() //循环控制函数,实现对循环的控制功能 { if(!isRepeat){ //判断是否正在循环 SetTimer(1,2000,NULL); //设置循环的标志为1,循环间隔为2秒 isRepeat=TRUE; //将循环变量设为TURE SetDlgItemText(IDC_STATIC2,"模式:循环"); //将静态文本显示为循环模式 } else{ KillTimer(1); //停止标志为1的循环 isRepeat=FALSE; //将循环变量设为FALSE SetDlgItemText(IDC_STATIC2,"模式:普通"); //将静态文本显示为普通模式 } } (4)全屏播放功能调用了m_ActiveMovie.SetMovieWindowSize函数,代码如下: void CActiveMovie3::OnFulscreeen() //全屏函数,实现全屏播放视频的功能 { m_ActiveMovie.Pause(); //暂停播放 m_ActiveMovie.SetFullScreenMode(true); //设置全屏播放属性为真,即开启全屏播放 m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED); //设置播放窗口大 小为最大 m_ActiveMovie.Run(); //继续播放 } (5)查询歌曲代码如下: void CActiveMovie3::OnChaxun() { CSongSet cSet; UpdateData(); m_Edit1.TrimLeft(); if(m_Edit1.IsEmpty()) { MessageBox("要查询的歌曲不能为空!"); return; } CSongDlg dlg; cSet.m_strFilter.Format("歌曲名称='%s'",m_Edit1); cSet.Open(); if(!cSet.IsEOF())//如果打开的集有记录 { CSongDlg dlg; dlg.m_Gequ =cSet.m_GeQu; dlg.m_Geshou =cSet.m_GeShou; dlg.m_Zuoci =cSet.m_ZuoCi; dlg.m_Zuoqu =cSet.m_ZuoQu; dlg.m_Zhuanji =cSet.m_ZhuanJi; dlg.DoModal(); UpdateData(FALSE);//自动更新表单中控件显示的内容 } else MessageBox("没有查到你要找的歌曲记录!"); if(cSet.IsOpen())cSet.Close(); } void CActiveMovie3::OnTianjia() { // TODO: Add your control notification handler code here CSongDlg dlg; CSongSet pSet; if(dlg.DoModal()==IDOK) { pSet.Open(); pSet.AddNew(); pSet.m_GeQu =dlg.m_Gequ; pSet.m_GeShou =dlg.m_Geshou; pSet.m_ZhuanJi =dlg.m_Zhuanji; pSet.m_ZuoCi =dlg.m_Zuoci; pSet.m_ZuoQu =dlg.m_Zuoqu; pSet.Update(); pSet.Requery(); } } (6)循环控制函数 void CActiveMovie3::OnRepeat() //循环控制函数,实现对循环的控制功能 { if(!isRepeat){ //判断是否正在循环 SetTimer(1,2000,NULL); //设置循环的标志为1,循环间隔为2秒 isRepeat=TRUE; //将循环变量设为TURE SetDlgItemText(IDC_STATIC2,"模式:循环"); //将静态文本显示为循环模式 } else{ KillTimer(1); //停止标志为1的循环 isRepeat=FALSE; //将循环变量设为FALSE SetDlgItemText(IDC_STATIC2,"模式:普通"); //将静态文本显示为普通模式 } } 3 处理“暂停”按钮 单击“暂停”按钮后,在OnButtonPause()函数中,首先通过调用MCIMP3类的MCIPause() 函数暂停正在播放的歌曲,然后调用DisplayInfo()函数在Static Text控件上显示“暂停播 放歌曲(文件名)”,此时的歌曲处于暂停时的进度上,利用GetDlgItem()函数设置“播 放”按钮可用。 增加按钮 “播放” void CActiveMovie3::OnPlay() { m_ActiveMovie.Run();//播放文件 SetTimer(0,20,NULL);//设置定时器 } void CActiveMovie3::OnStop() { m_ActiveMovie.Stop();//停止播放文件 KillTimer(0);//关掉定时器 } 4 处理“停止”按钮 单击“停止”按钮后,在OnButtonStop()函数中,首先通过调用MCIMP3类的MCIPause() 函数停止正在播放的歌曲,然后调用DisplayInfo()函数在Static Text控件上显示“停止 播放歌曲(文件名)”,将停止正在播放歌曲,利用GetDlgItem()函数设置“暂停”按钮 和“停止”按钮不可用。 停止播放.暂停播放 void CActiveMovie3::OnStop() //停止播放函数 { KillTimer(1); //停止循环 m_ActiveMovie.Stop(); //停止播放 } void CActiveMovie3::OnPause() //暂停播放函数 { m_ActiveMovie.Pause(); //调用控件的暂停函数暂停播放} 5 处理“退出”按钮 单击“退出”按钮后,在OnButtonQuit()函数中,调用CDialog类的OnCancel()函数将退出 对话框,结束程序的运行。 5、模块相互关系表 <播放器列表管理窗口><播放主操作盘> 列表管理操作接口播放控制操作接口 列表管理模块核心播放控制模块 数据库 MP3文件 6.试验最终的效果图 在播放过程中,可以通过“暂停”、“停止”、“+”(增大音量)、“-”(降低音量)、 “×”(静音)等按钮达到相应的播放控制功能。此时,还可以再次单击“打开”按钮 继续向播放列表中添加媒体文件,程序会按列表中的顺序自动循环播放文件。分别对 mp3、wma、wmv、等不同音频、视频格式的文件进行测试播放,经测试均可以成功运 行。 五、试验 本次课程设计中虽然可以实现播放、暂停、停止以及音量等功能,但仍然存在着放多不足, 比如列表管理的功能以及循环播放功能始终无法实现,如果有时间一定会好好研究。课设是 辛苦劳累的,但是收获同样是巨大的,在课设中每解决一个问题,那种成就感是无法言语的, 课设中第一次调试程序时出现了逻辑错误,编译能通过,运行始终无法通过,后来经过思考, 进行了多次修改调试之后得到了运行结果,虽然以前在程序中未曾见到过,但是经过改正调 试最终达到了目的。虽然设计的过程比较辛苦,但是总算来说试验是能够正常的完成了,所 以还是比较开心的,希望以后自己再接再厉。
/
本文档为【可换肤MP3播放器详细设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索