c++——使用PlaySound()播放聲音

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()就可以解決,寫在這裏長個記性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章