Delphi多媒體設計之播放WAVE文件(API) -开发者知识库

Delphi多媒體設計之播放WAVE文件(API) -开发者知识库,第1张

多媒體程序設計是一個名不符實的詞組,其道理就是多媒體程序設計包含着廣泛的可能性,它尤其包括了Wave音頻、MIDI音頻、AVI視頻和動畫等。不要將多媒體程序設計與游戲程序設計混淆了。

游戲設計自然包含多媒體。但是比起簡單的聲音視頻應用程序,它包含多媒體就更多了。接下來我在Delphi多媒體設計中利用Delphi提供的工作做一些工作。

Windows API播放Wave文件(Wave Audio with the Windows API)

通常關於Windows API函數談論不多,因為大多數時候,VCL提供了比API更好的工作方法。然而,在包房WAVE文件時,沒有比Win32 API的PlaySound函數更簡單的。利用這個函數處理WAVE文件時非常容易的。首先需要做的就是把MmSystem單元增加到用戶單元的uses列表中,然后用適當的參數調用PlaySound:

  PlaySound('test.wav', 0, SND_FILENAME or SND_ASYNC);

非常簡單是不是?如大家所看到的,PlaySound的第一個參數是用來指定播放的音頻文件,最后一個參數用來決定聲音如何播放的標志。當播放硬盤上的WAVE文件時,指定SND_FILENAME作為最后一個參數。SND_ASYNC(異步播放)參數的意思是播放聲音開始用戶立刻獲得其他操作權,如果不寫這個參數,聲音將會播放完成后用戶獲得操作權。

為此,特別編寫了一個簡單的范例,點擊按鈕后,播放音樂,彈出對話框,提示你是否終止音樂,如下圖:

Delphi多媒體設計之播放WAVE文件(API) -开发者知识库,image,第2张


PlaySound函數也可以播放系統聲音和磁盤文件,要播放系統聲音,指定聲音別名作為第一個參數給PlaySound,而把SND_ALIAS最為標志參數,例如:

PlaySound('WindowsLogon', 0, SND_ALIAS or SND_ASYNC);

這段代碼播放與Windows啟動事件相關聯的系統聲音,具體的系統事件聲音的別名可在注冊表中查找。

Note

注冊表中HKEY_CURRENT_USER\AppEvents下存儲着系統事件聲音設置,在下面還有“EventLabels”和“Schemes”兩個子鍵。子鍵 EventLabels-儲存了每個事件的標識及名稱,而子鍵Schems則關聯了每個事件和聲音,它下邊有“Apps”和“Name”兩個子鍵, “Apps”子鍵下儲存了系統事件的聲音設定,一般每個事件下有兩個子鍵“.Current”指當前的聲音設置文件位置和“.Default”指默認的聲音文件的位置。“Name”子鍵儲存了聲音配音方案的名稱。

Delphi多媒體設計之播放WAVE文件(API) -开发者知识库,image,第3张

也為系統聲音編寫了小范例,如下圖,點擊按鈕后,播放系統啟動的聲音。

Delphi多媒體設計之播放WAVE文件(API) -开发者知识库,image,第4张


如果所要求的聲音未能找到,Windows將會發出缺省聲音(若有缺省值則為叮聲),可以通過制定SND_NODEFAULT標志來禁止Windows發出缺省聲音。例如,若想要播放系統聲音,但若找不到系統聲音,不要發出缺省聲音,可以試試這段代碼:

PlaySound('找不到', 0, SND_ALIAS or SND_ASYNC or SND_NODEFAULT);

注意:SND_ALIAS、SND_ASYNC和SND_NODEFAULT之間用or連接。

Delphi多媒體設計之播放WAVE文件(API) -开发者知识库,image,第5张


Note

Win32 API的MessageBeep函數也能通過索引值來發出系統聲音。MessageBeep的調用很簡單,只有一個參數,如下:

MessageBeep(MB_OK);

實例代碼中,點擊下列兩個按鈕,測試聽聽,學會MessageBeep的用法。

Delphi多媒體設計之播放WAVE文件(API) -开发者知识库,image,第6张

 

處理PlaySound函數時有兩個其他的標志非常重要:

  • SND_ASYNC標志規定異步發聲,當使用該標志時,聲音開始播放,並馬上返回控制調用程序。意思是,聲音的播放,不影響應用程序的其他操作。
  • SND_SYNC標志規定同步發聲,知道聲音播放完畢后才返回給調用程序。該標志為PlaySound 函數缺省標志。

還有許多其他的標志可用來控制怎樣用PlaySound播放聲音。詳情請自行參看Win32聯機幫助中PlaySound部分。


以上代碼均在Delphi 7中測試通過,示例代碼下載: 多媒體程序設計.rar

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复