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

jojoxyz 2005-03-23 01:01:56
在没有声卡的机器上,有什么办法可以让计算机发出声音报警?beep可以但是同步的,响的时候占资源而且其它消息无法响应,听说有种通过端口发声的办法可以适用任何操作系统?
...全文
460 点赞 收藏 37
写回复
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上看到过汇编操作端口的代码,但编译不成功
回复 点赞
发动态
发帖子
Windows SDK/API
创建于2007-08-02

797

社区成员

2.2w+

社区内容

Delphi Windows SDK/API
社区公告
暂无公告