我的辦法,增加一個timer 設置間隔100ms,通過timer的使能否,控制報警聲音開關
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Windows.Beep(1200+i_f,10+i_f);
if i_f<2000 then
begin
inc(i_f);
end
end;
===============================================
Delphi 在 SysUtils 單元定義 Beep 方法, 可以發出一個聲音, 一般用於提醒和調試.
Beep 其實是調用的 API 函數: MessageBeep(MB_OK);
MessageBeep 有下面幾種用法可以調用幾種不同的聲音文件:
MessageBeep(MB_OK);
MessageBeep(MB_ICONHAND);
MessageBeep(MB_ICONQUESTION); {這個不響, 不知道爲什麼}
MessageBeep(MB_ICONEXCLAMATION);
MessageBeep(MB_ICONASTERISK);
MessageBeep($FFFFFFFF); {同 MessageBeep(MB_OK);}
Beep 同時也是一個 API 函數, 它可以指定聲音的高度和長度; 因爲和 SysUtils.Beep 重名了, 所以應該這樣調用:
Windows.Beep(音高, 長度);
譬如: Windows.Beep(440, 2000); 會把一個國際標準音(440HZ)演奏 2 秒鐘.
另外第一個參數的取值範圍是: $25 - $7FFFF.
音頻表在http://www.cnblogs.com/del/archive/2008/10/22/1316380.html
下面的程序會演奏<奧運會主題歌>的第一句:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); const t = 800; begin Windows.Beep(330, t); Windows.Beep(392, t); Windows.Beep(262, t*2); Windows.Beep(294, t); Windows.Beep(330, t); Windows.Beep(196, t*2); Windows.Beep(262, t); Windows.Beep(294, t); Windows.Beep(330, t); Windows.Beep(392, t); Windows.Beep(294, t*4); end; end.
var
I : Integer;
begin
for I := 0 to 1000 do
Windows.Beep(1200 + I, 10 + I);
end;
在機器發出聲音的時候,窗體是無法進行任何操作的
=====================================
如果你要播放基本的系統聲音,則要用適當的參數調用MessageBeep。如果你要用揚聲器發聲,就調用MessageBeep(-1);。
要播放一個WAV聲音,你可以使用對象TmediaPlayer,但如果你要快速播放,最簡單的方法是調用API函數sndPlaySound(在mmsystem單元中聲明)。
例如:
procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound('C:/Windows/Media/Tada.wav',
SND_NODEFAULT Or SND_ASYNC Or SND_LOOP);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
sndPlaySound(nil, 0); //停止發音
end;
如果你要經常播放一種聲音,就應該考慮把文件載入內存並從內存中播放:
var
tada: string;
procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound(Pointer(tada), SND_MEMORY
Or SND_NODEFAULT Or SND_ASYNC);
end;
initialization
tada := LoadFile('C:/Windows/Media/Tada.wav');
finalization
tada := '; //釋放字符串佔用的內存。
end.