第一部分:音频播放
来源:互联网 发布:替代 usleep windows 编辑:程序博客网 时间:2024/06/10 23:48
首先新建基于对话框的mfc项目,在CprojectnameDlg.cpp加入如下代码
此后所有的操作都用到该变量
以上函数的定义取自作业文档推荐的博客!
<span style="font-size:18px;">#include<Mmsystem.h>#pragma comment(lib, "winmm.lib")</span>
然后声明一个全局变量
<span style="font-size:18px;">MCI_OPEN_PARMS op;</span>
此后所有的操作都用到该变量
定义播放、获取音频长度、停止函数
<span style="font-size:18px;">void CMCIDlg::OnPlay() { // TODO: Add your control notification handler code here DWORD cdlen;//音频文件长度 op.dwCallback=NULL; op.lpstrAlias=NULL; op.lpstrDeviceType=_T("MPEGAudio"); //设备类型,大多数文件可以这样设置 op.lpstrElementName=_T("D:\\2.mp3"); //文件路径 op.wDeviceID=NULL; //打开设备成功以后保存这个设备号备用 UINT rs; //接受函数返回结果 //发送命令打开设备,成功返回0,否则返回错误号,第三个参数这里必须MCI_OPEN_ELEMENT rs=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)&op); mciSendCommand(NULL,MCI_SET,MCI_SET_DOOR_OPEN,NULL); cdlen=getinfo(op.wDeviceID,MCI_STATUS_LENGTH);//获取音频文件长度 if(rs==0) //设备打开成功就播放文件 { MCI_PLAY_PARMS pp; pp.dwCallback=NULL; pp.dwFrom=0; //开始播放的位置 mciSendCommand(op.wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD)&pp); //播放文件,如果第三个参数设为MCI_WAIT则程序窗口会被阻塞,为了避免这种情况可以设为MCI_NOTIFY } Sleep(cdlen);//根据文件长度等待,与MCI_WAIT效果一样,cdlen参数可以控制播放时间 OnStop(); //关闭音频文件 }</span>
<span style="font-size:18px;"><pre name="code" class="cpp">DWORD CMCIDlg::getinfo(UINT wDeviceID,DWORD item){ MCI_STATUS_PARMS mcistatusparms; mcistatusparms.dwCallback=(DWORD)GetSafeHwnd(); mcistatusparms.dwItem=item; mcistatusparms.dwReturn=0; mciSendCommand(wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms); return mcistatusparms.dwReturn;}</span>
<span style="font-size:18px;">void CMCIDlg::OnStop() { // TODO: Add your control notification handler code here //在WM_CLOSE消息处理过程中发送MCI_CLOSE命令关闭设备 MCI_GENERIC_PARMS gp; gp.dwCallback=NULL; mciSendCommand(op.wDeviceID,MCI_CLOSE,MCI_WAIT,(DWORD)&gp); }</span>
以上函数的定义取自作业文档推荐的博客!
为了简单实现播放音乐的功能,我在Dialog中定义一个button,在button相应的函数中调用上文的OnPlay函数。
在实现的时候同学们可能会发现,音乐播放时整个dialog处于不可操作的状态,经过调试我发现是因为在OnPlay()中我调用了Sleep()函数,导致系统睡眠,所以要解决这个问题,只需将OnPlay()中的OnSotp(),Sleep(cdlen)去掉即可,在需要的时候调用OnStop()函数。
经过修改基本上没有什么问题了,音频可以正常播放,如想要进一步了解,请浏览作业文档推荐的网站。
1 0
- 第一部分:音频播放
- iOS 9音频应用播放音频之第一个ios9音频实例
- iOS 9音频应用播放音频之第一个ios9音频实例2
- iOS 9音频应用播放音频之第一个ios9音频实例
- 第一部分 声卡UDA1341TS驱动程序播放部分的移植
- Iphone开发之音频101 (第一部分): 文件和数据类型
- Iphone开发之音频101 (第一部分): 文件和数据类型
- Iphone开发之音频101 (第一部分): 文件和数据类型
- Iphone开发之音频101 (第一部分): 文件和数据类型
- iPhone音频开发之:文件和数据类型(第一部分)
- 音频播放
- 音频播放
- 音频播放
- 音频播放
- 播放音频
- 音频播放
- 音频播放
- 播放音频
- 模仿 LED 灯的滚动文字效果
- 自动轮播、解析数据
- 数据结构实验之队列一:排队买饭
- android 中的异步加载机制 使用AsyncTask类
- border-box之全局问题解析
- 第一部分:音频播放
- window.onload和$(document).ready()的区别
- STL的vector<string>的初始化方式总结
- hbase常用shell整理,不定期更新
- Live Archive 3029 City Game
- stm32启动文件
- SDUT2506完美网络
- 1111
- POJ 2299 Ultra-QuickSort [树状数组做法]