使用微软MCI播放音频_第1页
使用微软MCI播放音频_第2页
使用微软MCI播放音频_第3页
使用微软MCI播放音频_第4页
使用微软MCI播放音频_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

VCVC下音频文件的播放VC下音频文件的播放杨晨引子首先说明一点,我学得不好,感觉没能较好的完成党交给的重任,呵呵。弹程序来看,我们现在已有的学问应当已经够用了。另一方面,在VC下播放音频是一项很大很杂的东西,我自己不想在这上面花费过多的时间。再有就是我这个文章〔应当叫随笔,我们的程序是独立的。msdn上的东东,限我自己的语言,g你要看着些地方不爽可以不屑于顾。OK,开头了。VisualC++对多媒体的支持对于一般的应用程序来说,VisualC++可以说是包罗万象,然而令人圆满的是,几乎没VisualC++对多媒体供给过什么支持,甚至有人说VisualC++不适合多媒体VisualC++RPG玩耍都编不出来。对于一个需要大量动画、声音的多媒体应用程序来说,VisualC++最多供给了一个外壳,而编制一个优秀的声音、动画引擎的任务,就落到了程序员的身上。的你的头上了。需要你针对你的应用程序去组织类.大的不太好,小的应用程序应当完全凑合。Playingaudiofilewithvisualc++ 1VCVC下音频文件的播放PlayingPlayingaudiofilewithvisualc++2Windows的多媒体效劳功能WindowsAPI这些功能强大的API.这里简要地介绍一些最常用的多媒体效劳。1,高级音频函数.MessageBeep、PlaySoundsndPlaySound。这三个函数你应当生疏,我不想在这说msdn参数都是做什么用,还有限于什么样的文件格式。比方它们都不能播放大于100k的波形声音文件.写个例子你应当清楚一些:PlaySound(“PlaySound(“关机.wav“,NULL,SND_ASYNC|SND_LOOP);//第一个参数是声音文件名,最终的那个SND_LOOP是循环播放的意思。我感觉要实现同时播放两个音乐似乎只用这几个函数是不行能实现的次的不能用了,要么抢不走,苦苦等你不想用了再拾过来。2.MCIMCI?MCI(MediaControlInterface)MircroSoft供给的一组多媒体设碟、录像等多媒体设备,而不需要知道它们的内部工作状况。但是古人云:成也萧何,败也萧何。MCI虽然看上去高大全,但对于一些高级应用来说,它是远远不够的。上面的话也不是我说的,但低级中级应用是完全凑合的。MCIWindows程序供给了在高层次上掌握媒体设备接口的力量就可以对激光唱机、视盘机、波形音频设备、视频播放设备和I设备等媒体设备进展掌握。对于程序员来说,可以把MCI理解为设备面板上的一排按键,通过选择不同的按键〔发送不同的MCI命令〕可以让设备完成各种功能对于,视盘机和D机有不同的反响〔一个是播放视频,一个播放音频,而对用户来说却只需要按同一按钮。VCVC下音频文件的播放PlayingPlayingaudiofilewithvisualc++3MCI的使用方法应用程序通过向MCI发送命令来掌握媒体设备。MCI命令接口分命令字符串和命令消息两息。(mciSendString,字符串消息。mciSendCommand,命令消息)外表上就是发送字符串的意思,就是要告知某些设备,请你播放都是用双引号弄起来的,只是引号里写的有固定的格式罢了。先写个简洁的例子,使你不至于一头雾水。mciSendString(“openmciSendString(“open老鼠爱大米.avitype1“,…);mciSendString(“play1repeat“,…);repeat什么意思啊知道吧。就是说你特别宠爱那首歌,听完一次还要听。送个命令设备开头给我运转!MCIAPImciSendStringMCI的,该函数的声明为:MCIERRORMCIERRORmciSendString(//MCIERROR只是一个返回类型,你别可怕啊。//命令字符(刚刚……前面的:“open老鼠爱大米.avitype1“)LPCTSTRlpszCommand,LPTSTRlpszReturnString,//存放反响信息的缓冲区UINTcchReturn,//缓冲区的长度HANDLEhwndCallback//NULL);//0,否则返回错误码。//下面这些你瞄一眼就好了,关于错误处理的,你写程序时不用也没事。用的话抄一下就好了。该函数返回的错误码可以用mciGetErrorString函数进展分析,该函数的声明为:BOOLBOOLmciGetErrorString(DWORDfdwError,//mciSendStringmciSendCommand返回的错误码LPTSTRlpszErrorText,//接收描述错误的字符串的缓冲区VCVC下音频文件的播放PlayingPlayingaudiofilewithvisualc++4UINTUINTcchErrorText//缓冲区的长度);//下面你只看看红色的局部就好了,其它瞄一眼。mciSendString函数的一个简洁例子:charcharbuf[50];MCIERRORmciError;mciError=mciSendString(“opencdaudio”,buf,strlen(buf),NULL);if(mciError){mciGetErrorString(mciError,buf,strlen(buf));AfxMessageBox(buf);return;}mciSendString(“open老鼠爱大米.avitype设备1“,…);mciSendString(“play1repeat“,…);这样你就可以听老鼠爱大米了,但是假设我还想听[大米爱老鼠]这首歌,我就想两个歌一mciSendString(“open大米爱老鼠.avitype设备1“,…);可以不?这是不行以的。在这种状况下,需要为每次翻开的设备起一个不同的别名,这样MCI才能区分两个播放设备。例如,下面这段代码翻开并播放了两个AVI文件:(Alias是别名的意思。)charcharbuf[50];mciSendString(“open老鼠爱大米.avitypeavivideoaliasadu“,buf,strlen(buf),NULL);mciSendString(“playadurepeat“,buf,strlen(buf),NULL);//重复播放mciSendString(“open大guanghao“,buf,strlen(buf),NULL);米爱老鼠.avitypeavivideoaliasmciSendString(“playguanghao“,buf,strlen(buf),NULL);把上面这些写成红色由于这样就实现了背景音乐和一般音乐的同时播放。mciSendCommand关于这个我就不用多说什么了。写个例子:.wav文件,只要把下面蓝色的两局部VCVC下音频文件的播放5Playingaudiofilewithvisualc++5Playingaudiofilewithvisualc++换为waveaudiowaveaudio和WindowsXP关机.wav可以了.MCI_DGV_OPEN_PARMSmciOpen;UINTwDeviceID;MCIERRORmciError;mciOpen.lpstrDeviceType=“avivideo“;//设备名mciOpen.lpstrElementName=“老鼠.avi“;//设备元素mciError=mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,//使用了设备元素(DWORD)&mciOpen);wDeviceID=mciOpen.wDeviceID;//保存设备IDMCI_DGV_PLAY_PARMSmciPlay;mciError=mciSendCommand(wDeviceID,MCI_PLAY,MCI_DGV_PLAY_REPEAT,(DWORD)&mciPlay);写这些程序时要包含很多的头文件。我也没有归纳过什么。比方#include#include<Mmsystem.h>;#include<Digitalv.h>#include<vfw.h>#pragmacomment(lib,“vfw32.lib“)#pragmacomment(lib,“Winmm.lib“)MSDN再把需要它的头文件放进去。还有,就是感觉很多网上强人播放声音文件都用了下面的方法, MCIWndCreate和HWNDm_hwndMCI;if(m_hwndMCI!=NULL)//HWNDm_hwndMCI;if(m_hwndMCI!=NULL)//MCIWND窗口{MCIWndDestroy(m_hwndMCI);}inttype=2;//隐蔽默认工具栏0表显示CStringfilename=“星空无限.mp3“;//要播放的文件文件名m_hwndMCI=MCIWndCreate(m_hWnd,AfxGetInstanceHandle,type,filename);MCIWndPlay(m_hwndMCI);stdafx.h中参加:#include<vfw.h>#include<vfw.h>#pragmacomment(lib,“vfw32.lib“)vfw.h文件查看VCVC下音频文件的播放6Playingaudiofilewithvisualc++6Playingaudiofilewithvisualc++如:MCIWndGetPosition(m_hwndMCIMCIWndGetPosition(m_

温馨提示

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

评论

0/150

提交评论