windows程式設計二 播放聲音的函式
這次我們來編寫一個簡易的聲音播放程式,首先來看一個例子:
#include<Windows.h>
#pragma comment(lib, "winmm.lib")
int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd)
{
PlaySound(L"Deep Coral Caves J.wav", NULL, SND_FILENAME | SND_ASYNC);
MessageBox(NULL, L"Deep Coral Caves J 遊戲聲音世界" , L" 訊息視窗", 0);
return 0;
}
上圖:
可以看到僅比上一節多了兩行程式碼,要播放聲音,需要用到PlaySound函式,要使用PlaySound函式就需要在編譯前連結winmm.lib檔案, winmm.dll是Windows多媒體相關應用程式介面,用於低檔的音訊和遊戲手柄。裡面包含了PlaySound函式的實現。
#pragma comment(lib, “winmm.lib”)
這一行的作用就是在編譯前連結winmm.lib檔案。
接下來簡單講一下PlaySound函式;檢視定義:
可以看到PlaySound函式有三個引數,第一個引數是LPCSTR型的pszSound,是一個字串,表示要播放的聲音檔案,即檔名。
第二個引數是HMODULE型的hmod,h還是表示控制代碼,MODULE是模組的意思,HMODULE即為模組控制代碼,表示第一個引數指定的聲音檔案作為資源的可執行檔案的控制代碼。
第三個引數DWORD型別的fdwSound,是用來播放聲音的一個標誌有很多可選標識,具體檢視
可以發現DWORD其實是unsigned long型別,這一點可以檢視SND_FILENAME 與SND_ASYNC看到:
#define SND_FILENAME 0x00020000L /* name is file name */
#define SND_ASYNC 0x0001 /* play asynchronously */
SND_FILENAME與SND_ASYNC實際上是十六進位制數。
最後,比較重要的一點,需要把wav聲音檔案放入到工程資料夾下: