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

有时需要播放音乐或者音效,可参考本文的方案。

PlaySound播放Wav音频

可以使用PlaySound()函数播放Wav声音,该函数原型为:
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);

  1. 参数pszSound是指定了要播放声音的字符串,该参数可以是MP3文件的名字,或是MP3资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音。如果该参数为NULL则停止正在播放的声音。
  2. 参数hmod是应用程序的实例句柄,当播放MP3资源时要用到该参数,否则它必须为NULL。
  3. 参数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


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值