1. 程式人生 > >windows程式設計二 播放聲音的函式

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,是用來播放聲音的一個標誌有很多可選標識,具體檢視

https://msdn.microsoft.com/zh-cn/dd743680;當選用多個標識時使用“|”來劃分,可以對DWORD型別檢視定義:

這裡寫圖片描述

可以發現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聲音檔案放入到工程資料夾下:
這裡寫圖片描述