VB-Power.net

Late-Binding Wrapper für den Windows Media Player


Klassenmodule
Erstellt am 25 Jan 2009
VB.Net Code-Snippets, Klassen und mehr... >> Klassenmodule

Das nachfolgende Klassenmodul für VB.Net kapselt den Windows Media Player via Late Binding. Dadurch entsteht keine Abhängigkeit zu einer speziellen Version des WMPs. Auch wird nicht mit Interop-Dlls gedealt :-)

Die Klasse kann dafür genutzt werden, um Musik Dateien (MP3 Files) oder Live Streams wie bspw. Web-Radio Sreams abzuspielen.

''' <summary>
''' Aufzählung der Player Rückgabewerte
''' </summary>
Public Enum PlayState
   Undefined = 0
   Stopped = 1
   Paused = 2
   Playing = 3
   ScanForward = 4
   ScanReverse = 5
   Buffering = 6
   Waiting = 7
   MediaEmbed = 8
   Busy = 9
   Ready = 10
   Reconnecting = 11
   Last = 12
End Enum


''' <summary>
''' WMPNetWrapper Klassenmodul
''' ==========================
''' Das Klassenmodul erzeugt eine Instanz des Windows Media Players.
''' Die Instanz wird über "Late Binding" erzeugt, so dass keine Abhängigkeit
''' zu einer speziellen Version des WMPs besteht. Das Klassenmodul kann
''' dazu genutzt werden, um Musik Dateien oder Streams aus dem Internet
''' abzuspielen - z.B. Web-Radio Streams.
''' </summary>
Public Class WMPNetWrapper
   Private m_Player As Object
   Private isInitialized As Boolean = False
   Private m_PlayerStatus As Integer = PlayState.Undefined
   Private m_Timer As New Timer With {.Interval = 250, .Enabled = False}

   Public Event ErrorOccured(ByVal sender As WMPNetWrapper, ByVal e As Exception)
   Public Event CurrentStatus(ByVal sender As WMPNetWrapper, ByVal Msg As String)
   Public Event StatusChange(ByVal sender As WMPNetWrapper, ByVal e As PlayState)

   Public Sub New()
      Me.InitializeComponent()
   End Sub

   ''' <summary>
   ''' Initialisiert die Klasse und erstellt ein "Late Binding"
   ''' Objekt zur Laufzeit.
   ''' </summary>
   Private Sub InitializeComponent()
      Dim t As Type = Type.GetTypeFromProgID("WMPlayer.OCX")
      If t IsNot Nothing Then
         Try
            m_Player = CreateObject("WMPlayer.OCX")
            m_Player.settings.autoStart = True
            m_Timer.Enabled = True
            AddHandler m_Timer.Tick, AddressOf TimerTick
            isInitialized = True
         Catch ex As Exception
            isInitialized = False
            Throw New Exception(ex.Message)
         End Try
      End If
   End Sub

   ''' <summary>
   ''' Legt fest, ob beim Aufruf der Open Methode der Stream sofort abgespielt
   ''' werden soll. Bei False muss dann nach dem Open Aufruf noch die Play
   ''' Methode ausgeführt werden.
   ''' </summary>
   Public Property AutoStart() As Boolean
      Get
         Return m_Player.settings.autostart
      End Get
      Set(ByVal value As Boolean)
         Try
            m_Player.settings.autostart = value
         Catch ex As Exception
            m_PlayerStatus = PlayState.Undefined
            RaiseEvent ErrorOccured(Me, ex)
         End Try
      End Set
   End Property

   ''' <summary>
   ''' Regelt die Lautsprecher Balance, oder liest diese aus.
   ''' </summary>
   ''' <value>Ein gültiger Wert zwischen 0 - 100</value>
   Public Property Balance() As Integer
      Get
         Return m_Player.settings.balance
      End Get
      Set(ByVal value As Integer)
         Try
            m_Player.settings.balance = value
         Catch ex As Exception
            m_PlayerStatus = PlayState.Undefined
            RaiseEvent ErrorOccured(Me, ex)
         End Try
      End Set
   End Property

   ''' <summary>
   ''' Gibt die Spieldauer des aktuellen Streams zurück.
   ''' </summary>
   Public ReadOnly Property Duration() As Double
      Get
         Return m_Player.currentMedia.duration
      End Get
   End Property

   ''' <summary>
   ''' Schaltet die Lautsprecher ein oder aus.
   ''' </summary>
   ''' <remarks>Die aktuelle Wiedergabe wird dabei nicht unterbrochen.</remarks>
   Public Property Mute() As Boolean
      Get
         Return m_Player.settings.mute
      End Get
      Set(ByVal value As Boolean)
         Try
            m_Player.settings.mute = value
         Catch ex As Exception
            m_PlayerStatus = PlayState.Undefined
            RaiseEvent ErrorOccured(Me, ex)
         End Try
      End Set
   End Property

   ''' <summary>
   ''' Öffnet einen Mediastream zur Wiedergabe.
   ''' </summary>
   ''' <param name="MediaStream">Einen gültigen Pfad oder URL zum Mediastream.</param>
   ''' <remarks>Der Media Player unterstützt ebenfalls Web-Radio Streams.
   ''' Hierbei können nur direkte URLs angegeben werden. SHOUTcast und ICEcast
   ''' Playlists werden nicht unterstützt. Diese müssen separat geparst werden,
   ''' um die Kanäle zu Ermitteln. Die ermittelten Kanäle können dann zur Wiedergabe
   ''' geöffnet werden.</remarks>
   Public Sub Open(ByVal MediaStream As String)
      If Not isInitialized Then Exit Sub
      Try
         Me.Stop()
         m_Player.url = MediaStream
      Catch ex As Exception
         m_PlayerStatus = PlayState.Undefined
         RaiseEvent ErrorOccured(Me, ex)
      End Try
   End Sub

   ''' <summary>
   ''' Unterbricht die aktuelle Wiedergabe.
   ''' </summary>
   Public Sub Pause()
      Try
         If m_PlayerStatus <> PlayState.Paused Then
            m_Player.controls.pause()
         End If
      Catch ex As Exception
         m_PlayerStatus = PlayState.Undefined
         RaiseEvent ErrorOccured(Me, ex)
      End Try
   End Sub

   ''' <summary>
   ''' Spielt den aktuell geöffneten Stream ab.
   ''' </summary>
   Public Sub Play()
      Try
         If m_PlayerStatus <> PlayState.Playing Then
            m_Player.controls.play()
         End If
      Catch ex As Exception
         m_PlayerStatus = PlayState.Undefined
         RaiseEvent ErrorOccured(Me, ex)
      End Try
   End Sub

   ''' <summary>
   ''' Gibt den Player-Status als PlayState Enum zurück.
   ''' </summary>
   Public ReadOnly Property PlayerStatus() As PlayState
      Get
         Return m_PlayerStatus
      End Get
   End Property

   ''' <summary>
   ''' Positioniert den aktuellen Wiedergabepointer, oder liest diesen aus.
   ''' </summary>
   ''' <value>Ein gültiger Wert zwischen 0 - Duration (Spieldauer)</value>
   ''' <remarks>Siehe auch die Eigenschaft "Duration"</remarks>
   Public Property Position() As Double
      Get
         Return m_Player.controls.currentPosition
      End Get
      Set(ByVal value As Double)
         Try
            m_Player.controls.currentPosition = value
         Catch ex As Exception
            m_PlayerStatus = PlayState.Undefined
            RaiseEvent ErrorOccured(Me, ex)
         End Try
      End Set
   End Property

   ''' <summary>
   ''' Gibt den Player-Status als Text zurück.
   ''' </summary>
   Public ReadOnly Property Status() As String
      Get
         Return m_Player.status
      End Get
   End Property

   ''' <summary>
   ''' Stoppt die Wiedergabe des aktuellen Streams.
   ''' </summary>
   Public Sub [Stop]()
      Try
         If m_PlayerStatus <> PlayState.Stopped Then
            m_Player.controls.stop()
         End If
      Catch ex As Exception
         m_PlayerStatus = PlayState.Undefined
         RaiseEvent ErrorOccured(Me, ex)
      End Try
   End Sub

   ''' <summary>
   ''' Fährt mit der unterbrochenen Wiedergabe fort.
   ''' </summary>
   Public Sub [Resume]()
      Try
         If m_PlayerStatus = PlayState.Paused Then
            Me.Play()
         End If
      Catch ex As Exception
         m_PlayerStatus = PlayState.Undefined
         RaiseEvent ErrorOccured(Me, ex)
      End Try
   End Sub

   ''' <summary>
   ''' Setzt den Lautstärkepegel, oder liest diesen aus.
   ''' </summary>
   ''' <value>Ein gültiger Wert zwischen 0 - 100</value>
   Public Property Volume() As Integer
      Get
         Return m_Player.settings.volume
      End Get
      Set(ByVal value As Integer)
         Try
            m_Player.settings.volume = value
         Catch ex As Exception
            m_PlayerStatus = PlayState.Undefined
            RaiseEvent ErrorOccured(Me, ex)
         End Try
      End Set
   End Property

   ''' <summary>
   ''' Delegate TimerTick
   ''' </summary>
   ''' <remarks>Der Timer feuert den Status als Event in die aufrufende Form zurück
   ''' </remarks>
   Private Sub TimerTick(ByVal sender As Object, ByVal e As System.EventArgs)
      Static LastState As PlayState = -1
      Static CurrentState As PlayState = -1

      CurrentState = m_Player.playstate
      If LastState <> CurrentState Then
         m_PlayerStatus = CurrentState
         LastState = CurrentState
         RaiseEvent StatusChange(Me, m_PlayerStatus)
      End If

      RaiseEvent CurrentStatus(Me, Me.Status)
   End Sub
End Class

Letzte Änderung: 01 Feb 2009 at 09:20

Zurück
TOP Download !!!

DataGridView Control Extender

Erweitern Sie Ihr DataGridView mit 16 zusätzlichen Spaltentypen.


Weiterlesen...


TOP 5 Downloads
Explorer TreeView mit VB.Net - Beispielprojekt1044
DataGridView Control Extender incl. VB2008 Demoprojekt919
MCIFramework.dll728
DataGridView Control Extender incl. VB2005 Demoprojekt553
Settings für das DataGridView - Beispielprojekt346
Powered by:

Powered By VB-Power.net