Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Mai 19, 2024 11:58

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Wo ist der Beep?
BeitragVerfasst: Do Sep 19, 2002 19:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 19, 2002 19:03
Beiträge: 2
Gibt es eine einfache Methode um einen einigermaßen lauten Beep-Ton aus dem PC-Speaker ertönen zu lassen?
Der normale Beep von Delphi ist ja kaum zu hören :-(
Unter TP gab es die Möglichkeit sogar die Tonhöhe anzugeben, doch in Delphi sieht es eher mau aus.

Ich habe auch schon aus diversen Foren Assembler-Code für diesen Zweck ausprobiert, doch funktioniert das nur unter gewissen Umständen.
D.h. manchmal hört man was und manchmal halt nichts (es hängt stark von den Programmen ab, die der Benutzer gestartet hat).

Ich brauche diese Funktion um dem Benutzer auf ein Nachrichtenfenster hinzuweisen - vielleicht könnt ihr mir helfen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 19, 2002 20:05 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3827
Wohnort: Tespe (nahe Hamburg)
Greetz,

nun unter Win-Maschinen scheint ein erzwingen nicht ganz so leicht zu sein, da Windows eigenständig entscheidet, ob die Soundkarte oder der Speaker zum Einsatz kommt... im Zweifelsfall Soudnkarte rausreißen :twisted:

Kann die Funktion leider nicht testen, da mein Speaker scheinbar sich selbst gekreuzigt hat, aber die PSDK sieht eine Funktion Namens "Beep" vor. Nicht zu verwechseln mit der von Delphi. Das Problem dabei, wenn Du ein Form verwendest ist, dass der Delphi-Befehl den der WinAPI überschreibt. Am besten ne neue Unit erstellen und nur "windows.pas" einbinden, dann steht die dir orginal API-Funktion zur Verfügung. Ansonsten bitte näheres der Windows.pas entnehmen ^_-

Auszug aus der PSDK:
Code:
  1. Beep
  2.  
  3. The Beep function generates simple tones on the speaker. The function is synchronous; it does not return control to its caller until the sound finishes.
  4.  
  5.  
  6.  
  7. BOOL Beep(
  8.  
  9.   DWORD dwFreq,      // sound frequency
  10.  
  11.   DWORD dwDuration   // sound duration
  12.  
  13. );
  14.  
  15. Parameters
  16.  
  17. dwFreq
  18.  
  19. [in] Frequency of the sound, in hertz. This parameter must be in the range 37 through 32,767 (0x25 through 0x7FFF).
  20.  
  21. Windows 95/98/Me: The Beep function ignores this parameter.
  22.  
  23.  
  24.  
  25. dwDuration
  26.  
  27. [in] Duration of the sound, in milliseconds.
  28.  
  29. Windows 95/98/Me: The Beep function ignores this parameter.
  30.  
  31.  
  32.  
  33. Return Values
  34.  
  35. If the function succeeds, the return value is nonzero.
  36.  
  37.  
  38.  
  39. If the function fails, the return value is zero. To get extended error information, call GetLastError.
  40.  
  41.  
  42.  
  43. Remarks
  44.  
  45. Terminal Services: The beep is redirected to the client.
  46.  
  47.  
  48.  
  49. Windows 95/98/Me: On computers with a sound card, the function plays the default sound event. On computers without a sound card, the function plays the standard system beep.
  50.  
  51.  


Ansonsten denke ich, dass dies ne Fall für Wicked sein könnte... der hat ja meist ne Idee ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 20, 2002 07:37 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Ich hab's bei mir gerade mal getestet.

Windows.Beep(500, 100);

Mit dem ersten Parameter kannst Du die Tonhöhe setzen, mit dem 2. die dauer. Funktioniert auf meinem Rechner (Windows XP) immer noch. Allerdings wäre mir, dass Mircosoft mal behauptet hätte, diese Funktion nicht mehr länger weiter zu führen und nur aus kompatibilitätsgründen anzubieten. Aber wie gesagt: unter Windows XP tuts noch ;)

Du must das ganze übrigens mit Windows.Beep angeben, de Delphi ansonsten den Beep aus der SysUtils Unit verwenden will, wenn Du diese eingebunden hast.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 20, 2002 08:31 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3827
Wohnort: Tespe (nahe Hamburg)
Komisch, hab ne Deja-vu ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 20, 2002 08:56 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Nö, wollte nur Deinen Post untermauern. Du warst Dir nicht ganz sicher, wie das Funktioniert, also hab ich's ausprobiert und das Ergebnis gepostet. Außerdem wollte ich noch mitteilen, wie es Funktioniert, aus der Form-Unti raus auf die Funktion der Windows.pas zuzugreifen. Ist übrigens generell so. Mann kann bei den Funktionen den Namen der Unit, in welcher die Funktion deklariert ist, mit angeben. Also Windows.Beep oder Forms.Application... würde auch gehen.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 28, 2002 20:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 19, 2002 19:03
Beiträge: 2
Danke Phobeus für deine Hilfestellung!

Der Befehl klappt recht gut, aber nur unter Win XP, nicht aber unter Win9x.

Hier ist der Code den ich für Win9x gefunden habe:


Code:
  1.  procedure DoSound; // Sound aktivieren
  2.  
  3.   begin
  4.  
  5.     asm
  6.  
  7.       push    ax
  8.  
  9.       push    bx
  10.  
  11.       in      al, 61h
  12.  
  13.       or      al, 3
  14.  
  15.       out     61h, al
  16.  
  17.       mov     al, 0B6h
  18.  
  19.       out     43h, al
  20.  
  21.       mov     bx, 596 // Tonhöhe 596 Hz
  22.  
  23.       mov     al, bl
  24.  
  25.       out     42h, al
  26.  
  27.       mov     al, bh
  28.  
  29.       out     42h, al
  30.  
  31.       pop     bx
  32.  
  33.       pop     ax
  34.  
  35.     end;
  36.  
  37.   end;
  38.  
  39.  
  40.  
  41.   procedure NoSound; // Sound unterbrechen
  42.  
  43.   asm
  44.  
  45.     push    ax
  46.  
  47.     in      al, 61h
  48.  
  49.     and     al, 0Dh
  50.  
  51.     out     61h, al
  52.  
  53.     pop     ax
  54.  
  55.     ret
  56.  
  57.   end;


Einfach den Sound mit Hilfe von DoSound aktivieren, dann einen Sleep mit der gewünschten Dauer einstellen und mit NoSound den Beep unterbrechen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]