您的位置:首页 > 其它

(Win32)PlaySound播放Wav声音+mciSendString播放多媒体

2016-05-15 17:13 267 查看
有时需要播放音乐或者音效,可参考本文的方案。

PlaySound播放Wav音频

可以使用PlaySound()函数播放Wav声音,该函数原型为:

BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);

参数pszSound是指定了要播放声音的字符串,该参数可以是MP3文件的名字,或是MP3资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音。如果该参数为NULL则停止正在播放的声音。
参数hmod是应用程序的实例句柄,当播放MP3资源时要用到该参数,否则它必须为NULL。
参数fdwSound是标志的组合,各种可选的标志及意义如下所示。若成功则函数返回TRUE,否则返回FALSE。
播放标志以及含义:

SND_APPLICATION 用应用程序指定的关联来播放声音。
SND_ALIAS pszSound参数指定了注册表或WIN.INI中的系统事件的别名。
SND_ALIAS_ID pszSound参数指定了预定义的声音标识符。
SND_ASYNC 用异步方式播放声音,PlaySound函数在开始播放后立即返回。
SND_FILENAME pszSound参数指定了MP3文件名。
SND_LOOP 重复播放声音,必须与SND_ASYNC标志一块使用。
SND_MEMORY 播放载入到内存中的声音,此时pszSound是指向声音数据的指针。
SND_NODEFAULT 不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。
SND_NOSTOP PlaySound不打断原来的声音播出并立即返回FALSE。
SND_NOWAIT 如果驱动程序正忙则函数就不播放声音并立即返回。
SND_PURGE 停止所有与调用任务有关的声音。若参数pszSound为NULL,就停止所有的声音,否则,停止pszSound指定的声音。
SND_RESOURCE pszSound参数是WAVE资源的标识符,这时要用到hmod参数。
SND_SYNC 同步播放声音,在播放完后PlaySound函数才返回。
示例:(把音乐文件“Ringout.wav”或者其它Wav格式放在程序目录下)

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <iostream>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")

int _tmain(int argc, _TCHAR* argv[])
{
PlaySound(_T("Ringout.wav"), NULL, SND_FILENAME | SND_SYNC);
MessageBox(NULL, _T("同步播放完毕"), _T("信息"), MB_OK);
PlaySound(_T("Ringout.wav"), NULL, SND_FILENAME | SND_ASYNC);
MessageBox(NULL, _T("异步播放立即返回"), _T("信息"), MB_OK);
system("pause");
return 0;
// 只能同时播放一段音乐,启动新的、旧的就被停了
// 如果想停止目前的播放而不播放新音乐呢?只要给PlaySound的第一参数传递NULL就可以停止目前的播放了。

}
缺点:在一个线程里无法同时播放多个声音。

来源:播放声音文件PlaySound函数应用

mciSendString播放多媒体

可以播放音频、视频。参阅:mciSendString用法

更推荐使用强大的BASS音频库:BASS
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows api 音乐 win32