Windows播放波形文件声音

Windows中播放波形文件主要是使用PlaySound()这个函数,此函数的函数原型如下:

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

用PlaySound函数时需要在#include<windows.h>后面加上(注意:不能加在前面):
#include <mmsystem.h>
#pragma comment(lib, “WINMM.LIB”)

参数:

  • pszSound:是要加载的播放文件,有三种加载方式

第一种方法是直接播出声音文件,相应的代码为:
PlaySound(“c:\WINDOWS\MEDIA\TheMicrosoftSound.wav”,NULL,SND_FILENAME|SND_ASYNC);

第二种方法是把声音文件加入到资源中
PlaySound((LPCTSTR)IDR_STARTWIN,AfxGetInstanceHandle(),SND_RESOURCE|SND_ASYNC);

第三种方法是用PlaySound播放系统声音
PlaySound(“SystemStart”,NULL,SND_ALIAS|SND_ASYNC);

  • hmod是应用程序的实例句柄,除非pszSound的指向一个资源标识符(即fdwSound被定义为SND_RESOURCE),否则必须设置为NULL
  • fdwSound是标志的组合,如下表所示。若成功则函数返回TRUE,否则返回FALSE。
标志含义
SND_APPLICATION用应用程序指定的关联来播放声音。
SND_ALIASpszSound参数指定了注册表或WIN.INI中的系统事件的别名。
SND_ALIAS_IDpszSound参数指定了预定义的声音标识符。
SND_ASYNC用异步方式播放声音,PlaySound函数在开始播放后立即返回
SND_FILENAMEpszSound参数指定了WAVE文件名。
SND_LOOP重复播放声音,必须与SND_ASYNC标志一块使用。
SND_MEMORY播放载入到内存中的声音,此时pszSound是指向声音数据的指针。
SND_NODEFAULT不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。
SND_NOSTOPPlaySound不打断原来的声音播出并立即返回FALSE。
SND_NOWAIT如果驱动程序正忙则函数就不播放声音并立即返回。
SND_PURGE停止所有与调用任务有关的声音。若参数pszSound为NULL,就停止所有的声音,否则,停止pszSound指定的声音。
SND_RESOURCEpszSound参数是WAVE资源的标识符,这时要用到hmod参数
SND_SYNC同步播放声音,在播放完后PlaySound函数才返回。
SND_SYSTEM如果是背景窗口,如果这个标志被设置,声音是分配到音频会议系统通知的声音。系统音量控制程序(sndvol)显示音量滑块控制系统通知的声音。设置该标志将下控制音量滑块。如果没有设置该标志,声音是分配到默认的音频会议的应用进程。更多信息,请参阅文档的核心音频API的软件开发工具包

播放波形声音文件实例:

void C播放波形声音文件Dlg::OnBnClickedCheck1()
{
	// TODO:  在此添加控件通知处理程序代码
	CButton* pBtn = (CButton*)GetDlgItem(IDC_CHK_PLAY);
	if (pBtn->GetCheck())
	{
		BOOL bPlay = PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_ASYNC|SND_LOOP|SND_RESOURCE);
		if (!bPlay)
		{
			DWORD dwErr = GetLastError();
			CString strErr;
			strErr.Format(_T("0x%.8x"),dwErr);
			AfxMessageBox(strErr);
		}
	}
	else
	{
		PlaySound(NULL,NULL,SND_PURGE);
	}

}

注意:本文部分内容参考网络,如由侵权请联系删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值