Wie man eine MP3-Datei abspielt, haben wir Ihnen bereits in früheren Tipps & Tricks gezeigt, u.a. auch die API-Variante. Und genau auf dieser Variante baut unser heutiger Tipp auf. Diesmal zeigen wir Ihnen, wie sich eine MP3-Datei im Loop abpsielen lässt, d.h. sobald der Abspielvorgang beendet ist, lässt sich die MP3-Datei optional erneut abspielen. Den Code für den Abspielvorgang kapseln wir in ein kleines Klassenmodul, das autom. ein Event auslöst, wenn der Abspielvorgang beendet ist. Auf diese Weise kann mit in der Anwendung dann ganz einfach den Abspielvorgang wiederholen. ''' <summary> ''' MP3Player-Klasse zum Abspielen von MP3-Dateien ''' </summary> Public Class MP3Player ' Benötigte API-Funktion Private Declare Function mciSendString Lib "winmm.dll" _ Alias "mciSendStringA" ( _ ByVal lpszCommand As String, _ ByVal lpszReturnString As String, _ ByVal cchReturnLength As Integer, _ ByVal hwndCallback As Integer) As Integer ''' <summary> ''' Wird ausgelöst, wenn die MP3-Datei vollständig abgespielt wurde ''' </summary> Public Event Finished(ByVal sender As Object, ByVal e As EventArgs) ' Timer Private WithEvents oTimer As Timer ' Eigenschaften Private m_Filename As String = "" Private m_Alias As String = "" Private m_IsOpened As Boolean = False Private m_IsPlaying As Boolean = False ' Hilfsfunktion: ' MCI-Kommando senden und "Ergebnis" zurückgeben Private Function SendCommand(ByVal sCmd As String) As Integer Dim sReturn As String = Strings.Space(256) Dim nResult As Integer = mciSendString(sCmd, sReturn, sReturn.Length, 0) Return Val(sReturn) End Function ''' <summary> ''' Initialisiert die Klasse und lädt die angegebene MP3-Datei ''' </summary> ''' <param name="Filename">MP3-Datei</param> Public Sub New(ByVal Filename As String) m_Filename = Filename m_Alias = "MP3_" & Now.ToString("HHmmss") & CStr(Now.Millisecond) ' MCI öffnen m_IsPlaying = False m_IsOpened = (mciSendString("open " & Chr(34) & m_Filename & Chr(34) & _ " type MPEGVideo alias " & m_Alias, 0, 0, 0) = 0) ' Timer erstellen oTimer = New Timer oTimer.Interval = 500 oTimer.Enabled = False End Sub ''' <summary> ''' Gibt True zurück, wenn die MP3-Datei abgespielt werden kann ''' </summary> Public ReadOnly Property CanPlay() As Boolean Get Return m_IsOpened End Get End Property ''' <summary> ''' Startet den Abspielvorgang ''' </summary> Public Function Play() As Boolean If m_IsOpened Then m_IsPlaying = (SendCommand("play " & m_Alias & " from 0") = 0) ' Timer starten oTimer.Start() Return m_IsPlaying End If End Function ''' <summary> ''' Gibt True zurück, während die MP3-Datei abgespielt wird ''' </summary> Public ReadOnly Property IsPlaying() As Boolean Get Return m_IsPlaying End Get End Property ''' <summary> ''' Beendet den aktuellen Abspielvorgang ''' </summary> Public Sub [Stop]() If m_IsOpened AndAlso m_IsPlaying Then SendCommand("stop " & m_Alias) m_IsPlaying = False End If ' Timer stoppen oTimer.Stop() End Sub ''' <summary> ''' Beendet den Abspielvorgang und schließt die MP3-Datei ''' </summary> Public Sub Close() If m_IsOpened Then If m_IsPlaying Then Me.Stop() SendCommand("close " & m_Alias) m_IsOpened = False End If End Sub Private Sub oTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles oTimer.Tick ' Prüfen, ob MP3 noch abgespielt wird Dim MP3Pos As Integer = SendCommand("status " & m_Alias & " position") Dim MP3Len As Integer = SendCommand("status " & m_Alias & " length") If MP3Pos >= MP3Len Then oTimer.Stop() ' Ereignis auslösen RaiseEvent Finished(Me, e) End If End Sub Protected Overrides Sub Finalize() Me.Close() MyBase.Finalize() End Sub End Class Aufrufbeispiel: ' MP3Player-Klasse Private WithEvents MP3Play As MP3Player ' MP3-Datei laden und abspielen MP3Play = New MP3Player("d:\MyMP3.mp3") If MP3Play.CanPlay Then MP3Play.Play() End If Private Sub MP3Play_Finished(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MP3Play.Finished If MsgBox("MP3 noch einmal abspielen?", _ MsgBoxStyle.Question Or MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then MP3Play.Play() End If End Sub Dieser Tipp wurde bereits 11.062 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |