vc++课程设计报告-音频播放器.doc_第1页
vc++课程设计报告-音频播放器.doc_第2页
vc++课程设计报告-音频播放器.doc_第3页
vc++课程设计报告-音频播放器.doc_第4页
vc++课程设计报告-音频播放器.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VC+课程设计 福建工程学院VC+课程设计课 题: 音频播放器 班 级: 通信1202 学 号: 3120210114 姓 名: 同组组员: 指导老师: 日 期: 2013/11/2511/29 目 录一、设计目的与要求3二、准备工作3三、系统分析及实现步骤33.1、系统实现的方法.33.2、程序设计的总框图.43.3、项目的具体设计方案(设计原理与流程图等)43.4 扩展部分(根据实际情况而定,如果没有扩展部分,则不写)93.5 类声明与核心算法程序代码.12四、测试与结论20五、课程设计总结24六、参考文献25七、附录2521、 设计的目的与要求多媒体技术的发展使得计算机应用范围更加广泛,目前各类多媒体播放软件层出不穷。试开发一个简易的音频播放器,求如下:1、 菜单式的人机界面。2、 具有打开、播放、停止、暂停、定时播放的功能。3、 可控制音量、左右声道、静音。4、具有显示音频波形的特效。 二、准备工作在开始做课程设计项目前应:1、 应回顾或复习C+专业课所学习的内容,及课外编程实例2、 需要一台PC机3、 安装Visual C+6.0集成开发环境软件4、 项目主要用到的函数 OnAdd()添加功能StoreList()、ReadList()播放列表功能 On Clear() 清空播放列表功能 OnPlayOrPause()播放/暂停功能 SetVolumee、Oninvolume()、Ondevolume() 音量功能 BOOL LineTo()MoveToEx()波形显示GetDlgItem()Getwindowtext()SetWindowText()定时播放功能三、系统分析与项目的实现步骤3.1、系统实现的方法: MFC类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC AppWizard向导根据继承性利用MFC派生出自己的类,并对Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互联系,实现了标准Windows应用程序的功能,这就是向导生成的所谓MFC应用程序框架。每个MFC类都包括了一些函数,函数放到类中,符合C+编程方法。这些函数,必须通过类定义对象才能使用。 在本次设计中,首先,理清课程设计和编写程序的思路,明确程序中所要用到的函数,并做好了解。然后,再利用C+类的继承与派生原理来构造所需要的类,编写实现每项功能的详细代码。利用MFC提供的菜单资源来创建菜单,通过类向导建立类,函数,或者消息响应,来实现播放器的各种功能。采用不同的Windows提供的坐标系统和对话框资源,并利用设备环境来绘制和更新图形,使播放器的界面更加美观,实现较好的人机交互界面。 画出系统模块功能图 : 3.2、程序设计的总框图添加音乐及视频开始播放停止播放结束退出暂停3.3、项目的具体设计方案设计原理:MP3播放器主要对常用Windows音频格式的文件实现播控制:播放歌曲、暂停播放、停止播放等;实现音量控制:静音、声音放大以及声音减小的功能。此播放器编写的时候,利用的是MFC单文档程序的构成框架,然后再利用Windows提供的资源,运用控件,自己制作对话框和人机交互界面。在制作界面的同时,也制作各个按钮,并完成各个按钮的消息响应,便完成响应函数,实现了功能。MFC类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFC AppWizard向导根据继承性利用MFC派生出自己的类,并对Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互联系,实现了标准Windows应用程序的功能,这就是向导生成的所谓MFC应用程序框架。每个MFC类都包括了一些函数,函数放到类中,符合C+编程方法。这些函数,必须通过类定义对象才能使用。在本次设计中,首先,理清课程设计和编写程序的思路,明确程序所要用到的函数,并做好了解。然后,再利用C+类的继承与派生原理来构造所需要的类,编写实现每项功能的详细代码。利用MFC提供的菜单资源来创建菜单,通过类向导建立类,函数,或者消息响应,来实现播放器的各种功能。 1、人机界面设计 播放器界面设计 打开VC C+6.0新建一个工程,选择对话框。便生成了一个 窗口。然后打开ResouceView,点开Dialog,插入Dialog,利用控件,绘制各 按钮。如图所示: 2、添加media player控件 如图所示: 3、 各按钮功能的实现(1) 处理“添加文件”按钮 单击“添加文件”按钮后,在Onopen()函数中,首先对文件类型进行过滤,调用OpenFiles()函数打开对话框选择一个音频文件,通过InitPath()函数获取文件路径,通过InitPath()函数获取文件名后,调用SaveList()函数在Static Text控件上显示你所选择的歌曲文件名,然后再单击播放按钮,便可以播放歌曲。 3.4 扩展部分1. 简单声音录制与播放vmf库中提供了一组录制声音的函数,通过MCIWndCanRecord函数可以判断系统能否录制声音,通过函数MCIWndRecord可以进行声音录制。如果要播放录制的声音可以使用MCIWndPlay函数。界面设计如下:2. 视频播放运用Windows media player控件可以支持播放多种格式的音乐和视频,Windows media player控件不是系统默认控件,所以需要向该工程中添加该控件,视频播放展示: 3.5 类声明与核心算法程序代码1.类与函数层次介绍CMP3_1DlgPlaySetVolumnStopLoadPause图7-1-a类与函数层次关系图Pause:暂态正在播放的音乐Play:控制音乐播放Stop:停止播放音乐Load:加载播放的音乐RetVolumn:设置音乐播放音量2. 核心代码功能介绍BOOL CMP3_1Dlg:OnInitDialog()/系统参数初始化函数CDialog:OnInitDialog();.SetWindowPos(NULL,0,0,480,340,SWP_NOMOVE);/界面无相对移动m_channel.SetRange(0,200);/设置左右声道滑块范围m_channel.SetPos(100);/设置左右声道滑块初始范围/ TODO: Add extra initialization herefor(int i=0;i24;i+)/定时器设置时CString temp;temp.Format(%02d,i);m_hour.AddString(temp);for(int p=0;pSetWindowText(PathName); PathName.MakeUpper(); void CMP3_1Dlg:OnAdd() /定时器文件添加函数/ TODO: Add your control notification handler code herechar 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| Media File(*.mmm)|*.mmm| Mid File(*.mid;*,rmi)|*.mid;*.rmi| MPEG File(*.mpeg)|*.mpeg| Flv File(*.flv)|*.flv| WMV File(*.wmv)|*.wmv| All File(*.*)|*.*| ;/文件类型过滤 CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); / CFileDialog log(TRUE,文件,*.wav,OFN_HIDEREADONLY,声音文件(*.wav)|*.wav|,NULL);if(dlg.DoModal()=IDOK)pathname=dlg.GetPathName(); GetDlgItem(IDC_EDWAVFILE)-SetWindowText(pathname);pathname.MakeUpper(); void CMP3_1Dlg:OnSet() /定时播放歌曲设定函数/ TODO: Add your control notification handler code here/*CString name;GetDlgItem(IDC_BTSET)-GetWindowText(name);if(name=重新设置)GetDlgItem(IDC_BTSET)-SetWindowText(设置);m_hour.EnableWindow();m_minu.EnableWindow();m_wavfile.EnableWindow();elseGetDlgItem(IDC_BTSET)-SetWindowText(重新设置);m_hour.EnableWindow(FALSE);m_minu.EnableWindow(FALSE);m_wavfile.EnableWindow(FALSE);CString sound,hour,minu,time;GetDlgItem(IDC_CMBHOUR)-GetWindowText(hour);GetDlgItem(IDC_CMBMINU)-GetWindowText(minu);GetDlgItem(IDC_EDWAVFILE)-GetWindowText(sound);if(sound.IsEmpty()MessageBox(请选择声音文件,提示,MB_OK);return;if(hour.IsEmpty()MessageBox(请选择声音小时,提示,MB_OK);return;if(minu.IsEmpty()MessageBox(请选择声音分钟,提示,MB_OK);return;time.Format(%s:%s,hour,minu);strtime=time;strsound=sound;SetTimer(1,1000,NULL);/*/*系统定时函数*void CMP3_1Dlg:OnTimer(UINT nIDEvent) CTime tt;tt=CTime:GetCurrentTime();CString tmp=tt.Format(%H:%M);if(tmp=strtime)KillTimer(1);m_player.SetUrl(pathname); /*左右声道设置函数*/void CMP3_1Dlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) DWORD pos;int scrollpos;scrollpos=m_channel.GetPos();if(scrollpos100):waveOutGetVolume(0,&pos);pos=pos&0x0000ffff|(scrollpos+50)100):waveOutGetVolume(0,&pos);pos=pos&0xffff0000|(scrollpos-50)m_hWnd,:AfxGetApp()-m_hInstance,WS_CAPTION,NULL);MCIWndNew(mciwav,waveaudio); if(MCIWndCanRecord(mciwav) MCIWndRecord(mciwav);void CMP3_1Dlg:Onplay() /开始播放文件/ TODO: Add your control notification handler code herem_player.SetUrl(PathName); 4、 测试与结论1.经过测试该MP3具有打开、播放、停止、暂停、定时播放的功能。可控制音量、左右声道、静音,可以实现显示音频波形的特效。MP3播放测试如下:2. 经过测试,该软件可以支持多种主流视频格式的波荡。视频播放测试如下:5、 课程设计总结 6、 参考文献1明日科技编著:Visual C+开发经验技巧宝典,人民邮电出版社2007年版。2刘锐宁编著:Visual C+开发实战1200例第一卷,清华大学出版社2011年版。3明日科技编著:Visual C+程序开发范例宝典,人民邮电出版社2007年版。4董正言 张聪编著:面向对象的程序设计(C+版),清华大学出版社2014年版。七、附录主要程序的完整代码,人机界面图(备注:字体统一用宋体、小四)附件一:人机界面图附件二:程序主要源代码/ MP3_1Dlg.cpp : implementation file/#include stdafx.h#include MP3_1.h#include MP3_1Dlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialogpublic: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_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMP3_1Dlg dialogCMP3_1Dlg:CMP3_1Dlg(CWnd* pParent /*=NULL*/): CDialog(CMP3_1Dlg:IDD, pParent)/AFX_DATA_INIT(CMP3_1Dlg)/AFX_DATA_INIT/ Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME);void CMP3_1Dlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CMP3_1Dlg)DDX_Control(pDX, IDC_CHANNEL, m_channel);DDX_Control(pDX, IDC_PLAYLIST, m_playlist);DDX_Control(pDX, IDC_EDWAVFILE, m_wavfile);DDX_Control(pDX, IDC_CMBMINU, m_minu);DDX_Control(pDX, IDC_CMBHOUR, m_hour);DDX_Control(pDX, IDC_OCX1, m_player);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CMP3_1Dlg, CDialog)/AFX_MSG_MAP(CMP3_1Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_OPEN, OnOpen)ON_EN_CHANGE(IDC_EDWAVFILE, OnChangeEdwavfile)ON_CBN_EDITCHANGE(IDC_CMBHOUR, OnEditchangeCmbhour)ON_CBN_EDITCHANGE(IDC_CMBMINU, OnEditchangeCmbminu)ON_BN_CLICKED(IDC_BTADD, OnAdd)ON_BN_CLICKED(IDC_BTEST, OnSet)ON_WM_TIMER()ON_BN_CLICKED(IDC_BTRECORD, OnRecord)ON_BN_CLICKED(IDC_BTSTOP, OnStop)ON_BN_CLICKED(IDC_BTPLAY, OnPlay)ON_NOTIFY(NM_OUTOFMEMORY, IDC_CHANNEL, OnOutofmemoryChannel)ON_WM_HSCROLL()ON_EN_CHANGE(IDC_PLAYLIST, OnChangePlaylist)ON_BN_CLICKED(IDDELE, Onlist)ON_BN_CLICKED(IDC_REC, OnRec)ON_BN_CLICKED(IDC_LRSOUND, OnLrsound)ON_BN_CLICKED(IDC_SETTIME, OnSettime)ON_BN_CLICKED(IDC_play, Onplay)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMP3_1Dlg message handlersBOOL CMP3_1Dlg: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 AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the applications main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon SetWindowPos(NULL,0,0,480,340,SWP_NOMOVE);/无相对移动m_channel.SetRange(0,200);m_channel.SetPos(100);/ TODO: Add extra initialization herefor(int i=0;i24;i+)CString temp;temp.Format(%02d,i);m_hour.AddString(temp);for(int p=0;pSetWindowText(PathName); PathName.MakeUpper(); void CMP3_1Dlg:OnChangeEdwavfile() / TODO: If this is a RICHEDIT control, the control will not/ send this notification unless you override the CDialog:OnInitDialog()/ function and call CRichEditCtrl().SetEventMask()/ with the ENM_CHANGE flag ORed into the mask./ TODO: Add your control notification handler code herevoid CMP3_1Dlg:OnEditchangeCmbhour() / TODO: Add your control notification handler code herevoid CMP3_1Dlg:OnEditchangeCmbminu() / TODO: Add your control notification handler code herevoid CMP3_1Dlg:OnAdd() / TODO: Add your control notification handler code herechar 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| Media File(*.mmm)|*.mmm| Mid File(*.mid;*,rmi)|*.mid;*.rmi| MPEG File(*.mpeg)|*.mpeg| Flv File(*.flv)|*.flv| WMV File(*.wmv)|*.wmv| All File(*.*)|*.*| ;/文件类型过滤 CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); / CFileDialog log(TRUE,文件,*.wav,OFN_HIDEREADONLY,声音文件(*.wav)|*.wav|,NULL);if(dlg.DoModal()=IDOK)pathname=dlg.GetPathName(); GetDlgItem(IDC_EDWAVFILE)-SetWindowText(pathname);pathname.MakeUpper(); void CMP3_1Dlg:OnSet() / TODO: Add your control notification handler code here/*CString name;GetDlgItem(IDC_BTSET)-GetWindowText(name);if(name=重新设置)GetDlgItem(IDC_BTSET)-SetWindowText(设置);m_hour.EnableWindow();m_minu.EnableWindow();m_wavfile.EnableWindow();elseGetDlgItem(IDC_BTSET)-SetWindowText(重新设置);m_hour.EnableWindow(FALSE);m_minu.EnableWindow(FALSE);m_wavfile.EnableWindow(FALSE);CString sound,hour,minu,time;GetDlgItem(IDC_CMBHOUR)-GetWindowText(hour);GetDlgItem(IDC_CMBMINU)-GetWindowText(minu);GetDlgItem(IDC_EDWAVFILE)-GetWindowText(sound);if(sound.IsEmpty()MessageBox(请选择声音文件,提示,MB_OK);return;if(hour.IsEmpty()MessageBox(请选择声音小时,提示,MB_OK);return;if(minu.IsEmpty()MessageBox(请选择声音分钟,提示,MB_OK);return;time.Format(%s:%s,hour,minu);strtime=time;strsound=sound;SetTimer(1,1000,NULL);/*/*系统定时函数*void CMP3_1Dlg:OnTimer(UINT nIDEvent) CTime tt;tt=CTime:GetCurrentTime();CString tmp=tt.Format(%H:%M);if(tmp=strtime)KillTimer(1);m_player.SetUrl(pathname); void CMP3_1Dlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) DWORD pos;int scrollpos;scrollpos=m_channel.GetPos();if(scrollpos100):waveOutGetVolume(0,&pos);pos=pos&0x0000ffff|(scrollpos+50)100):waveOutGetVolume(0,&pos);pos=pos&0xffff0000|(scrollpos-50)m_hWnd,:AfxGetApp()-m_hInstance,WS_CAPTION,NULL);MCIWndNew(mciwav,waveaudio); if(MCIWndCanRecord(mciwav) MCIWndRecord(mciwav);void CMP3_1Dlg:OnStop() / TODO: Add your control notification handler code hereMCIWndStop(mciwav);void CMP3_1Dlg:OnPlay() / TODO: Add your control notification handler code hereif(MCIWndCanPlay(mciwav)MCIWndPlay(mciw

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论