有什么办法可以让计算机发出声音报警?

jojoxyz 2005-03-23 01:01:56
在没有声卡的机器上,有什么办法可以让计算机发出声音报警?beep可以但是同步的,响的时候占资源而且其它消息无法响应,听说有种通过端口发声的办法可以适用任何操作系统?
...全文
518 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
jojoxyz 2005-04-10
  • 打赏
  • 举报
回复
我试了一下,发声时对程序还是有影响,看来只能多线程了
suwenkui 2005-04-09
  • 打赏
  • 举报
回复
BeepFreq:=2390吧,我是这样设的
suwenkui 2005-04-09
  • 打赏
  • 举报
回复
忘了还要定义一个全局变量,BeepFreq:integer;
我就是这样做的没问题哪个系统都行
suwenkui 2005-04-09
  • 打赏
  • 举报
回复
procedure TFrm_Main.Beep(nFreq, nDura: Word);
var
VerInfo: TOSVersionInfo;
nStart: DWord;
begin
VerInfo.dwOSVersionInfoSize := SizeOf(VerInfo);
GetVersionEx(VerInfo);
if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
Windows.Beep(nFreq, nDura)
else begin
Asm
push bx
in al, $61
mov bl, al
and al, 3
jne @@Skip
mov al, bl
or al, 3
out $61, al
mov al, $b6
out $43, al
@@Skip:
mov ax, nFreq
out $42, al
mov AL, ah
out $42, al
pop bx
end;
nStart := GetTickCount;
repeat
Application.ProcessMessages;
Until GetTickCount > nStart + nDura;
asm
IN AL, $61
AND AL, $FC
OUT $61, AL
end;
end;
end;



调用:

Beep(beepfreq,1500);
1500代表音量什么的,反正自己试试哪个数更好。
雪狼__ 2005-04-09
  • 打赏
  • 举报
回复
说了这么多,大家有没有人已经实现了这样的功能,把源码贴出来看看,学习...
FigoZhu 2005-04-09
  • 打赏
  • 举报
回复
messagebeep()
利用机箱里的喇叭发声的。
jojoxyz 2005-04-09
  • 打赏
  • 举报
回复
我想知道有没有不用线程也可以实现的办法
DDGG 2005-04-02
  • 打赏
  • 举报
回复
// 在机器发出声音的时候,窗体是无法进行任何操作的

新建一个线程来运行发声函数,不就完了?
jojoxyz 2005-04-02
  • 打赏
  • 举报
回复
ding yi xia
jojoxyz 2005-03-31
  • 打赏
  • 举报
回复
var
I : Integer;
begin
for I := 0 to 1000 do
Windows.Beep(1200 + I, 10 + I);
end;

在机器发出声音的时候,窗体是无法进行任何操作的
jojoxyz 2005-03-30
  • 打赏
  • 举报
回复
ding yi xia
oushengfen 2005-03-30
  • 打赏
  • 举报
回复
up
duanhai 2005-03-30
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
begin
for I := 0 to 100 do
Windows.Beep(1200 + I, 10 + I);
end;
jojoxyz 2005-03-29
  • 打赏
  • 举报
回复
beep可以让机器发声,但在发声时,程序无法响应其它事件,又没有可以不影响程序,异步发生的办法?
ohko 2005-03-29
  • 打赏
  • 举报
回复
BOOL Beep(

DWORD dwFreq, // sound frequency, in hertz
DWORD dwDuration // sound duration, in milliseconds
);


Parameters

dwFreq

Windows NT:

Specifies the frequency, in hertz, of the sound. This parameter must be in the range 37 through 32,767 (0x25 through 0x7FFF).

Windows 95:

The parameter is ignored.

dwDuration

Windows NT:

Specifies the duration, in milliseconds, of the sound.

Windows 95:

The parameter is ignored.
todouwang 2005-03-28
  • 打赏
  • 举报
回复
?
不是说messagebeep(0)就是beep么?
jojoxyz 2005-03-28
  • 打赏
  • 举报
回复
procedure BeepEx(feq:word=1200;delay:word=1);
procedure BeepOff;
begin
asm
in al $61;
and al $fc;
out $61 al;
end;
end;
const
scale=1193180;
var
temp:word;
begin
temp:=scale div feq;
asm
in al 61h;
or al 3;
out 61h al;
mov al $b6;
out 43h al;
mov ax temp;
out 42h al;
mov al ah;
out 42h al;
end;
sleep(delay);
beepoff;
end;


这是dfw上有人贴的,编译通不过啊
dmyb7233 2005-03-27
  • 打赏
  • 举报
回复
建议你到汇编论谈去问吧
jojoxyz 2005-03-26
  • 打赏
  • 举报
回复
ding yi xia
jojoxyz 2005-03-25
  • 打赏
  • 举报
回复
beep可以在没有声卡和音箱的机器上发声,但在长时间发声时,程序响应其它消息变得很慢,我想知道有什么办法可以让机器发声,且不占资源?

以前在dfw上看到过汇编操作端口的代码,但编译不成功
加载更多回复(17)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧