VC++中播放声音wav
来源:互联网 发布:中国女性就业数据库 编辑:程序博客网 时间:2024/06/01 08:35
因为只需在Windows上执行,先想到用MCI接口。试了一下,用mciSendCommand可以实现基本的播放wav文件的功能。但循环播放wav就麻烦了,必须向窗口传送MM_MCINOTIFY消息。
google了一下,才发现原来有更简单的方法——用sndPlaySound。一条语句sndPlaySound(filename, SND_ASYNC | SND_LOOP)就可以循环播放声音文件,完全满足我的要求。简单吧。
函数定义是:
BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound);
其中,lpszSound一般是wav文件的文件名,fuSound是参数。常见的fuSound参数有:
SND_ASYNC 异步播放,即程序不等播放结束就继续执行,播放背景声。
SND_SYNC 同步播放,即播放结束才继续执行
SND_LOOP 循环播放
SND_NODEFAULT 如果找不到指定文件,保持安静。如不指定此参数,则播放系统默认警告音。如没有默认警告音,则为失败。
执行成功返回TRUE,失败返回FALSE。
要停止播放只需再执行一遍lpszSound参数为NULL的sndPlaySound函数。
要求:
程序要加入Mmsystem.h,编译时链入Winmm.lib库。
限制:
sndPlaySound只能播放wav文件。
wav文件在播放前将被装入内存,所以不能太大。
只能同时播放一个声音。后一个声音会关闭前一个声音。
函数PlaySound是sndPlaySound的增强版,支持更多声音类型和fuSound参数,并可以播放内存和资源中的声音。
或者增加以下:
#include <Mmsystem.h>
#pragma comment(lib, "Winmm.lib")
PlaySound(...)
第一种方法是直接播出声音文件,相应的代码为:
PlaySound("c:\win95\media\The Microsoft Sound.wav", NULL, SND_FILENAME | SND_ASYNC);
注意参数中的路径使用两个连续的反斜杠转义代表一个反斜杠。
第二种方法是把声音文件加入到资源中,然后从资源中播放声音。Visual C++支持WAVE型资源,用户在资源视图中单击鼠标右键并选择Import命令,然后在文件选择对话框中选择The Microsoft Sound.wav文件,则该文件就会被加入到WAVE资源中。假定声音资源的ID为IDR_STARTWIN,则下面的调用同样会输出启动声音:
PlaySound((LPCTSTR)IDR_STARTWIN, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC);
第三种方法是用PlaySound播放系统声音,Windows启动的声音是由SystemStart定义的系统声音,因此可以用下面的方法播放启动声音:
PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC);
sndPlaySound不能直接播放声音资源。要用该函数播放WAVE文件,可按下面的方式调用:
sndPlaySound(“MYSOUND.WAV”,SND_ASYNC);
- VC++中播放声音wav
- VC++中播放声音wav
- VC++中播放声音wav
- VC++中播放声音
- VC中播放WAV文件
- VC++中播放声音wav最简单的方法——sndPlaySound
- OpenGL播放wav声音
- 如何播放wav声音?
- 播放wav声音
- 用VC实现声音(wav)播放的小程序
- VC中如何播放WAV文件
- VC中如何播放WAV文件
- VC中如何播放WAV文件
- 在.Net Compact Framework中播放wav声音
- VC++中播放声音的方法
- VC++中播放声音的方法
- VC++中播放声音的方法
- VC++中播放声音的方法
- [Bindable]绑定和[Bindable("eventname")]绑定的区别
- container_of()宏
- VBA判断字符串中是否含有汉字
- 视锥裁剪
- 在windbg中测试shadow ssdt , win32k!NtUserGetForegroundWindow , hook shadow ssdt
- VC++中播放声音wav
- 堆和栈的主要的区别
- Android传感器——方向传感器TYPE_ORIENTATION
- Android 打开关闭闪光灯(里程碑2.1)
- 外贸B2C之利器:三个实用的运输策略
- SqlServer sa有效性验证失败,密码不够复杂
- 黑马程序员-集合类
- #ifdef __cplusplus extern "C" { #endif”的定义的含义
- xcode基于视图的实现文件中各方法调用的时机