1. 程式人生 > 實用技巧 >怎麼插入背景音樂

怎麼插入背景音樂

怎麼加入WAV格式背景音樂

1.函式:

BOOL WINAPI PlaySound(LPCSTR pszSound,HMODULE hmod,DWORD fdwSound); wav字尾的音樂,其他型別轉換來的,不好使。

2.標頭檔案:

#include <MMsystem.h>

#pragma comment(lib,"winmm.lib")

#include <Windows.h>

3.返回值:

true成功

false失敗

4.引數

引數1	 (1)NULL  停止所有聲音的播放
    	  (2)播放檔案的絕對路徑   引數3必須有SND_FILENAME
    	  (3)音樂檔案資源的ID	  引數3必須有SND_RESOURCE
引數2	 (1)NULL
   	 (2)當前例項控制代碼:AfxGetlnstanceHandle()引數3是SND_RESOURSE
引數3		SND_FILENAME|SND_ASYNC
    	        SND_RESOURCE|SND_ASYNC

5.示例

#include <stdio.h>

#include <Windows.h>
#include <MMsystem.h>
#pragma comment(lib,"winmm.lib")

//插入音樂
void MyPlaySound()
{
	PlaySound(L"H:\\jum.wav",NULL,SND_FILENAME|SND_ASYNC);
    //PlaySound(TEXT("H:\\Jum.wav"), NULL, SND_FILENAME | 		//SND_ASYNC);用這個語句也可以
}
int main(void)
{
	//插入背景音樂
	MyPlaySound();
	system("pause");
	return 0;
}

在這裡一點要提需要在程式碼 PlaySound(L"H:\\jum.wav",NULL,SND_FILENAME|SND_ASYNC);

寫上L才可以成功執行。當然還有一種方式點選屬性,再點選字符集,將其修改為使用多字符集,也可以。但是筆者並沒有在vs2019中找到這種方式。

PlaySound(TEXT("H:\\Jum.wav"), NULL, SND_FILENAME | SND_ASYNC);

這種方式EXT()函式處理寬字元問題,SND_FILENAME標識採用檔名播放,SND_ASYNC標識非同步播放,即PlaySound函式開始播放後便返回執行程式碼而不是等到播放完了再執行(此種方式對應SND_SYNC) 。

6.示例

#include <stdio.h>

#include "resource3.h"//這裡要注意,這個標頭檔案是看你新增資源的原始碼裡怎麼寫的,你就怎麼寫
#include <Windows.h>
#include <MMsystem.h>
#pragma comment(lib,"winmm.lib")

//插入音樂
void MyPlaySound()
{
	PlaySound((IDR_WAVE1), GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC | SND_LOOP);
	//PlaySound(MAKEINTRESOURCE(IDR_WAVE1), GetModuleHandle(NULL), SND_RESOURCE | SND_ASYNC | SND_LOOP);

	//上面兩種方式都可以  IDR_WAVE1 是匯入資源的ID   
	//下面針對第三個引數做一下解釋
	//SND_RESOURCE 表示使用的資原始檔(如果是文字檔案 exe要帶上一個音樂檔案才能實現音樂播放)
	//SND_ASYNC  非同步播放 
	//SND_LOOP  迴圈播放  必須要用到SND_ASYNC
	while (1);//防止直接退出程式
}
int main(void)
{
	//插入背景音樂
	MyPlaySound();
	system("pause");
	return 0;
}

這裡需要在"資原始檔"新增“資源”在點選“匯入”你所需要的音樂檔案。

7.示例

#include<Windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
 
int main()
{
    mciSendString(L"open ./bgm.mp3 alias bgm",0,0,0);//開啟音樂
    mciSendString(L"open bgm repeat",0,0,0);//播放音樂
    
    /*
        1. 開啟音樂 open後面的./bgm.mp3 是音樂檔案的相對路徑,使用絕對路徑也可以
        2. 開啟音樂中 alias bgm 是給音樂取個別名  下面就可以直接open bgm了,別名可以自取
        3. 播放音樂中 repeat表示重複播放,如果只想播放一次,可以去掉repeat
        4. mciSendString這個函式可以播放mp3 wav格式的音樂,如果程式碼無誤但是沒法播放音樂,嘗試換一首.(儘量避免用網易雲下載的音樂,可能無法播放,原因不明)
    */
	while (1);//防止直接退出程式
	return 0;
}

下面是MSDN的官方文件

另請參見要求Microsoft Windows CE 5.0的Platform Builder

播放聲音
將有關此主題的反饋傳送給作者
也可以看看
波形音訊功能| sndPlaySound

要求
作業系統版本:Windows CE 2.0和更高版本。
標題:Mmsystem.h。
連結庫:Coredll.lib。
此功能播放由檔名,資源或系統事件指定的聲音。

布林WINAPI PlaySound(
LPCSTR pszSound,
HMODULE hmod,
DWORD fdw聲音
);
參量
psz聲音
指向以空值結尾的字串的指標,該字串指定要播放的聲音。如果此引數為NULL,則停止任何當前播放的波形聲音。要停止非波形聲音,請在fdwSound引數中指定SND_PURGE。
fdwSound中的三個標誌(SND_ALIAS,SND_FILENAME和SND_RESOURCE)確定名稱是否被解釋為系統事件,檔名或資源識別符號的別名。如果未指定這些標誌,則PlaySound會在登錄檔或WIN.INI檔案中搜索與指定聲音名稱的關聯。如果找到關聯,則播放聲音事件。如果在登錄檔中未找到關聯,則將該名稱解釋為檔名。

hmod
處理到包含要載入資源的可執行檔案。除非在fdwSound中指定了SND_RESOURCE,否則此引數必須為NULL。
fdwSound
用於播放聲音的標誌。下表顯示了可能的值。值說明
SND_ALIAS pszSound引數是登錄檔或WIN.INI檔案中的系統事件別名。請勿與SND_FILENAME或SND_RESOURCE一起使用。
SND_ASYNC聲音非同步播放,開始播放聲音後立即返回PlaySound。要終止非同步播放的波形聲音,請在pszSound設定為NULL的情況下呼叫PlaySound。
SND_FILENAME pszSound引數是檔名。
SND_LOOP聲音重複播放,直到在pszSound引數設定為NULL的情況下再次呼叫PlaySound為止。您還必須指定SND_ASYNC標誌以指示非同步聲音事件。
SND_MEMORY聲音事件的檔案已載入到RAM中。 pszSound指定的引數必須指向記憶體中的聲音影象。
SND_NODEFAULT不使用預設聲音事件。如果找不到聲音,則PlaySound會靜默返回而不播放預設聲音。
SND_NOSTOP指定的聲音事件將產生另一個正在播放的聲音事件。如果由於產生該聲音所需的資源正忙於播放其他聲音而無法播放聲音,則該函式將立即返回FALSE,而不會播放請求的聲音。
如果未指定此標誌,則PlaySound嘗試停止當前正在播放的聲音,以便可以使用該裝置播放新的聲音。

SND_NOWAIT如果駕駛員忙,請立即返回而不播放聲音。
SND_RESOURCE pszSound引數是資源識別符號。 hmod必須標識包含資源的例項。建立資源時,必須將其標識為WAVE型別,請參閱將PlaySound與資源識別符號一起使用。
SND_SYNC聲音事件的同步播放。聲音事件完成後,PlaySound返回。

返回值
TRUE表示成功。 FALSE表示失敗。

備註
Windows CE不支援fdwSound引數的SND_ALIAS_ID和SND_PURGE標誌。 pszSound指定的聲音必須適合可用的實體記憶體,並且可以由已安裝的波形音訊裝置驅動程式播放。 PlaySound根據目標裝置的OEM指定的搜尋順序在檔案系統目錄中搜索聲音。如果找不到指定的聲音,PlaySound將使用預設的系統事件聲音條目。如果該函式找不到系統預設條目或預設聲音,則它不會發出聲音並返回FALSE。

有關如何使用PlaySound功能的示例,請參見使用PlaySound功能。

要求
作業系統版本:Windows CE 2.0和更高版本。
標題:Mmsystem.h。
連結庫:Coredll.lib。

也可以看看
波形音訊功能| sndPlaySound