Sons no alto-falante do micro no Delphi
Inclua na seção uses:Windows
procedure Sound(Freq: Word);
asm
MOV DX, AX
IN AL, $61
MOV AH, AL
AND AL, 3
JNE @@1
MOV AL, AH
OR AL, 3
OUT $61, AL
MOV AL, $B6
OUT $43, AL
@@1:
MOV AX, DX
OUT $42, AL
MOV AL, AH
OUT $42, AL
end;
procedure NoSound;
asm
IN AL, $61
AND AL, $FC
OUT $61, AL
end;
procedure DoBeep(Freq, Duration: LongWord);
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
Windows.Beep(Freq, Duration)
else begin
Sound(1193181 div Freq);
Sleep(Duration);
NoSound;
end;
end;
Se você não entendeu as rotinas, eis um resumo:
Sound:
Inicia um som com uma determinada freqüência (hertz).
NoSound:
Interrompe o som iniciado por Sound.
DoBeep:
Esta rotina verifica se o sistema operacional é o Windows NT.
Se for, chama a API Windows.Beep. Caso contrário chama Sound,
aguarda e, chama NoSound.
Observações
Pelo menos no meu caso, a maioria dos usuários não possuem computadores munidos de caixas de som. Para estes casos as rotinas acima seriam a solução se o som for indispensável.