ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:29.88KB ,
资源ID:3916549      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3916549.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(专业课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

专业课程设计.docx

1、专业课程设计目录1多媒体原理与应用 11.1多媒体信息的主要元素11.2多媒体技术的主要特点 11.3常见多媒体格式12系统设计方案32.1利用MFC AppWinzard生生成应用程序框架33程序运行图94播放器设计原理95总结与心得116参考文献121多媒体原理与应用1.1 多媒体信息的主要元素文本包含字母、数字、字、词等基本元素。多媒体系统除具备一般的文本处理功能外,还可应用人工智能技术对文本进行识别、理解、摘编、翻译、发音等。超文本是超媒体文档不可缺少的组成部分。超文本是对文本索引的一个应用,它能在一个或多个文档中快速地搜索特定的文本内容。图形(Graph)与图像(Image)都是多媒

2、体中的可视元素,它们有矢量图(Vector Drawn)和位图(bitmap)两种形式。矢量图常用于框架结构的图形处理,它的应用很广泛,如计算机辅助设计(CAD)系统中常用向量图来描述十分复杂的几何图形。适用于直线、方框、圆或多边形,以及其他可用角度,座标和距离来表示的那些图形。位图是由图像中各个像素点组成,这些存储位定义了各像素点的颜色和亮度。对位图的描述与分辩率和色彩的颜色种数有关,分辨率与色彩位数越高,占用存储空间就越大。在多媒体技术中,视频(Video)是一项重要的媒体。图像与视频是两个既有联系又有区别的概念。一般而言,静止的图片称为图像。动态的影视图像称为视频。静态图像的输入要靠扫描

3、仪、数字照像机等,而视频信号的输入只能是摄像机、录像机、影碟机以及电视接收机等可以输出连续图像信号的设备。动画(Animation)是采用计算机动画软件创作并生成的一系列可供实时演播的连续画面。计算机动画目前成功地用于广告业与影视业,尤其是将动画用于电影特技,使电脑动画技术与实拍画面相结合,真假难辨,取得了空前的成功。音频(Audio)是指大约在1520000Hz的频率范围的连续变化的波形。音频技术在多媒体中的应用极为广泛,多媒体涉及到多方面的音频处理技术,如:音频采集:把模拟信号转换成数字信号;语音编/解码:把语音数据进行压缩编码,解压缩;音乐合成:利用音乐合成芯片,把乐谱转换成乐曲输出;文

4、/语转换:将计算机的文本转换成声音输出;语音识别:让计算机能够听懂人的语音。1.2 多媒体技术的主要特点集成性:一方面是媒体信息的集成,另一方面是显示或表现媒体设备的集成。 实时性:声音、视频图像、动画等媒体是强实时的,多媒体系统提供了对这些时基媒体实时处理的能力。交互性:多媒体计算机与其他家用声像电器有多差别的关键特征,普通家用声像电器无交互性,即用户只能被动收看,而不能介入到媒体的加工和处理之中。1.3 常见多媒体格式波形音频是一种电子数字化声音,是计算机播放音频的一种重要的形式,它存储的声音的波形信息,特点是:当播放播形音频时,不管播放文件的设备是何种类型,都会得到相似的声音。波形音频文

5、件通常以.wav作为文件扩展名。由于采用波形音频存储电子需要大量的存储空间,因此它一般只用于短时间的声音播放。 MIDI(Musical Instrument Digital Interface)在多媒体音频中占有重要的位置,是播放和录制音乐的国际标准,它确定了连接音乐设备的电缆线、硬件和通信协议。多媒体计算机只需具有MIDI接口声卡和MIDI合成器,就具有处理MIDI的功能。MIDI在处理音乐时是将MIDI音乐设备上产生的活动编码记录下来,将这些数据传递到MIDI合成器上就能中现原来的演奏。MIDI的消息有两种类型:状态字节和数字字节。状态字节描述发送的类别(动作和函数),数字字节总是跟在状

6、态字节后,表示发送消息的实际值。数值字节的个数取决于状态字节表示的消息类型。MIDI通过通道字节最高位区别这两种类型。最高位为1表示状态字节,最高位为0表示数字字节。 CD音频采用红皮书标准,通过CD-ROM驱动器来播放CD音频。CD音频需要的存储量大,一张光盘大约能够存储10首歌,70分钟音频左右。在一般情况下,整个光盘都用来存储CD音频数据,并划分为多个音轨,轨道的具体长度可以不定,通常一个音轨对应一首曲目。CD音频的长度由分、秒、帧的形式来衡量,最小的单位为帧,每一帧为1/75秒,一分等于60秒。数字视频(Digital Video)使用数据信息在计算机上实现动画的效果,它是利用人眼睛的

7、视觉暂留形成的,使人们连续图像效果所需的最低播放速度是24幅/秒,播放速度越快,数字视频给人的视觉连续性效果越好。存储视频影像需要巨大的磁盘空间,一般来讲,1秒钟全屏视频信号需要大约28MB的空间。为了实现连续的视频播放,不仅需要有足够的空间来存储视频音像信息,还需要保证硬盘有28MB/秒的传播速度。Audio_Video_Interleaved(AVI)文件格式是由微软提出的在WINDOWS下存储视频信息的标准。AVI文件以一系列的位图来村存储视频信息,并同时在文件中假如一数字形式存储数字化视频信息,它实际上由一组信息流组成的文件。2系统设计方案2.1利用MFC AppWinzard生成应用

8、程序框架(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name文本框中输入文件名。Lacation文本框是指项目的本地路径。(2)单击OK按钮,弹出MFC AppWinzard_Step1对话框。选中基本对话框。最后单击Finish按钮,创建框架。(3)在对话框窗体上添加播放器用到的按钮控件,对话框和位图;以及对应需要用到的成员变量和成员函数。 (4)添加消息处理函数void CMyPlayerDlg:OnBtnOpen() /打开 CString str

9、Filter=所有支持文件(*.mp3,*.wav,*.wma)|*.mp3;*.wav;*.wma|; CFileDialog fdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,strFilter); if(fdlg.DoModal()=IDOK) CString strFileName=fdlg.GetPathName(); m_strPlayListArray.RemoveAll(); m_strPlayListArray.Add(strFileName); CString strList,strFile; strFile=GetFileTitle(strFile

10、Name); strList.Format(01 %s,strFile); m_pPlayListDlg-m_playlist.ResetContent(); m_pPlayListDlg-m_playlist.AddString(strList); Play(0); void CMyPlayerDlg:OnBtnNext() /上一首 / TODO: Add your control notification handler code here if(m_strPlayListArray.GetSize()=0) return; m_nNowPlaying+; if(m_nNowPlayin

11、g=m_strPlayListArray.GetSize() m_nNowPlaying=0; Play(m_nPlayOrderm_nNowPlaying);void CMyPlayerDlg:OnBtnPlay() /播放 / TODO: Add your control notification handler code here int n=m_pPlayListDlg-m_playlist.GetCurSel(); if(n0) Play(m_nPlayOrder0); m_nNowPlaying=0; return; Play(n); if(m_nPlayMode=MODE_RAN

12、D) for(int i=0;im_strPlayListArray.GetSize();i+) if(m_nPlayOrderi=n) m_nNowPlaying=i; break; else m_nNowPlaying=n; void CMyPlayerDlg:OnBtnPrev() /下一首 / TODO: Add your control notification handler code here if(m_strPlayListArray.GetSize()=0) return; m_nNowPlaying-; if(m_nNowPlayingIsWindowVisible() m

13、_pPlayListDlg-ShowWindow(SW_HIDE); m_btnPLShow.SetBitmap(IDB_PLAYLIST_SHOW_NORMAL,IDB_PLAYLIST_SHOW_OVER); m_btnPLShow.SetToolTipText(显示播放列表); else m_pPlayListDlg-ShowWindow(SW_SHOW); m_btnPLShow.SetBitmap(IDB_PLAYLIST_HIDE_NORMAL,IDB_PLAYLIST_HIDE_OVER); m_btnPLShow.SetToolTipText(关闭播放列表); void CMy

14、PlayerDlg:OnLyric() /打开和关闭歌词对话框 / TODO: Add your control notification handler code here if(m_pLyricDlg!=NULL) if(m_pLyricDlg-IsWindowVisible() m_pLyricDlg-ShowWindow(SW_HIDE); m_btnLyric.SetBitmap(IDB_LYRIC_SHOW_NORMAL,IDB_LYRIC_SHOW_OVER); m_btnLyric.SetToolTipText(打开歌词); else m_pLyricDlg-ShowWindo

15、w(SW_SHOW); m_btnLyric.SetBitmap(IDB_LYRIC_HIDE_NORMAL,IDB_LYRIC_HIDE_OVER); m_btnLyric.SetToolTipText(关闭歌词); void CMyPlayerDlg:OnBtnVolume() /声音调教按钮 / TODO: Add your control notification handler code here m_nVolume=m_volume.GetPos(); int nSetVol=63*m_nVolume; if(nSetVol1000) nSetVol=1000; if(hAudio

16、!=NULL); MCIWndSetVolume(hAudio,nSetVol);void CMyPlayerDlg:OnStaticMode() /播放状态控制 / TODO: Add your control notification handler code here static int nCounter=0; nCounter+; if(nCounter=3) nCounter=0; switch(nCounter) case 0: m_stcMode.SetWindowText(随机); m_nPlayMode=MODE_RAND; theApp.RandOrder(); brea

17、k; case 1: m_stcMode.SetWindowText(顺序); m_nPlayMode=MODE_SEQ; m_nNowPlaying=m_nPlayOrderm_nNowPlaying; theApp.SequenceOrder(); break; case 2: m_stcMode.SetWindowText(单曲); m_nPlayMode=MODE_SINGLE; break; void CMyPlayerDlg:OnStaticPlay() /暂停 / TODO: Add your control notification handler code here if(h

18、Audio=NULL) return; fPlay=!fPlay; if(fPlay) m_stcPlay.SetWindowText(播放); MCIWndResume(hAudio); else m_stcPlay.SetWindowText(暂停); MCIWndPause(hAudio); CLyricDlg:CLyricDlg(CWnd* pParent ) /歌词对话框 : CDialog(CLyricDlg:IDD, pParent) /AFX_DATA_INIT(CLyricDlg) / NOTE: the ClassWizard will add member initial

19、ization here /AFX_DATA_INIT m_pParent=pParent; m_nID=CLyricDlg:IDD; /获得歌词对话框的IDvoid CLyricDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); /AFX_DATA_MAP(CLyricDlg) / NOTE: the ClassWizard will add DDX and DDV calls here /AFX_DATA_MAPBEGIN_MESSAGE_MAP(CLyricDlg, CDialog) /AFX_MSG_M

20、AP(CLyricDlg) ON_WM_CTLCOLOR() ON_WM_LBUTTONDOWN() ON_WM_TIMER() ON_WM_CREATE() ON_WM_DESTROY() ON_WM_MOVE() ON_WM_PAINT() ON_WM_RBUTTONDOWN() ON_COMMAND(IDC_HIDE_MAIN, OnHideMain) ON_COMMAND(IDC_HIDE_LYRIC, OnHideLyric) /AFX_MSG_MAPEND_MESSAGE_MAP()/ CLyricDlg message handlersBOOL CLyricDlg:Create(

21、) return CDialog:Create(m_nID, m_pParent); /创建歌词对话框void CPlayListDlg:OnAdd() /添加歌曲 / TODO: Add your control notification handler code here CRect rect; GetDlgItem(IDC_BTN_ADD)-GetWindowRect(&rect); CMenu m_Menu; m_Menu.LoadMenu(IDR_MENU_ADD); m_Menu.GetSubMenu(0)-TrackPopupMenu(TPM_RIGHTBUTTON, rect.

22、left, rect.bottom,this,NULL);void CPlayListDlg:OnDel() /删除歌曲 / TODO: Add your control notification handler code here CRect rect; GetDlgItem(IDC_BTN_DEL)-GetWindowRect(&rect); CMenu m_Menu; m_Menu.LoadMenu(IDR_MENU_DEL); m_Menu.GetSubMenu(0)-TrackPopupMenu(TPM_RIGHTBUTTON, rect.left, rect.bottom,this

23、,NULL); 3程序运行图4播放器设计原理 MCI ( Media Control Interface,媒体控制接口 ) 向基于Windows操作系统的应用程序提供了高层次的控制媒体设备接口的能力。程序员不再需要关心具体设备的差异,就可以对激光唱机(CD)、视盘机、波形音频设备、视频播放设备和MIDI设备等媒体设备进行控制。对于程序员来说,可以把MCI理解为设备面板上的一排按键,通过选择不同的按键(发送不同的MCI命令)可以让设备完成各种功能,而不必关心设备内部如何实现。比如,对于play,视盘机和CD机有不同的反应(一个是播放视频,一个播放音频),而对用户来说却只需要按同一按钮。应用程序通

24、过MCI发送相应的命令来控制媒体设备。MCI分为命令字符串和命令消息两种,两者具有类似的功能。命令字符串具有使用简单的特点,但是它的执行效率略低于命令消息。所有的MCI命令字符串都是通过多媒体API函数mciSendString传递给MCI的,该函数的声明为:MCIERROR mciSendString(LPCTSTR lpszCommand, /MCI命令字符串LPTSTR lpszReturnString, /存放反馈信息的缓冲区UINT cchReturn, /缓冲区的长度HANDLE hwndCallback /回调窗口的句柄,一般为NULL); /若成功则返回0,否则返回错误码。该函

25、数返回的错误码可以用mciGetErrorString函数进行分析,该函数的声明为:BOOL mciGetErrorString(DWORD fdwError, /函数mciSendString或mciSendCommand返回的错误码LPTSTR lpszErrorText, /接收描述错误的字符串的缓冲区UINT cchErrorText /缓冲区的长度);消息数据的主要用法是,把消息数据结构中的成员赋予相应值,然后通过mciSendCommand函数把此消息数据按传地址方式传过去,操作成功后就可以查看该消息数据中的你需要的内容,当然每个消息的成员的数据成员都有可能不一样,在这里列出所有的

26、消息结构显得不太合适,MSDN已经很完善了。这里我还要提一下的就是MCI_DGV_STATUS_PARMS这个消息书籍结构,它可以用于多个地方,例如查看播放速度、获得视频现在的播放位置等等,这个结构中的两个成员dwItem和dwReturn很有意思,例如你将dwItem赋值为MCI_STATUS_POSITION时,得到dwReturn的值是视频现在的播放位置,而当你dwItem赋值为MCI_DGV_STATUS_SPEED时,得到dwReturn的值是视频的播放速度。其实MCI编程并不难,比较烦人的地方就是它有太多的参数要记,而这么多参数中又有很多不同的数据结构,解决的唯一办法就是多练习多记,只有在熟悉大部分数据结构的基础上才能在MCI编程里面游刃有余。该程序基本完成了一个播放器需要的基本功能,能显示进度条 能通过进度条的拖动到歌曲相应位置,但是不足之处也是很多,首先一些空间在刷过背景图后成了白色的块块影响美观,没有完成连续播放,随机播放,单曲循环等等,没有实现音量的变化,在时间的位置没有把秒转化为分钟:秒的样子,由于时间的原因从原先不会mci到现在懂得了点皮毛并作出了个播放器,我觉得我收获还是挺大的,通过这个程序以及这一周来的时间做的课程设计,我对对话框的编程又有了更深入的认识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1