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.