PlaySound是windows中用來播放聲音的API函數,函數聲明如下:
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound)
其中pszSound用來指定要播放的文件,可以是資源名或者音樂文件的路徑,若爲空(NULL)則停止正在播放的聲音。PlaySound只能播放WAV文件。
hmod一般設置爲空(NULL),除非你要指向資源標識符(即fdwSound被定義爲SND_RESOURCE)。
fdwSound用來指定播放模式,參數如下:
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)顯示音量滑塊控制系統通知的聲音。設置該標誌將下控制音量滑塊。如果沒有設置該標誌,聲音是分配到默認的音頻會議的應用進程。
使用PlaySound函數時要這樣:
#include<windows.h>
#include<Mmsystem.h>
#pragma comment(lib,"winmm.lib")
using namespace std;/*不要忘了寫這句話*/
而且順序不能錯,“windows.h”要在“Mmsystem.h”前面。
例:
#include<iostream>
#include<windows.h>
#include<Mmsystem.h>
#pragma comment(lib,"winmm.lib")
using namespace std;
void main()
{
PlaySound(TEXT("F:\\c.wav"),NULL,SND_FILENAME | SND_ASYNC);
cin.get();
cin.get();
}
本代碼親測可以運行。
注意:很多文章都是直接就把文件名作爲參數,會出錯,提示提示無法將參數從“const char ”轉換爲“LPCWSTR”。
比如,這樣會出錯:
PlaySound("F:\\c.wav",NULL,SND_FILENAME | SND_ASYNC);/*出錯*/
可以這樣改:
PlaySound(TEXT("F:\\c.wav"),NULL,SND_FILENAME | SND_ASYNC);/*正確*/
也可以這樣:
PlaySound(L"F:\\c.wav",NULL,SND_FILENAME | SND_ASYNC);/*正確*/
以前看別人寫的文章,就因爲那個無法將參數從“const char ”轉換爲“LPCWSTR”糾結了好久,偶然才發現用TEXT()就可以解決,寫在這裏長個記性。