1. 程式人生 > 實用技巧 >如何給程式新增音樂2.0

如何給程式新增音樂2.0

轉載自:血馬雄風  https://www.cnblogs.com/xuemaxiongfeng/archive/2012/04/22/2464513.html

PlaySound 函式以及 sndPlaySound 函式用法總結  

在wince應用程式程式設計中遇到了播放關機音樂的問題,還有同步播放和非同步播放的問題,這些問題主要是PlaySound函式的問題。現將相關內容整理如下。

一、PlaySound函式的宣告為:

BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);

1、引數pszSound是指定了要播放聲音的字串,該引數可以是WAVE檔案的名字,或是WAV資源的名字,或是記憶體中聲音資料的指標,或是在系統登錄檔WIN.INI中定義的系統事件聲音。如果該引數為NULL則停止正在播放的聲音。

2、引數hmod是應用程式的例項控制代碼,當播放WAV資源時要用到該引數,否則它必須為NULL。
引數fdwSound是標誌的組合,如下表所示。若成功則函式返回TRUE,否則返回FALSE。
3、播放標誌以及含義: 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函式才返回。
4、舉例: 在C:\WINDOWS\MEDIA目錄下有一個名為The Microsoft Sound.wav的聲音檔案,在Windows 95啟動時會播放這個聲音。
下面我們用三種方法來呼叫PlaySound函式播出Windows 95的啟動聲音。 第一種方法是直接播出聲音檔案,相應的程式碼為: PlaySound(
"c:\\win95\\media\\The Microsoft Sound.wav", NULL, SND_FILENAME | SND_ASYNC); 注意引數中的路徑使用兩個連續的反斜槓轉義代表一個反斜槓。 第二種方法是把聲音檔案加入到資源中,然後從資源中播放聲音。
Visual C
++支援WAVE型資源,使用者在資源檢視中單擊滑鼠右鍵並選擇Import命令,然後在檔案選擇對話方塊中選擇The Microsoft Sound.wav檔案,
則該檔案就會被加入到WAVE資源中。假定聲音資源的ID為IDR_STARTWIN,則下面的呼叫同樣會輸出啟動聲音: PlaySound((LPCTSTR)IDR_STARTWIN, AfxGetInstanceHandle(), SND_RESOURCE
| SND_ASYNC); 第三種方法是用PlaySound播放系統聲音,Windows啟動的聲音是由SystemStart定義的系統聲音,因此可以用下面的方法播放啟動聲音: PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC); 二. sndPlaySound函式的宣告為:
BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound); 用法: 除了不能指定資源名字外,引數lpszSound與PlaySound的是一樣的。 引數fuSound是如何播放聲音的標誌,可以是SND_ASYNC、SND_LOOP、SND_MEMORY、 SND_NODEFAULT、SND_NOSTOP和SND_SYNC的組合, 這些標誌的含義與PlaySound的一樣。可以看出,sndPlaySound不能直接播放聲音資源。 要用該函式播放WAVE檔案,可按下面的方式呼叫: sndPlaySound(“MYSOUND.WAV”,SND_ASYNC);