delphi報警聲音 Beep、MessageBeep 和 Windows.Beep

我的辦法,增加一個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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章