Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   PC-Lautsprecher direkt ansprechen mit Delphi + Assembler (https://www.delphipraxis.net/66021-pc-lautsprecher-direkt-ansprechen-mit-delphi-assembler.html)

TOC 23. Mär 2006 15:38


PC-Lautsprecher direkt ansprechen mit Delphi + Assembler
 
Liste der Anhänge anzeigen (Anzahl: 4)
Hi!

Hey, ich hab da mal im InterNet herumgesucht und bin durch Zufall auf ´ne Seite www.Delphi-Fundgrube.de mit Delphi-Beispielen gekommen. Da wurde erklärt wie man mit ein paar Assembler-Prozeduren die Ports direkt ansteuern und dem PC-Lautsprecher so Töne entlocken kann. Es sind zwei sehr kleine Assembler Prozeduren. Ich habe damit ein wenig herumgespielt und diese kleine unsinnige PC-Speaker-Demo gebastelt.

Allerdings kann so ein Beep schon seinen Sinn machen, zum Beispiel innerhalb einer Komponente wenn ein Fehler auftritt und man nicht auf die HighLevel-Soundfunktionen zugreifen kann oder will. Oder auch beim Testen und Debuggen eines Programmes.

Ihr könnts Euch ja mal ansehen.

Grüsse von TOC!

Loki77 23. Mär 2006 15:49

Re: PC-Lautsprecher direkt ansprechen mit Delphi + Assembler
 
Bekomme leider nur eine Fehler-Meldung (Priviligierte Anweisung) , ebenso beim Beenden des Programms!!!!
^Kann es mit X nicht beenden...
(Oder muss es immer über den Task-Manager beendet werden?).
Falls es mal läuft gebe ich Feedback....

TOC 24. Mär 2006 16:51

Re: PC-Lautsprecher direkt ansprechen mit Delphi + Assembler
 
Hi!

Zitat:

Zitat von Loki77
Bekomme leider nur eine Fehler-Meldung (Priviligierte Anweisung) , ebenso beim Beenden des Programms!!!!
^Kann es mit X nicht beenden...
(Oder muss es immer über den Task-Manager beendet werden?).
Falls es mal läuft gebe ich Feedback....

Also, den Fehler kann ich mir nit erklären, ausser das in der HTML-Seite von der ich die Assembler-Befehle habe erklärt ist das es unter Windows NT nich geht. Die Seite findest Du übrigens im Archiv. Aber da gibt es eine Beep-Funktion der man die Frequenz in Herz und die Zeit in Millisekunden angeben kann, in der Windows-Bibliothek von Win NT! Es könnte auch sein das Dein Delphi 2006 diese Assembler-Befehle nicht akzeptiert.

Also unter Delphi 3.0 Pro und Delphi 7.0 Pe hab und Windows 98 SE habe ich es getestet, klappt einwandfrei.

Nein, du must es normalerweise nicht über den Task-Manager beenden. Normalerweise reicht ein klick auf das Schliess-Symbol völlig aus!

Also, ich hab´s grad nochmal runtergeladen und hier im InterNet-Kaffe getestet, selber Fehler wie bei Dir. Dann liegt es wohl daran das unter Windows-XP ein direktes ansteuern der Ein/Ausgabe-Ports mit Assembler verboten ist, sorry :cry: !

Grüsse von TOC!

dizzy 24. Mär 2006 16:56

Re: PC-Lautsprecher direkt ansprechen mit Delphi + Assembler
 
Zitat:

Zitat von TOC
Also unter Delphi 3.0 Pro und Delphi 7.0 Pe hab und ]b}Windows 98 SE[/b] habe ich es getestet, klappt einwandfrei.

...aber leider (bzw. zum Glück) nicht mehr unter NT-basierten Betriebsystemen. Portzugriffe sind, wie nahezu alle direkten Harwarezugriffe ab NT, nicht mehr vom Usermode aus möglich, und erfordern Treiber. Windows ME wäre somit die letzte Version in der das so ginge.

shmia 24. Mär 2006 16:56

Re: PC-Lautsprecher direkt ansprechen mit Delphi + Assembler
 
Zitat:

Zitat von Loki77
Bekomme leider nur eine Fehler-Meldung (Priviligierte Anweisung) , ebenso beim Beenden des Programms!!!!

Ganz klar, ab Windows NT und höher kann nicht mehr direkt auf einen Port zugegriffen werden !!
Das geht nur mit Windows 3.x, 95, 98 und evtl. auch ME.

TOC 24. Mär 2006 16:59

Re: PC-Lautsprecher direkt ansprechen mit Delphi + Assembler
 
Hi!

Zitat:

Zitat von shmia
Zitat:

Zitat von Loki77
Bekomme leider nur eine Fehler-Meldung (Priviligierte Anweisung) , ebenso beim Beenden des Programms!!!!

Ganz klar, ab Windows NT und höher kann nicht mehr direkt auf einen Port zugegriffen werden !!
Das geht nur mit Windows 3.x, 95, 98 und evtl. auch ME.

Na, dann haben wir das jetzt ja wohl geklärt.

Grüsse von TOC!

TOC 25. Mär 2006 15:09

Re: PC-Lautsprecher direkt ansprechen mit Delphi + Assembler
 
Hi!

Ich hab´s mal überprüft. Es gibt in der Windows.pas tatsächlich eine Funktion Beep(Hz,MilliSec). Ausgehend davon hab ich die Speaker-Demo mal auf diesen Befehl umgeschrieben und allen Assembler-Code entfernt. Wenn das stimmt was in der HTML-Seite steht dann läuft diese Version ab Windows NT. Ich hab´s hier im InterNet-Cafe unter Windows XP getestest und es scheint zu funktionieren, das heist es kommt keine Fehlermeldung. Da es hier im InterNet-Cafe aber recht laut ist konnte ich nur ein leises Säuseln hören... Windows 95 und 98 SE ignorieren allerdings die Frequenz und die Zeitangabe wenn eine Soundkarte installiert ist und geben statdessen über die Soundkarte den System-Beep aus, den man unter der "Systemsteuerung/Akustische Signale" einstellen kann.

Das wär´s noch wenn ein Assembler oder C-Programmierer für uns einen PC-Speaker-Treiber schreiben würde... Ich hab mal irgendwo gelesen das man in Delphi leider keine Treiber programmieren kann.

Die ganze Speaker-Demo ist sowieso nur eine unsinnige kleine Spielerei. Heute leben wir ja im Midi- und MP3-Zeitalter. Allerdings hat vor vielen vielen Jahren Techno mal so angefangen: Mit nem Beep aus dem Speaker :stupid: !

Grüsse von TOC!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz