delphi报警声音 Beep、MessageBeep 和 Windows.Beep

2018-10-30

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

阅读62