vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2018
 
zurück
Rubrik: Multimedia & Sound · Audio   |   VB-Versionen: VB2005, VB200814.04.10
MP3 im Loop abspielen

Eine kleine MP3Player-Klasse, mit der sich MP3-Dateien sehr einfach im Loop abspielen lässt.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  8.889 
www.tools4vb.deSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

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 8.889 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2018 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel