將WAV檔案做到EXE檔案的方法及注意事項 (轉)

worldblog發表於2007-12-04
將WAV檔案做到EXE檔案的方法及注意事項 (轉)[@more@]

 將WAVE做到EXE檔案的方法及注意事項
  有關這方面的文章很多,本來我也不想多說,可是最近有的網友說他照著有的文章作了個“工程”,可是怎麼也發不出聲來,或者就是揚聲器的BEEP聲。

  後來,筆者找到那些資料,照他們的方法也作了一個“工程”;結果和那位網友一樣。這到底是為什麼呢?

  先來說說一般的文章是怎麼說的吧。


 比較“流行”的說法是:“16位的 1.0和32位的Delphi2.0、3.0都提供了資源
編譯工具,其中 Delphi 1.0的資源叫BRCC.EXE,Delphi 2.0的資源編譯器
叫BRCC32.EXE 用來編譯32位資源,所有資源編譯器都只提供了命令列版本,
沒有提供 版本。製作一個資源一般要透過以下幾個步驟:


1)編寫.RC檔案


..RC檔案是資源的原始檔,編譯器也就編譯這個檔案,生成.RES的
資原始檔
首先在我們的專案子目錄中建立一個純文字檔案,起名叫
Sound.rc,檔案中
有一行,內容為:


SOUND1 WAV SOUND.WAV


其中SOUND.WAV為一個Windows下普通的檔案


2)編譯它


在DOS的提示符下打 BRCC SOUND.RC 嘩啦啦轉一會兒後,就編
譯完了


3)製作


這也是最複雜,最靈活的一步,首先啟動Windows, 再啟動Delphi,
並且將專案
中的檔案儲存到我們的專案中的子目錄中。 在Unit1.pas中找這麼
一行


{$R *.DFM}


把我們的資原始檔就宣告在後面


{$R SOUND.RES}


然後,在Form1中宣告兩個全域性變數


PtrSound : PChar;
hRes : THandle; {handle to the loaded re
if 0 indicates nothing playing}


再在Form1的Create事件中寫下如下程式碼


procedure TForm1.FormCreate(Sender: T);
var hResInfo : THandle;
begin
hResInfo := FindResource(HInstance, 'SOUND1', 'WAVE');
hRes := LoadResource(HInstance, hResInfo);
if hRes > 32 then {its a good load}
begin {lock the resource}
ptrSound:=LockResource(hRes);
end;
end;


然後在Form1中放一個按鈕Button1,寫如下程式碼:


procedure TForm1.Button1Click(Sender: TObject);
begin
sndplaysound(ptrSound,snd_async or snd_Memory);
end;
這時候就可以執行了。”

  是真的嗎?

  其實,資原始檔的檔名就根本不能和WAVE檔案的一樣,否則,呵呵,揚聲器就要BEEP啦,不信你試試看。

  下面筆者寫出可以執行的步驟(當然您的資原始檔不能有錯的):


1)編寫.RC檔案


..RC檔案是資源的原始檔,編譯器也就編譯這個檔案,生成.RES的資原始檔 首先在我們的專案子目錄中建立一個純文字檔案,起名叫
pad.rc ,在檔案中寫一行,內容為://注意!資原始檔名不可以和WAVE檔名一樣的!

SOUND1 WAV SOUND.WAV

其中SOUND.WAV為一個Windows下普通的聲音檔案


2)編譯它


在DOS的提示符下打 BRCC32 PAD.RC 一會兒後,就編譯完了 //現在已是brcc32啦,不知有的文章怎麼還有BRCC??


3)製作程式

在WINDOWS下啟動DELPHI,新建一個專案,將其中的檔案儲存到我們的專案中的子目錄中。 在Unit1.pas中找到


{$R *.DFM}


把我們的資原始檔就宣告在後面


{$R PAD.RES}


然後,在Form1中宣告兩個全域性變數


PtrSound : PChar;
hRes : THandle; {handle to the loaded resource
if 0 indicates nothing playing}


再在Form1的Create事件中寫下如下程式碼


procedure TForm1.FormCreate(Sender: TObject);
var hResInfo : THandle;
begin
hResInfo := FindResource(HInstance, 'SOUND1', 'WAVE');
hRes := LoadResource(HInstance, hResInfo);
if hRes > 32 then {its a good load}
begin {lock the resource}
ptrSound:=LockResource(hRes);
end;
end;


然後在Form1中放一個按鈕Button1,寫如下程式碼:


procedure TForm1.Button1Click(Sender: TObject);
begin
sndplaysound(ptrSound,snd_async or snd_Memory);
end;

 點選編譯,執行,再按BUTTON1,可以聽到揚聲器中發出WAVE檔案內容。

 這樣,一個小工程就完成了。快試試吧! 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988475/,如需轉載,請註明出處,否則將追究法律責任。

相關文章