当前位置:文档之家› MP3播放器程序课程设计书

MP3播放器程序课程设计书

中北大学课程设计说明书学生姓名:李衍朋学号:37 学院:信息与通信工程学院专业:信息工程题目:mp3播放器指导教师职称: 副教授年月日下达任务书日期: 2016 年5 月27 日课程设计任务书课程设计任务书目录1.摘要---------------------------------------------------1 1.1)设计内容--------------------------------------------1 1.2)MCI简介--------------------------------------------1 1.2-①任务-----------------------------------------------2 1.2-②各模块功能设计-------------------------------------3 1.2-③操作步骤------------------------------------------41.2-④函数代码------------------------------------------52.课程设计分析与结果------------------------------------133.总结--------------------------------------------------14 参考文献------------------------------------------------141.摘要利用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 Aboutclass 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// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_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_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CMP3Dlg dialogCMP3Dlg::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_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////// // CMP3Dlg message handlersBOOL 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 dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small iconm_slider.SetRange(0,1000);//滑块的移动范围0~1000m_slider.SetPos(500);//滑块指针的初始位置设为500代表初始音量为50 GetDlgItem(IDC_play)->EnableWindow(false);//文件没有读取时所有按钮应该是不可选的GetDlgItem(IDC_pause)->EnableWindow(false);GetDlgItem(IDC_stop)->EnableWindow(false);// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a controlvoid 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 bel ow// 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 paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint 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 icondc.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 hereCAboutDlg dlg;dlg.DoModal();}void CMP3Dlg::Onexitbt(){// TODO: Add your control notification handler code hereCDialog::OnCancel();}void CMP3Dlg::OnCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult){// TODO: Add your control notification handler code hereUpdateData(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 herechar 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 hereplay();SetDlgItemText(IDC_pause,"暂停");}void CMP3Dlg::Onpause(){// TODO: Add your control notification handler code hereCString strtemp;GetDlgItemText(IDC_pause,strtemp);//获取按钮状态if(pare("暂停")==0){pause();SetDlgItemText(IDC_pause,"恢复");}if(pare("恢复")==0){resume();SetDlgItemText(IDC_pause,"暂停");}}void CMP3Dlg::Onstop(){// TODO: Add your control notification handler code herestop();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_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// CMP3AppBEGIN_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_MSGON_COMMAND(ID_HELP, CWinApp::OnHelp)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMP3App constructionCMP3App::CMP3App(){// TODO: add construction code here,// Place all significant initialization in InitInstance}/////////////////////////////////////////////////////////////////////////////// The one and only CMP3App objectCMP3App theApp;/////////////////////////////////////////////////////////////////////////////// CMP3App initializationBOOL 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 _AFXDLLEnable3dControls(); // Call this when using MFC in a shared DLL #elseEnable3dControlsStatic(); // Call this when linking to MFC statically #endifCMP3Dlg 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编辑器。

相关主题