收藏 分销(赏)

mp3播放器--信息工程课程设计说明书.doc

上传人:胜**** 文档编号:2797220 上传时间:2024-06-06 格式:DOC 页数:19 大小:208.50KB 下载积分:10 金币
下载 相关 举报
mp3播放器--信息工程课程设计说明书.doc_第1页
第1页 / 共19页
mp3播放器--信息工程课程设计说明书.doc_第2页
第2页 / 共19页


点击查看更多>>
资源描述
xx大学 课 程 设 计 说 明 书 学生姓名: xx 学 号: 37 学 院: 信息与通信工程学院 专 业: 信息工程 题 目: mp3播放器 xx 指导教师: 职称: 副教授 年 月 日 下达任务书日期: 2016 年 5 月 27 日 课 程 设 计 任 务 书 1.设计目的: 通过设计,明确音频机的设计思想和设计过程,扎实掌握VC、C++或C语言编程的整体框架和步骤,使学生具有一定综合分析问题和解决问题的能力。 2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等): 功能说明: 具有播放MP3音乐的功能。 设计要求: 课程设计的目的在于培养学生的综合素质,要求学生做到: (1)根据题目要求查阅有关资料,确定方案,写出设计方案; (2)根据对选题的理解,消化查阅资料,给出相关设计的流程图; (3) 在C语言、C++或VC环境下,实现各项功能; (4) 对结果进行分析总结。 3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、实物样品等〕: 设计工作任务: (1) 了解课题背景,掌握基本技术,制定程序设计框架。 (2) 完成设计内容:包括程序流程图和完成实现功能的程序代码,写出设计说明书。 (3) 设计答辩。 工作量的要求: (1) 通过查阅资料了解与音频播放程序设计相关的基本理论、原理以及背景知识,理解选题意义; (2) 掌握与音频播放程序相关的设计思想、原理、设计框架和步骤; (3) 完成音频播放程序的功能和程序代码的实现; (4) 通过实验验证程序代码的可行性; (5) 给出设计总结。 课 程 设 计 任 务 书 4.主要参考文献: Visual C++课程设计案例精编(第二版) 5.设计成果形式及要求: 程序运行结果; 课程设计说明书。 6.工作计划及进度: 2016年5月30日 ~ 2016年6月1日:查资料 2016年6月2日 ~ 2016年6月7日:在指导教师指导下设计方案及程序 2016年6月8日 ~ 2016年6月15日:学生上机调试程序,指导教师辅导 2016年6月16日~ 2016年6月18日:完成课程设计说明书 2016年6月19日:答辩 系主任审查意见: 签字: 年 月 日 目录 1.摘要---------------------------------------------------1 1.1)设计内容--------------------------------------------1 1.2)MCI简介--------------------------------------------1 1.2-①任务-----------------------------------------------2 1.2-②各模块功能设计-------------------------------------3 1.2-③操作步骤------------------------------------------4 1.2-④函数代码------------------------------------------5 2.课程设计分析与结果------------------------------------13 3.总结--------------------------------------------------14 参考文献------------------------------------------------14 15 1. 摘要 利用MFC应用程序、媒体控制接口MIC的基本知识,设计一个MP3播放器。要求能够播放常用Windows音频格式的文件;实现播放控制:播放、暂停、停止等;实现音量控制:静音、声音放大减小;实现播放列表管理:加入文件、加入目录、删除文件等功能 关键词:MP3播放器的设计 设计目的 利用VC++开发一个支持wav、mp3、wma等不同音频格式的媒体播放器。通过课程设计掌握多媒体编程的基本原理。 1) 设计内容 MP3播放器的设计是利用MFC应用程序、媒体控制接口MIC 的基本知识而设计的。(MFC 简介) MFC是Visual C++是核心。MFC类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC AppWizard向导根据继承性利用MFC派生出自己的类,并对Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互联系,实现了标准Windows应用程序的功能,这就是向导生成的所谓MFC应用程序框架。每个MFC类都包括了一些函数,函数放到类中,符合C++编程方法。这些函数,必须通过类定义对象才能使用 2) MCI简介 MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。它所支持的媒体格式包括mp3、avi、wav、mpeg等等[2]。 音频技术发展较早,几年前一些技术已经成熟并产品化,音频技术主要包括四个方面:音频数字化、语音处理、语音合成及语音识别。 音频文件包括多种格式的文件,MP3就是其中的一种。MP3的全称是Moving Picture Experts Group,Audio Layer Ⅲ,它所使用的技术是在VCD(MPEG-1)的音频压缩技术上发展出的第三代,而不是MPEG-3。MP3是一种音频压缩的国际技术标准,它一般需要MP3播放器来读取 ①  任务: 1) 编程实现一个可支持多种音频格式的媒体播放器,其基本功能包括媒体播放、音量调节、播放进度选择、暂停、停止以及歌曲信息的查询与添加等; 2) 给出程序的总体设计和详细设计,要求程序总体架构 3)图详细设计的流程图说明等 表一 ②  各模块功能设计 2.1 处理“打开”按钮 单击“打开”按钮后,在onfilechoice()函数中,首先对文件类型进行过滤,调用GetSystemMene()函数打开对话框选择一个媒体文件,通过GetPathName()函数获取文件路径,通过onfilechoice()函数获取文件名后,调用DisplayInfo()函数在Static Text控件上显示“你选择的歌曲是(文件名)”,然后利用pause()函数设置“暂停”按钮以及“停止”按钮不可用。 2.2 处理“播放”按钮 单击“播放”按钮后,在onplay()函数中,通过调用CMP3Dlg类的GetPathName函数获取刚才选择的文件路径以及文件名,调用该类的void play()函数播放歌曲,此时调用GetDlgItemText(IDC_pause,strtemp)获取按钮状态,然后利用SetDlgItemText()函数设置“播放”按钮不可用。 2.3 处理“暂停”按钮 单击“暂停”按钮后,在Onstop ()函数中,首先通过调用CMP3Dlg类的pause()函数暂停正在播放的歌曲,GetDlgItem(IDC_play)->EnableWindow(false),当暂停按钮按下时,通过GetDlgItemText(IDC_pause,strtemp)获取按钮状态,此时歌曲处于暂停的进度条上,利用GetDlgItem(IDC_stop)->EnableWindow(true)函数设置“播放”按钮可用。 2.4 处理“停止”按钮 单击“停止”按钮后,首先通过调用CMP3Dlg类的stop()函数暂停正在播放的歌曲,GetDlgItem(IDC_play)->EnableWindow(false)当stop按钮按下时,播放和暂停应该均不可用,此时的歌曲处于暂停时的进度上,利用GetDlgItem(IDC_stop)->EnableWindow(true)函数设置“播放”按钮可用。 , 10 将停止正在播放歌曲,利用GetDlgItem()函数设置“暂停”按钮和“停止”按钮不可用。 2.5 处理“音量”滑块 拉动“音量”滑块后,在m_slider.SetRange(0,1000)中,设置滑块的移动范围为0~1000。在启动程序时,通过m_slider.SetPos(500)函数设置滑块指针的初始位置设为500且代表初始音量为50 。 2.6 处理“退出”按钮 单击“退出”按钮后,在Onexitbt()函数中,调用CDialog类的OnCancel()函数将退出对话框,结束程序的运行 ③  操作步骤 1) 先在VS环境下建立好一个基于对话框的工程。 2) 打开资源视图,在对话框内按照布局图布局,步好后根据 表-1来设置属性。添加相应的变量和函数。 3) 进行程序初始化。 4) 为各个按钮添加消息处理函数,并添加相应的代码。 5) 全部完成后进行测试和调试。 ④ 函数代码 ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMP3Dlg dialog CMP3Dlg::CMP3Dlg(CWnd* pParent /*=NULL*/) : CDialog(CMP3Dlg::IDD, pParent) { //{{AFX_DATA_INIT(CMP3Dlg) m_int = 0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1); } void CMP3Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMP3Dlg) DDX_Control(pDX, IDC_SLIDER, m_slider); DDX_Text(pDX, IDC_vol, m_int); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMP3Dlg, CDialog) //{{AFX_MSG_MAP(CMP3Dlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_about, Onabout) ON_BN_CLICKED(IDC_exitbt, Onexitbt) ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER, OnCustomdrawSlider) ON_BN_CLICKED(IDC_filechoice, Onfilechoice) ON_BN_CLICKED(IDC_play, Onplay) ON_BN_CLICKED(IDC_pause, Onpause) ON_BN_CLICKED(IDC_stop, Onstop) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMP3Dlg message handlers BOOL CMP3Dlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog.  The framework does this automatically //  when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon m_slider.SetRange(0,1000);//滑块的移动范围0~1000     m_slider.SetPos(500);//滑块指针的初始位置设为500代表初始音量为50     GetDlgItem(IDC_play)->EnableWindow(false);//文件没有读取时所有按钮应该是不可选的     GetDlgItem(IDC_pause)->EnableWindow(false);     GetDlgItem(IDC_stop)->EnableWindow(false); // TODO: Add extra initialization here return TRUE;  // return TRUE  unless you set the focus to a control } void CMP3Dlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below //  to draw the icon.  For MFC applications using the documentiew model, //  this is automatically done for you by the framework. void CMP3Dlg::OnPaint()  { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle 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; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags //  the minimized window. HCURSOR CMP3Dlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CMP3Dlg::Onabout()  { // TODO: Add your control notification handler code here CAboutDlg dlg; dlg.DoModal();  } void CMP3Dlg::Onexitbt()  { // TODO: Add your control notification handler code here CDialog::OnCancel(); } void CMP3Dlg::OnCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult)  { // TODO: Add your control notification handler code here UpdateData(true);     m_int=m_slider.GetPos()/10;     setvolume(m_slider.GetPos());     UpdateData(false); *pResult = 0; } void CMP3Dlg::Onfilechoice()  { // TODO: Add your control notification handler code here char szFileFilter[]="mp3文件(*.mp3)|*.mp3|"                         "wma文件(*.wma)|*.wma|"                         "wav文件(*.wav)|*.wav|"                         "所有文件(*.*)|*.*|";     CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);     if(dlg.DoModal()==IDOK)     {         CString strFilepath=dlg.GetPathName();         CString strFilename=dlg.GetFileName();         SetDlgItemText(IDC_filename,strFilename);         Load(this->m_hWnd,strFilepath);         GetDlgItem(IDC_play)->EnableWindow(true);//文件读取成功时所有按钮变可选的         GetDlgItem(IDC_pause)->EnableWindow(true);         GetDlgItem(IDC_stop)->EnableWindow(true); } } void CMP3Dlg::Onplay()  { // TODO: Add your control notification handler code here     play();     SetDlgItemText(IDC_pause,"暂停"); } void CMP3Dlg::Onpause()  { // TODO: Add your control notification handler code here CString strtemp; GetDlgItemText(IDC_pause,strtemp);//获取按钮状态 if(strtemp.Compare("暂停")==0) {     pause();     SetDlgItemText(IDC_pause,"恢复"); }   if(strtemp.Compare("恢复")==0) {     resume();     SetDlgItemText(IDC_pause,"暂停"); }   } void CMP3Dlg::Onstop()  { // TODO: Add your control notification handler code here stop(); SetDlgItemText(IDC_pause,"暂停"); GetDlgItem(IDC_play)->EnableWindow(false);//当stop按钮按下时,播放和暂停应该均不可用 GetDlgItem(IDC_pause)->EnableWindow(false); } / MP3音乐播放器.cpp : Defines the class behaviors for the application. // #include "stdafx.h" #include "MP3音乐播放器.h" #include "MP3音乐播放器Dlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMP3App BEGIN_MESSAGE_MAP(CMP3App, CWinApp) //{{AFX_MSG_MAP(CMP3App) // NOTE - the ClassWizard will add and remove mapping macros here. //    DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMP3App construction CMP3App::CMP3App() { // TODO: add construction code here, // Place all significant initialization in InitInstance } ///////////////////////////////////////////////////////////////////////////// // The one and only CMP3App object CMP3App theApp; ///////////////////////////////////////////////////////////////////////////// // CMP3App initialization BOOL CMP3App::InitInstance() { AfxEnableControlContainer(); // Standard initialization // If you are not using these features and wish to reduce the size //  of your final executable, you should remove from the following //  the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif CMP3Dlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is //  dismissed with OK } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is //  dismissed with Cancel } // Since the dialog has been closed, return FALSE so that we exit the //  application, rather than start the application's message pump. return FALSE; } 2. 课程设计分析与结果 按照课程设计的要求,我们用C/C++来实现功能,但由于我们 在学过面向对象后,我们常用的是Visual Studio 2010版本的VS编辑器。在分析所要做的播放器时,想到的最基本的功能就是可以播放音乐,其次就是对播放过程中的操作,如:快进或快退、上一曲或下一曲、播放/暂停、音量大小、选择和添加歌曲、播放界面选择……等等功能。但是,由于学识有限,我们在这一周的时间内没有去考虑这么多功能,所以对于这样一个播放器,还是存在很多的改进方案。那么只有在以后的探索中慢慢来实现了。 3. 总结 经过三周的面向对象程序课程设计,我们小组学到了很多。在这三周的实际动手学习中,我们对VC++这门课程有了更深刻的认识,掌握了用MFC创建基于对话框的应用程序,同时了解了MCI相关知识。这次课程设计我做了MP3播放器的设计,MP3播放器主要对常用Windows音频格式的文件实现播放控制:播放歌曲、暂停播放、停止播放等;实现音量控制:静音、声音放大以及声音减小的功能。 本次课程设计中虽然可以实现播放、暂停、停止、播放界面美化以及音量等功能,但仍然存在着放多不足,比如进度条功能没有实现。 列表管理的功能以及循环播放功能始终无法实现,如果有时间一定会好好研究。 课设是辛苦劳累的,但是收获同样是巨大的,在课设中每解决一个问题,那种成就感是无法言语的,课设中第一次调试程序时出现了很多错误,其中有逻辑错误,编译能通过,运行始终无法通过,后来经过思考,进行了多次修改调试之后得到了运行结果;但是还是存在兼容性问题,电脑版本和系统以及软件的版本之间存在各种兼容性问题,因为之前在程序中几乎没见到过,所以一时不知从何处检查并改进,后来在老师和学长的帮助下,找到了问题,结果换了台电脑,经过改正调试最终达到了目的。像此类的问题还有很多,不过经过查询资料,咨询老师,与同学探讨最终得到了理想的程序。此外,我们还得到了一个结论,在课程设计中,老师的作用有时是不可或缺的,可以在关键时刻给我们一些重要的提示,从而方便我们解决各种问题。这就是我们小组对这次软件课程设计的总结。 参考文献 【1】《C 语言程序设计教程》 第三版 谭浩强 高等教育出版社 【2】《VC++数字图像处理》 何斌 人民邮电出版社
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服