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_ALIAS | pszSound参数指定了注册表或WIN.INI中的系统事件的别名。 |
SND_ALIAS_ID | pszSound参数指定了预定义的声音标识符。 |
SND_ASYNC | 用异步方式播放声音,PlaySound函数在开始播放后立即返回 |
SND_FILENAME | pszSound参数指定了WAVE文件名。 |
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函数才返回。 |
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);
}
}
注意:本文部分内容参考网络,如由侵权请联系删除