Tipp-Upload: VB 5/6 0204: Piepstöne beliebiger Frequenz mit dem Systemlautsprecher erzeugen
von Philipp Stephani
Über den Tipp
Dieser Vorschlag soll VB 5/6 Tipp 157 ersetzen.
Dieser Tippvorschlag ist noch unbewertet.
Der Vorschlag ist in den folgenden Kategorien zu finden:
- Multimedia
Dem Tippvorschlag wurden folgende Schlüsselwörter zugeordnet:
Beep, Piepsen, Systemlautsprecher, Lautsprecher, Piep
Damit er übernommen werden kann, müssen noch Änderungen daran vorgenommen werden. Sofern Sie der Autor sind, können Sie sich anmelden, um die Liste einzusehen.
Der Vorschlag wurde erstellt am: 25.02.2008 00:45.
Die letzte Aktualisierung erfolgte am 25.02.2008 00:46.
Beschreibung
Mit Hilfe dieses Tipps kann man Töne beliebiger Frequenz und Dauer auf dem Systemlautsprecher ausgeben. Unter Windows NT, 2000, XP und Vista wird dafür die API-Funktion Beep verwendet, unter Windows 95, 98 und ME wird der PC-Lautsprecher direkt angesteuert, wie in http://fly.cc.fer.hr/GDM/articles/sndmus/speaker1.html beschrieben. Dafür wird eine DLL benutzt, die die C-Funktionen _inp und _outp für VB zur Verfügung stellt. Diese Funktionen lesen bzw. schreiben ein Byte auf einen IO-Port.
Schwierigkeitsgrad |
Verwendete API-Aufrufe: Beep, GetVersionExA, ReadPort, Sleep, WritePort |
Download: |
' Dieser Source stammt von http://www.activevb.de ' und kann frei verwendet werden. Für eventuelle Schäden ' wird nicht gehaftet. ' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. ' Ansonsten viel Spaß und Erfolg mit diesem Source! ' ------------- Anfang Projektdatei prjPiep.vbp ------------- ' --------- Anfang Modul "modPiep" alias modPiep.bas --------- Option Explicit Private Declare Function GetVersionExA Lib "kernel32.dll" ( _ ByRef lpVersionInformation As OSVERSIONINFO) As Long Private Declare Sub Sleep Lib "kernel32.dll" ( _ ByVal dwMilliseconds As Long) As Long Private Declare Function Beep Lib "kernel32.dll" ( _ ByVal dwFreq As Long, _ ByVal dwDuration As Long) As Long Private Declare Function ReadPort Lib "PortIO.dll" ( _ ByVal port As Integer) As Long Private Declare Sub WritePort Lib "PortIO.dll" ( _ ByVal port As Integer, _ ByVal value As Byte) Private Type OSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion(0 To 127) As Byte End Type Private Const VER_PLATFORM_WIN32_NT As Long = 2 Private Sub Piep(ByVal Frequenz As Long, ByVal Dauer As Long) Const MinFreq As Long = &H25& Const MaxFreq As Long = &H7FFF& Const IntFreq As Long = 1193180 Dim Version As OSVERSIONINFO Dim Zahl As Long If Frequenz < MinFreq Then Frequenz = MinFreq ElseIf Frequenz > MaxFreq Then Frequenz = MaxFreq End If Version.dwOSVersionInfoSize = LenB(Version) GetVersionExA Version If Version.dwPlatformId = VER_PLATFORM_WIN32_NT Then Beep Frequenz, Dauer Else Zahl = CLng(IntFreq / Frequenz) WritePort &H43&, &HB6& WritePort &H42&, Zahl And &HFF& WritePort &H42&, (Zahl And &HFF00&) \ &H100& WritePort &H61&, ReadPort(&H61&) Or &H03& Sleep Dauer WritePort &H61&, ReadPort(&H61&) And &HFC& End If End Sub ' ---------- Ende Modul "modPiep" alias modPiep.bas ---------- ' -------------- Ende Projektdatei prjPiep.vbp --------------
Diskussion
Diese Funktion ermöglicht es, Fragen, die die Veröffentlichung des Tipps betreffen, zu klären, oder Anregungen und Verbesserungsvorschläge einzubringen. Nach der Veröffentlichung des Tipps werden diese Beiträge nicht weiter verlinkt. Allgemeine Fragen zum Inhalt sollten daher hier nicht geklärt werden.
Folgende Diskussionen existieren bereits
Um eine Diskussion eröffnen zu können, müssen sie angemeldet sein.