您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 11 多媒体应用程序设计(OK)
引言通过前面的讲解,我们已经学习了:面向对象的基本概念:类与对象、继承与派生、多态性与虚函数、流等;面向对象开发工具VC++:IDE集成环境、对话框与控件、文档与视图、图形设备等;从本次课开始,我们将花三次课时间,学习运用VC++编写高级应用程序,如多媒体编程、数据库设计及网络程序设计等。抛砖引玉使用音频函数用MCI控制波形声音的播放WindowsMediaPlayer控件常见格式图片的显示第11单元多媒体应用程序设计MessageBeep()函数:用来播放系统提示音sndPlaySound()函数:播放wav音频PlaySound()函数:播放来自资源中的声音PlaySound()sndPlaySound()MessageBeep()功能包含关系几个常用的音频函数:11.1使用音频函数【例】设计一个简单的音频播放程序,程序启动时,播放windows系动启动时候的音乐1.创建对话框工程文件:MCIStart2.打开Stdafx.h文件,在#ifndef_AFX_NO_AFXCMN_SUPPORT语句的上一行顶头加入语句:#includemmsystem.h11.1使用音频函数为了介绍多媒体程序的设计,我们主要介绍一个简单的例子,希望能够通过这个简单的例子,了解音频文件的播放方法3.将winmm.lib与应用程序链接起来打开“Project/Settings…”菜单,选中Link选项卡,如下设置:11.1使用音频函数4.在MCIStartDlg.cpp的OnInitDialog()函数中的returnTRUE之前加上代码:sndPlaySound(SystemStart,SND_ASYNC);5.运行程序,显示下面界面,播放系统启动音乐SystemStart:11.1使用音频函数MCIERRORmciSendCommand(MCIDEVICEIDIDDevice,//接收命令消息的MCI设备IDUINTuMsg,//发送的命令消息DWORDfdwCommand,//命令消息的标志集DWORD_PTRdwParam//消息参数的结构体地址)下面学习使用MCI控制波形声音的播放。11.2用MCI控制波形声音的播放在调用MCI设备时可用mciGetErrorString()检测错误。该函数的原型如下:BOOLmciGetErrorString(DWORDfdwError,//错误代码LPTSTRlpszErrorText,//指向错误内容字串的指针UINTcchErrorText//错误内容的缓冲区容量)11.2用MCI控制波形声音的播放【例】编写一个音频播放器程序,可以选择音频文件,并控制其播放、暂停播放、暂停后的继续播放以及停止播放的功能首先创建一个对话框工程MCIPlayer,并放置若干个控件,设置它们的资源号和标题内容。如下图所示:IDC_OPEN_BUTTONIDC_CLOSE_BUTTONIDC_START_BUTTONIDC_PAUSE_BUTTONIDC_STOP_BUTTONIDC_EXIT_BUTTON11.2用MCI控制波形声音的播放1.将头文件mmsystem.h加入到文件Stdafx.h中;2.将多媒体函数库winmm.lib通过project菜单中的settings命令来与程序链接起来(同上例)。3.在CMCIPlayerDlg类上增加Protected类型的成员变量,具体如下:•BOOLm_Psign;//作为判断正在播放的标识•BOOLm_Asign;//作为判断暂停的标识•DWORDdwError;//用来储存错误代码•MCIDEVICEIDm_MCIDeviceID;//用来储存打开设备的ID值•charszErrorBuf[MAXERRORLENGTH];//用来储存出错内容11.2用MCI控制波形声音的播放BOOLCMCIPlayerDlg::OnInitDialog(){CDialog::OnInitDialog();…//TODO:Addextrainitializationherem_PSign=FALSE;//初始化正在播放标识m_ASign=FALSE;//初始化正在暂停标识m_MCIDeviceID=0;//初始化设备标识returnTRUE;}11.2用MCI控制波形声音的播放4.修改成员函数:(1)对话框初始化函数:voidCMCIPlayerDlg::OnOpenButton(){CStringfilename;//定义CString类的filename用来存储文件名CStringfileext;//定义CString类的fileext用来存储文件扩展名MCI_OPEN_PARMSmciOpenParms;//定义结构体变量用来存储打开文件的信息和返回的设备标识信息DWORDdwError;//定义dwError用来储存返回的错误标识staticcharszFilter[]=波形音频文件(*.wav)|*.wav|MIDI序列(*.mid)|*.mid\0;CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);//通过打开按钮时显示的内容11.2用MCI控制波形声音的播放(2)打开函数:if(dlg.DoModal()==IDOK){filename=dlg.GetFileName();//获取打开的文件名fileext=dlg.GetFileExt();//获取打开的文件扩展名if(m_PSign)//如果程序正在播放,则关闭{//关闭正在播放的声音dwError=mciSendCommand(m_MCIDeviceID,MCI_CLOSE,0,NULL)if(dwError)//如果关闭不成功,则显示出错的原因{if(mciGetErrorString(dwError,(LPSTR)szErrorBuf,MAXERRORLENGTH))MessageBox(szErrorBuf,MCI出错,MB_ICONWARNING);elseMessageBox(不明错误标识,MCI出错,MB_ICONWARNING);//给出相应报告return;}}11.2用MCI控制波形声音的播放//如果没有声音正在播放,则获取打开文件的后辍,并根据后辍决定相应的打开类型if(!strcmp(wav,fileext))//当后辍为wav时mciOpenParms.lpstrDeviceType=waveaudio;elseif(!strcmp(mid,fileext))//当后辍为mid时mciOpenParms.lpstrDeviceType=sequencer;mciOpenParms.lpstrElementName=filename;//将打开的文件名存入mciOpenParms结构体中dwError=mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpenParms);//发送打开文件命令,MCI_OPEN_TYPE参数说明设备类型名包含在mciOpenParms结构体中,//MCI_OPEN_ELEMENT参数说明要打开的文件名包含在mciOpenParams结构体中11.2用MCI控制波形声音的播放if(dwError)//如果打开不成功,则显示出错的原因{if(mciGetErrorString(dwError,(LPSTR)szErrorBuf,MAXERRORLENGTH))MessageBox(szErrorBuf,MCI出错,MB_ICONWARNING);elseMessageBox(不明错误标识,MCI出错,MB_ICONWARNING);return;}m_MCIDeviceID=mciOpenParms.wDeviceID;//将获取的设备ID值赋给全局变量m_MCIDeviceIDm_PSign=FALSE;//设置正在播放标识为FALSEm_ASign=FALSE;//设置正在暂停标识为FALSE}}11.2用MCI控制波形声音的播放voidCMCIPlayerDlg::OnStartButton()//从头开始播放{MCI_PLAY_PARMSmciPlayParms;//结构体变量存储播放相关信息if(!m_PSign)//如果没有正在播放的声音{mciPlayParms.dwCallback=(long)GetSafeHwnd();//为发送MM_MCINOTIFY消息指定窗口句柄mciPlayParms.dwFrom=0;//设置播放位置从头开始dwError=mciSendCommand(m_MCIDeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mciPlayParms);//开始播放声音,参数MCI_FROM说明开始播放的位置包含在mciPlayParms结构体中//参数MCI_NOTIFY的意义是播放完后发送MM_MCINOTIFY消息11.2用MCI控制波形声音的播放(3)播放函数:if(dwError){if(mciGetErrorString(dwError,(LPSTR)szErrorBuf,MAXERRORLENGTH))MessageBox(szErrorBuf,MCI出错,MB_ICONWARNING);elseMessageBox(“不明错误标识”,“MCI出错”,MB_ICONWARNING);return;}m_PSign=TRUE;//设置正在播放标识为TRUE}}11.2用MCI控制波形声音的播放voidCMCIPlayerDlg::OnPauseButton(){if(m_PSign)//如果有正在播放的声音{if(!m_ASign)//如果不是暂停状态则暂停播放{dwError=mciSendCommand(m_MCIDeviceID,MCI_PAUSE,0,NULL);if(dwError){if(mciGetErrorString(dwError,(LPSTR)szErrorBuf,MAXERRORLENGTH))MessageBox(szErrorBuf,MCI出错,MB_ICONWARNING);elseMessageBox(不明错误标识,MCI出错,MB_ICONWARNING);return;}11.2用MCI控制波形声音的播放(4)暂停函数:m_ASign=TRUE;//设置正在暂停标识为TRUE}else//如果已经是暂停状态则继续播放{dwError=mciSendCommand(m_MCIDeviceID,MCI_RESUME,0,NULL);if(dwError){if(mciGetErrorString(dwError,(LPSTR)szErrorBuf,MAXERRORLENGTH))MessageBox(szErrorBuf,MCI出错,MB_ICONWARNING);elseMessageBox(不明错误标识,MCI出错,MB_ICONWARNING);return;}11.2用MCI控制波形声音的播放11.2用MCI控制波形声音的播放m_ASign=FALSE;//设置正在暂停标识为FALSE}}}}voidCMCIPlayerDlg::OnStopButton(){dwError=mciSendCommand(m_MCIDeviceID,MCI_STOP,MCI_WAIT,NULL);//发送停止命令消息,参数MCI_WAIT说明当命令执行结束后函数才返回值if(dwError){if(mciGetErrorString(dwError,(LPSTR)szErrorBuf,MAXERRORLENGTH))MessageBox(szErrorBuf,MCI出错,MB_ICONWARNING
本文标题:11 多媒体应用程序设计(OK)
链接地址:https://www.777doc.com/doc-1467134 .html