Beep erzeugen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
itjump
Beiträge: 179
Registriert: Do 13. Okt 2016, 18:35
Wohnort: Winnenden

Re: Beep erzeugen

Beitrag von itjump »

compmgmt hat geschrieben:
itjump hat geschrieben:Dadurch das 2 Töne gleichzeitig erzeugt werden, kann es passieren, das die Vibration des Lautsprechers sich selbst neutralisiert, wodurch dann kein Ton mehr kommt.
Mir ist noch was dazu eingefallen: Die Anweisungen zum Ton erzeugen laufen allerdings im selben Thread. Dadurch können theoretisch je nach OS folgende Szeanrien entstehen:
1. Ton wird Synchron erzeugt: Erst wird ein Ton ausgegeben, danach der nächste (es gibt einen langen Ton).
2. Nur der letzte Ton wird ausgeben, da alle vorherigen vom Betriebssystem abgebrochen werden. Dieses Phänomen kenne ich zwar nur vom wav-Dateien abspielen, kann allerdings theoretisch auch hier zutreffen.
3. Beide Töne werden gleichzeitig erzeugt. Durch das erzeugen zweier exakt gleicher Töne (in diesem Fall der Beep) wird die Schwingung des Lautsprechers sicherlich nicht neutralisiert, sondern verstärkt.
Es werden keine 2 Töne gleichzeitig erzeugt, das habe ich falsch geschrieben, sondern sie sind leicht versetzt. Auch wenn sie gleichzeitig erzeugt werden würden, würde keine Verstärkung der Schwingungen erfolgen. Wenn sie aber versetzt laufen, können sich die Schwingungen neutralisieren.

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Beep erzeugen

Beitrag von compmgmt »

itjump hat geschrieben:Es werden keine 2 Töne gleichzeitig erzeugt, das habe ich falsch geschrieben, sondern sie sind leicht versetzt. Auch wenn sie gleichzeitig erzeugt werden würden, würde keine Verstärkung der Schwingungen erfolgen. Wenn sie aber versetzt laufen, können sich die Schwingungen neutralisieren.
Theoretisch ist das möglich (Antischall), praktisch wird es aber bei unserem Beispiel niemals der Fall sein.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

haderlump
Beiträge: 188
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

Re: Beep erzeugen

Beitrag von haderlump »

Hallo zusammen
Ich habe jetzt auch alles ausprobiert aber nix zu hören.

Mathias
Beiträge: 6943
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Beep erzeugen

Beitrag von Mathias »

Ich vermute immer mehr, das die Modernen OS die bel-Kommandos unterdrücken, nicht aber den Speaker.

Die wir in der Linux-Shell auch ignoriert.

Code: Alles auswählen

echo -e "\a"
Oder in C++

Code: Alles auswählen

std::cout << "\a" << std::endl;
Wie oben schon beschrieben, hat auch der DOS-Emulator Probleme. Ich denke mal ^G wird über int21 angesprochen, gibt aber keinen Ton.
Das Games, welches einen Ton ausgibt, wird wahrscheinlich direkt die Port-Adresse des Speakers ansprechen.

Ich habe noch folgendes unter Linux mit uses Crt probiert:

Code: Alles auswählen

  Sound(1000);
  WriteLn('on');
  Sleep(1000);
  NoSound;
  WriteLn('off'); 
Hat auch keinen Ton.
Ich habe Sound noch TP im Dos-Emulator probiert, dort habe ich Ton.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Achtzig
Beiträge: 90
Registriert: Mo 15. Okt 2007, 13:09
OS, Lazarus, FPC: Debian
CPU-Target: xxBit

Re: Beep erzeugen

Beitrag von Achtzig »

Unter Debian/Xfce wird bei mir ein Beep über echo -e "\a" ausgegeben. Auch mit WriteLn(#7) im Pascal-Programm erfolgt ein Beep. Sound() gibt aber keinen Ton aus.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Beep erzeugen

Beitrag von Marc »

Ich glaube das geht mit einem Notebook prinzipiell nicht, da keine Hupe eingebaut.
Neuere PC's haben sowas vieleicht auch nicht mehr? Kostet ja extra.
Mein PC (ca. 5Jahre alt) hat schon keine Hupe mehr verbaut. Habe gerade nachgesehen.
Würde auf jeden Fall direkt vom Mainboard direkt erzeugt das Signal, und hat nichts mit Sound zu tun.
Könnte auch sein das Kabel der Hupe gar nicht eingesteckt ist.
Antischall kann nicht sein, da bräuchte es ja zwei Hupen dafür. Das hat es wohl noch nie gegeben?
Zuletzt geändert von Marc am Mo 28. Nov 2016, 17:49, insgesamt 1-mal geändert.
Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6943
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Beep erzeugen

Beitrag von Mathias »

Ich glaube das geht mit einem Notebook prinzipiell nicht, da keine Hupe eingebaut.
Neuere PC's haben sowas vieleicht auch nicht mehr? Kostet ja extra. Würde auf jeden Fall direkt vom Mainboard direkt erzeugt das Signal.
Die Hardware ist bei mit vorhanden, ansonsten würde würde es bei mir unter purem DOS auch nicht gehen, aber wie weiter oben beschrieben, hatte ich mit DOS 3.3 Ton.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Beep erzeugen

Beitrag von Marc »

Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6943
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Beep erzeugen

Beitrag von Mathias »

Der Befehl printf("\a"); reicht in C-Code bei Verwendung der Konsolenausgabe aus, um einen „Alert“ (dt. Alarm) auszugeben, welcher früher (bei Microsoft bis Windows XP) üblicherweise in Form eines Piepstons aus dem Systemlautsprecher realisiert wurde.
Könnte dies vielleicht noch einen Zusammenhang mit Win32 oder Win64 haben ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

haderlump
Beiträge: 188
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

Re: Beep erzeugen

Beitrag von haderlump »

Das mit der Neutralisation der Töne ist in der Praxis kaum der fall. Dazu müssten die Schwingungen exakt 180 Grand phasenverschoben sein. Da hier nur Rechtecksignale erzeugt werden wäre bereits bei 179 grad ein ton zu hören, wenn auch nur ein sehr leiser.

Mathias
Beiträge: 6943
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Beep erzeugen

Beitrag von Mathias »

Das mit der Neutralisation der Töne ist in der Praxis kaum der fall.
Wem man ^G^G^G, dann würde man *beepbeepbeep* hören. Unter MSDOS ist dies auf jeden Fall der Fall. Während eines *beep* ist DOS blockiert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Beep erzeugen

Beitrag von compmgmt »

Mathias hat geschrieben:Während eines *beep* ist DOS blockiert.
ja, da DOS kein scheduler wie Linux oder Windows NT hat.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Epcop
Beiträge: 159
Registriert: Di 29. Mai 2012, 09:36

Re: Beep erzeugen

Beitrag von Epcop »

Für mich hört sich das so an, als würde der Speaker beim Mainboard fehlen.

Die Speaker sind nicht (mehr?) standartmäßig im PC verbaut; Bzw. habe ich schon öfter gesehen das keiner mehr vorhanden ist. Der Anschluss ist aber in der Regel auf dem Mainboard noch vorhanden und befindet sich meist neben dem "Power", "LED",... Anschlüssen. Kann also leicht "nachgerüstet" werden ;-) Einfach mal ins Gehäuse sehen und nach was lautsprecherähnlichem suchen ;-)

itjump
Beiträge: 179
Registriert: Do 13. Okt 2016, 18:35
Wohnort: Winnenden

Re: Beep erzeugen

Beitrag von itjump »

Epcop hat geschrieben:Für mich hört sich das so an, als würde der Speaker beim Mainboard fehlen.

Die Speaker sind nicht (mehr?) standartmäßig im PC verbaut; Bzw. habe ich schon öfter gesehen das keiner mehr vorhanden ist. Der Anschluss ist aber in der Regel auf dem Mainboard noch vorhanden und befindet sich meist neben dem "Power", "LED",... Anschlüssen. Kann also leicht "nachgerüstet" werden ;-) Einfach mal ins Gehäuse sehen und nach was lautsprecherähnlichem suchen ;-)
Die sind aber auch nicht mehr wirklich zu gebrauchen heutzutage

Mathias
Beiträge: 6943
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Beep erzeugen

Beitrag von Mathias »

Die sind aber auch nicht mehr wirklich zu gebrauchen heutzutage
Kaufen kann man solche Dinger immerhin noch.

https://www.reichelt.de/Miniaturlautspr ... ARCH=%252A
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten