Beep erzeugen
-
- Beiträge: 185
- Registriert: Fr 18. Jan 2013, 09:29
- OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
- CPU-Target: Celeron
Beep erzeugen
Noch eine wahrscheinlich einfache Geschichte.
Wie kann man den Lautsprecher veranlassen einen "Beep" von sich zu geben?
Gruß Fritz
Wie kann man den Lautsprecher veranlassen einen "Beep" von sich zu geben?
Gruß Fritz
Re: Beep erzeugen
Dazu muss man den Charakter 7 ausgeben. Also mit "write(#7);"
-
- 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
Entweder Character 7 ausgeben oder (schöner): sysutils.Beep; (http://www.freepascal.org/docs-html/rtl/sysutils/beep.html)
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Re: Beep erzeugen
compmgmt hat geschrieben:Entweder Character 7 ausgeben oder (schöner): sysutils.Beep; (http://www.freepascal.org/docs-html/rtl/sysutils/beep.html)
Warum schöner? Ich habe die Frage schon beantwortet und du antwortest nochmal das selbe, nur mit einem kleinen Zusatz. Das Verstehe ich nicht.
-
- 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
itjump hat geschrieben:Warum schöner? Ich habe die Frage schon beantwortet und du antwortest nochmal das selbe, nur mit einem kleinen Zusatz. Das Verstehe ich nicht.
Ja, eine Ergänzung. Und ich finde es schöner, da man ein "Beep;" beim überfliegen des Quellcodes besser als Beep erkennt, als "WriteLn(#7);". Das mögen andere anders sehen, aber es ist für mich leichter zu lesen.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Re: Beep erzeugen
compmgmt hat geschrieben:itjump hat geschrieben:Warum schöner? Ich habe die Frage schon beantwortet und du antwortest nochmal das selbe, nur mit einem kleinen Zusatz. Das Verstehe ich nicht.
Ja, eine Ergänzung. Und ich finde es schöner, da man ein "Beep;" beim überfliegen des Quellcodes besser als Beep erkennt, als "WriteLn(#7);". Das mögen andere anders sehen, aber es ist für mich leichter zu lesen.
Da hast du wohl recht, allerdings schadet es meiner Meinung nach nicht, wenn man lernt, was Charakter eigentlich sind, bzw. wie sie auf Hardwareebene arbeiten
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Beep erzeugen
Ich habe 3 Varianten ausprobiert, aber aus keiner kommt ein Ton.
Ich habe es mit WinXP in VirtualBox probiert.
Ansonsten funktioniert die Ton-Ausgabe, zB, die Systemklänge unter "Sounds und Audiogeräte".
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
Write(^g);
Beep;
MessageBeep(0); // braucht uses Windows
end;
Ich habe es mit WinXP in VirtualBox probiert.
Ansonsten funktioniert die Ton-Ausgabe, zB, die Systemklänge unter "Sounds und Audiogeräte".
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- 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
Mathias hat geschrieben:Ich habe 3 Varianten ausprobiert, aber aus keiner kommt ein Ton.Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
Write(^g);
Beep;
MessageBeep(0); // braucht uses Windows
end;
Ich habe es mit WinXP in VirtualBox probiert.
Ansonsten funktioniert die Ton-Ausgabe, zB, die Systemklänge unter "Sounds und Audiogeräte".
1. Entweder, oder. Wenn du mehrere Töne gleichzeitig ausprobiert, wird entweder nichts passieren oder nur einer davon abgespielt. (Kann aber auch sein du hast das hier nur zur Veranschaulichung gemacht)
2. Unter Windows 10 folgendes Ergebnis: MessageBeep und Beep funktionieren wunderbar, bei Write stürzt logischerweise das Programm ab, da es keine Konsole zum Ausgeben gibt.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Re: Beep erzeugen
Compmgmt, die Töne werden ausgegeben, allerdings fast gleichzeitig, was die Hardware unter Umständen nicht mitmacht, dann würde kein Ton kommen. Aber ansonsten hast du recht, das Programm dürfte nicht mal Kompeliert werden
-
- 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
itjump hat geschrieben:Compmgmt, die Töne werden ausgegeben, allerdings fast gleichzeitig, was die Hardware unter Umständen nicht mitmacht, dann würde kein Ton kommen. Aber ansonsten hast du recht, das Programm dürfte nicht mal Kompeliert werden
Ich habe es auch schon erlebt, dass in so einem Fall gar kein Ton ausgegeben wird.
Kompiliert schon, ist ja kein Syntaxfehler drin. Nur es stürzt beim Aufrufen der Prozedur ab.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Re: Beep erzeugen
compmgmt hat geschrieben:itjump hat geschrieben:Compmgmt, die Töne werden ausgegeben, allerdings fast gleichzeitig, was die Hardware unter Umständen nicht mitmacht, dann würde kein Ton kommen. Aber ansonsten hast du recht, das Programm dürfte nicht mal Kompeliert werden
Ich habe es auch schon erlebt, dass in so einem Fall gar kein Ton ausgegeben wird.
Kompiliert schon, ist ja kein Syntaxfehler drin. Nur es stürzt beim Aufrufen der Prozedur ab.
Verstehe doch, wenn kein Ton ausgegeben wird, liegt das an der Hardware. 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. Die Software gibt aber das Signal, was aber dann wenig bringt, wenn die Hardware das nicht verarbeiten kann.
https://www.welt.de/wissenschaft/article12280737/Antischall-Technik-bringt-endlich-Ruhe-ins-Haus.html. Das dürfte dir die Funktion ungefähr klar machen. Das hat zwar nichts mit Programmieren an sich zu tun, jedoch Funktioniert das ganze Grundsätzlich auch beim Programmieren
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Beep erzeugen
Verstehe doch, wenn kein Ton ausgegeben wird, liegt das an der Hardware. Dadurch das 2 Töne gleichzeitig erzeugt werden
Ich habe jetzt folgendes probiert, gibt auch keine Ton-Ausgabe, aber die 'x' werden sehr langsam ausgegeben.
Code: Alles auswählen
for i := 0 to 10000 do begin
Write(^g);
Write('x');
end;
Ich denke der Ton verschwindet irgendwo in XP.
Was ich vielleicht noch erwähnen muss, eine WAV-Datei, wird über die Soundkarte ausgegeben, aber [Ctrl-G] geht über den PC-Speaker.
Jetzt muss ich mal gucken, ob mein PC über ein Speaker hat.
Es muss wohl einer verbaut sein, wen ich den PC starte und der POST-Process in Ordnung war, piepst er kurz.
Vielleicht wird der Pieser in der Virtual-Box verschluckt.
Ich habe grade ein DOS-Games probiert, bei dem ich weis, das diese nur den PC-Speaker unterstützt, Ergebniss: kein Ton.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2640
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Beep erzeugen
itjump hat geschrieben:Aber ansonsten hast du recht, das Programm dürfte nicht mal Kompeliert werden
itjump hat geschrieben:Verstehe doch, wenn kein Ton ausgegeben wird, liegt das an der Hardware. 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.
Warum schreibst du hier eigentlich soviel Unsinn. Das kann man beim Lesen ja kaum ertragen.
Mathias hat geschrieben:Was ich vielleicht noch erwähnen muss, eine WAV-Datei, wird über die Soundkarte ausgegeben, aber [Ctrl-G] geht über den PC-Speaker.
[...]
Vielleicht wird der Pieser in der Virtual-Box verschluckt.
Ich habe grade ein DOS-Games probiert, bei dem ich weis, das diese nur den PC-Speaker unterstützt, Ergebniss: kein Ton.
Dann wird tatsächlich VirtualBox das Problem sein. Die Audio-Einstellungen die du in VBox festlegst, betreffen ja nur das Soundkarten-System. Der PC-Speaker (im Sinne von dem piepsenden Teil) ist davon völlig unabhängig. Der wird unter Windows auch nicht im Bereich Audiogeräte augeführt.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Beep erzeugen
Ich hatte gerade meinen PC mit MSDOS 3.3 gestartet.
Beim Kommando
kommen ein paar Piepser.
Diese Game habe ich gerade im "DOSBox Emulator" probiert, dort habe ich Ton.
Nur leider kann ich den obigen Echo-Befehl nicht eingeben, da es mir Ctrl-G nicht an nimmt.
Aber was komisch ist, ich habe dort ein kleiner Test mit TP geschrieben, aber write(#7) oder writeln(#7) bleibt stumm, auch mit ^G.
Egal ob mit oder ohne uses Crt.
Ich habe noch einen Treiber, welcher unter Win31 eine Soundkarte über den PC-Speaker emuliert.
Mit diesem habe ich auch PC-Speaker Ton in der DOSBox.
Beim Kommando
Code: Alles auswählen
echo ^G^G^G^G^G^G
kommen ein paar Piepser.
Ich habe grade ein DOS-Games probiert, bei dem ich weis, das diese nur den PC-Speaker unterstützt, Ergebniss: kein Ton.
Diese Game habe ich gerade im "DOSBox Emulator" probiert, dort habe ich Ton.
Nur leider kann ich den obigen Echo-Befehl nicht eingeben, da es mir Ctrl-G nicht an nimmt.
Aber was komisch ist, ich habe dort ein kleiner Test mit TP geschrieben, aber write(#7) oder writeln(#7) bleibt stumm, auch mit ^G.
Egal ob mit oder ohne uses Crt.
Ich habe noch einen Treiber, welcher unter Win31 eine Soundkarte über den PC-Speaker emuliert.
Mit diesem habe ich auch PC-Speaker Ton in der DOSBox.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- 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
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: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.
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.
Code: Alles auswählen
InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);