program SoundProg;
uses WinTypes, WinProcs, WObjects;
const
  ButtonID= 100;

type
  TMyApp = object(TApplication)
   procedure InitMainWindow; virtual;
  end;

  PMyWindow = ^TMyWindow;
  TMyWindow = object(TWindow)
      But: PButton;
      DurationCount: integer;
    constructor Init(AParent: PWindowsObject; ATitle: PChar);
    procedure MakeNoise(var Msg: TMessage); virtual id_First + ButtonID;
    procedure WMKillFocus(var Msg: TMessage); virtual wm_First + wm_KillFocus;
  end;

procedure TMyApp.InitMainWindow;
begin
  MainWindow:= new(PMyWindow,init(nil,'Sound Window'));
end;

constructor TMyWindow.Init(AParent: PWindowsObject; ATitle: PChar);
begin
  DurationCount:= 0;
  TWindow.Init(AParent, ATitle);
  but:= New(PButton,init(@self,ButtonId,'&Make Noise',10,10,100,50,false));
end;

procedure TMyWindow.MakeNoise(var Msg: TMessage);
const
  Duration = 100;
var
  err: integer;
  Pitch: integer;
begin
  OpenSound;
  for Pitch:= 1 to 84 do
    begin                 
      SetVoiceNote(1, Pitch, 10, 1);
    end;
  StartSound;
  WaitSoundState(S_QueueEmpty);
  StopSound;
  CloseSound;
end;


procedure TMyWindow.WMKillFocus(var Msg: TMEssage);
begin
  messageBeep(0);
end;


var
  x: TMyApp;
begin
  x.Init('Test');
  x.Run;
  x.Done;
end.