pm3播放器信息工程课程设计说明书大学毕设论文Word文件下载.docx
《pm3播放器信息工程课程设计说明书大学毕设论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《pm3播放器信息工程课程设计说明书大学毕设论文Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
4.主要参考文献:
VisualC++课程设计案例精编(第二版)
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
1.摘要
利用MFC应用程序、媒体控制接口MIC的基本知识,设计一个MP3播放器。
要求能够播放常用Windows音频格式的文件;
实现播放控制:
播放、暂停、停止等;
实现音量控制:
静音、声音放大减小;
实现播放列表管理:
加入文件、加入目录、删除文件等功能
关键词:
MP3播放器的设计
设计目的利用VC++开发一个支持wav、mp3、wma等不同音频格式的媒体播放器。
通过课程设计掌握多媒体编程的基本原理。
1)设计内容
MP3播放器的设计是利用MFC应用程序、媒体控制接口MIC的基本知识而设计的。
(MFC简介)MFC是VisualC++是核心。
MFC类库将所有图形用户界面的元素如窗口、菜单和按钮等都以类的形式进行了封装,MFCAppWizard向导根据继承性利用MFC派生出自己的类,并对Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互联系,实现了标准Windows应用程序的功能,这就是向导生成的所谓MFC应用程序框架。
每个MFC类都包括了一些函数,函数放到类中,符合C++编程方法。
这些函数,必须通过类定义对象才能使用
2)MCI简介
MCI(MediaControlInterface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。
它所支持的媒体格式包括mp3、avi、wav、mpeg等等[2]。
音频技术发展较早,几年前一些技术已经成熟并产品化,音频技术主要包括四个方面:
音频数字化、语音处理、语音合成及语音识别。
音频文件包括多种格式的文件,MP3就是其中的一种。
MP3的全称是MovingPictureExpertsGroup,AudioLayerⅢ,它所使用的技术是在VCD(MPEG-1)的音频压缩技术上发展出的第三代,而不是MPEG-3。
MP3是一种音频压缩的国际技术标准,它一般需要MP3播放器来读取
1 任务:
1)编程实现一个可支持多种音频格式的媒体播放器,其基本功能包括媒体播放、音量调节、播放进度选择、暂停、停止以及歌曲信息的查询与添加等;
2)给出程序的总体设计和详细设计,要求程序总体架构
3)图详细设计的流程图说明等
表一
2 各模块功能设计
2.1处理“打开”按钮
单击“打开”按钮后,在onfilechoice()函数中,首先对文件类型进行过滤,调用GetSystemMene()函数打开对话框选择一个媒体文件,通过GetPathName()函数获取文件路径,通过onfilechoice()函数获取文件名后,调用DisplayInfo()函数在StaticText控件上显示“你选择的歌曲是(文件名)”,然后利用pause()函数设置“暂停”按钮以及“停止”按钮不可用。
2.2处理“播放”按钮
单击“播放”按钮后,在onplay()函数中,通过调用CMP3Dlg类的GetPathName函数获取刚才选择的文件路径以及文件名,调用该类的voidplay()函数播放歌曲,此时调用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)->
,
10将停止正在播放歌曲,利用GetDlgItem()函数设置“暂停”按钮和“停止”按钮不可用。
2.5处理“音量”滑块
拉动“音量”滑块后,在m_slider.SetRange(0,1000)中,设置滑块的移动范围为0~1000。
在启动程序时,通过m_slider.SetPos(500)函数设置滑块指针的初始位置设为500且代表初始音量为50。
2.6处理“退出”按钮单击“退出”按钮后,在Onexitbt()函数中,调用CDialog类的OnCancel()函数将退出对话框,结束程序的运行
3 操作步骤
1)先在VS环境下建立好一个基于对话框的工程。
2)打开资源视图,在对话框内按照布局图布局,步好后根据表-1来设置属性。
添加相应的变量和函数。
3)进行程序初始化。
4)为各个按钮添加消息处理函数,并添加相应的代码。
5)全部完成后进行测试和调试。
④函数代码
/////////////////////////////////////////////////////////////////////////////
//
CAboutDlg
dialog
used
for
App
About
class
:
public
CDialog
{
public:
CAboutDlg();
Dialog
Data
//{{AFX_DATA(CAboutDlg)
enum
{
IDD
=
IDD_ABOUTBOX
};
//}}AFX_DATA
ClassWizard
generated
virtual
function
overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
void
DoDataExchange(CDataExchange*
pDX);
DDX/DDV
support
//}}AFX_VIRTUAL
Implementation
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
CAboutDlg:
CAboutDlg()
CDialog(CAboutDlg:
IDD)
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
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;
Note
that
LoadIcon
does
not
require
a
subsequent
DestroyIcon
in
Win32
m_hIcon
AfxGetApp()->
LoadIcon(IDI_ICON1);
//{{AFX_DATA_MAP(CMP3Dlg)
DDX_Control(pDX,
IDC_SLIDER,
m_slider);
DDX_Text(pDX,
IDC_vol,
m_int);
BEGIN_MESSAGE_MAP(CMP3Dlg,
//{{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,
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)
BOOL
OnInitDialog()
OnInitDialog();
Add
"
About..."
menu
item
to
system
menu.
IDM_ABOUTBOX
must
be
the
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);
(!
strAboutMenu.IsEmpty())
pSysMenu->
AppendMenu(MF_SEPARATOR);
AppendMenu(MF_STRING,
IDM_ABOUTBOX,
strAboutMenu);
Set
icon
this
dialog.
The
framework
automatically
when
application'
s
main
window
is
SetIcon(m_hIcon,
TRUE);
//
big
icon
FALSE);
small
m_slider.SetRange(0,1000);
//滑块的移动范围0~1000
m_slider.SetPos(500);
//滑块指针的初始位置设为500代表初始音量为50
GetDlgItem(IDC_play)->
EnableWindow(false);
//文件没有读取时所有按钮应该是不可选的
GetDlgItem(IDC_pause)->
GetDlgItem(IDC_stop)->
TODO:
extra
initialization
here
return
TRUE;
TRUE
unless
you
set
focus
control
OnSysCommand(UINT
nID,
LPARAM
lParam)
((nID
IDM_ABOUTBOX)
dlgAbout;
dlgAbout.DoModal();
else
OnSysCommand(nID,
lParam);
If
add
minimize
button
your
dialog,
will
need
code
below
draw
icon.
For
MFC
applications
using
document
iew
model,
automatically
done
by
framework.
OnPaint()
(IsIconic())
CPaintDC
dc(this);
device
context
painting
SendMessage(WM_ICONERASEBKGND,
(WPARAM)
dc.GetSafeHdc(),
0);
Center
client
rectangle
int
cxIcon
GetSystemMetrics(SM_CXICON);
cyIcon
GetSystemMetrics(SM_CYICON);
CRect
rect;
GetClientRect(&
rect);
x
(rect.Width()
-
+
1)
/
2;
y
(rect.Height()
Draw
dc.DrawIcon(x,
y,
m_hIcon);
OnPaint();
calls
obtain
cursor
display
while
user
drags
minimized
window.
HCURSOR
OnQueryDragIcon()
(HCURSOR)
m_hIcon;
Onabout()
control
notification
handler
dlg;
dlg.DoModal();
Onexitbt()
OnCancel();
OnCustomdrawSlider(NMHDR*
pNMHDR,
LRESULT*
pResult)
UpdateData(true);
m_int=m_slider.GetPos()/10;
setvolume(m_slider.GetPos());
UpdateData(false);
*pResult
Onfilechoice()
char
szFileFilter[]="
mp3文件(*.mp3)|*.mp3|"
wma文件(*.wma)|*.wma|"
wav文件(*.wav)|*.wav|"
所有文件(*.*)|*.*|"
;
CFileDialog
dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
if(dlg.DoModal()==IDOK)
strFilepath=dlg.GetPathName();
strFilename=dlg.GetFileName();
SetDlgItemText(IDC_filename,strFilename);
Load(this->
m_hWnd,strFilepath);
EnableWindow(true);
//文件读取成功时所有按钮变可选的
Onplay()
play();
SetDlgItemText(IDC_pause,"
暂停"
);
Onpause()
strtemp;
GetDlgItemText(IDC_pause,strtemp);
//获取按钮状态
if(strtemp.Compare("
)==0)
pause();
恢复"
}
resume();
Onstop()
stop();
SetDlgItemText(IDC_pa