Wie kann ich Töne über den PC-Speaker ausgeben?
1. Windows95/98
Diese Assembler-Routinen von Gerd Kayser realisieren die Klangausgabe über direkte Portzugriffe und funktionieren daher nicht unter Windows NT. Die Prozedur "Sound" erzeugt einen Ton mit der Frequenz "Hz", die Prozedur "NoSound" stoppt die Klangausgabe.
function InPort(PortAddr:word): byte; assembler; stdcall; asm mov dx,PortAddr in al,dx end; procedure OutPort(PortAddr: word; Databyte: byte); assembler; stdcall; asm mov al,Databyte mov dx,PortAddr out dx,al end; Procedure Sound(Hz : Word); var TmpW : Word; begin OutPort($43,182); TmpW := InPort($61); OutPort($61,TmpW or 3); OutPort($42,lo(1193180 div hz)); OutPort($42, hi(1193180 div hz)); end; Procedure NoSound; var TmpW : Word; begin OutPort($43,182); TmpW := InPort($61); OutPort($61,TmpW and 3); end;
2. WindowsNT
Unter Windows NT geht es wesentlich einfacher mit der Beep-Funktion aus der Windows-Unit:
Windows.Beep(Frequenz, Dauer);
Die Frequenz wird in Hertz angegeben und muß zwischen 37 und 32.767 (0x25 bis 0x7FFF) liegen, Die Dauer wird in Millisekunden angegeben. Wenn als Dauer -1 übergeben wird, wird der Ton asynchron so lange ausgegeben, bis die Funktion erneut aufgerufen wird.
Delphi 1 | Delphi 2 | Delphi 3 | Delphi 4 |
nicht getestet | Version nicht betroffen | getestet |
siehe auch: