Die Community zu .NET und Classic VB.
Menü

Tipp-Upload: VB 5/6 0204: Piepstöne beliebiger Frequenz mit dem Systemlautsprecher erzeugen

 von 

Ü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.

Zurück zur Übersicht

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

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

Beep, GetVersionExA, ReadPort, Sleep, WritePort

Download:

Download des Beispielprojektes [3,78 KB]

' 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.