vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB2005, VB200801.07.08
Windows Media Player Wrapper

VB.Net Klasse zum Abspielen von Musikdateien (MP3) und Web-Radio Streams.

Autor:  Roland WutzkeBewertung:     [ Jetzt bewerten ]Views:  2.221 
http://www.vb-power.netSystem:  WinNT, Win2k, WinXP, Win8, Win10, Win11 Beispielprojekt 

Die nachfolgende Klasse kapselt den Windows Media Player und stellt die Grundfunktionalität zum Abspielen von Musikdateien und Web-Radio Streams zur Verfügung. Sie benötigen einen Verweis auf die Windows Media Player Dll im System32 Verzeichnis (C:\Windows\system32\WMP.dll).

Weitere Informationen entnehmen Sie bitte der Dokumentation aus dem Quellcode.

Nachfolgend die Klasse "WMPWrapper"

Imports WMPLib
Namespace WMP
  ''' <summary>
  ''' Aufzählung der Player Rückgabewerte
  ''' </summary>
  Public Enum PlayState
    Undefined = 0
    Stopped = 1
    Paused = 2
    Playing = 3
    Waiting = 7
    Busy = 9
    Ready = 10
  End Enum
 
  ''' <summary>
  ''' Struktur der ID3-Tags
  ''' </summary>
  Public Structure ID3Tags
    Public Interpret As String
    Public Album As String
    Public Titel As String
    Public Genre As String
    Public Spieldauer As Double
    Public SpieldauerString As String
    Public Year As String
  End Structure
  ''' <summary>
  ''' Die Klasse kapselt den Windows Media Player und stellt die 
  ''' Grundfunktionalität zum Abspielen von Musikdateien und 
  ''' Web-Radio Streams zur Verfügung.
  ''' </summary>
  ''' <remarks>Diese Klasse benötigt einen Verweis auf die 
  ''' Windows Media Player Dll im System32 Verzeichnis. 
  ''' (C:\Windows\system32\WMP.dll)
  ''' Der Compiler erzeugt dabei eine Interop.WMPLib.dll für das 
  ''' Projekt. Wenn Sie Ihre Anwendung weitergeben, müssen Sie die 
  ''' Interop.WMPLib.dll ebenfalls mit weitergeben. Geben Sie nicht 
  ''' die WMP.dll weiter!!! Diese ist Bestandteil des Windows Media 
  ''' Players. Der Media Player muss dabei auf dem Zielsystem
  ''' installiert sein.
  ''' 
  ''' Weitere Informationen zur Programmierung des Media Payers 
  ''' entnehmen Sie bitte dem Windows Media Player 10 SDK. Das SDK 
  ''' können Sie von der Microsoft Downloadseite kostenlos herunterladen.
  ''' 
  ''' Juni 2008 - VB-Power.net
  ''' http://www.vb-power.net/
  ''' </remarks>
  Public Class WMPWrapper
 
    ' Member Variablen der Klasse
    Private WithEvents m_Player As WindowsMediaPlayer
    Private m_PlayerStatus As WMP.PlayState = PlayState.Ready
    Private m_ID3CurrentData As New ID3Tags
 
    ' Öffentliche Events der Klasse
    Public Event PlayStateChange(ByVal sender As WMP.WMPWrapper, _
      ByVal NewStatus As WMP.PlayState)
    Public Event StatusChange(ByVal sender As WMP.WMPWrapper, ByVal Msg As String)
    Public Event ErrorOccured(ByVal sender As WMP.WMPWrapper, ByVal e As Exception)
    ''' <summary>
    ''' Initialisiert die Wrapper-Klasse
    ''' </summary>
    Public Sub New()
      Try
        m_Player = New WindowsMediaPlayer
        m_Player.settings.autoStart = False
      Catch ex As Exception
        m_PlayerStatus = PlayState.Undefined
        RaiseEvent ErrorOccured(Me, ex)
      End Try
    End Sub
#Region "Properties"
 
    ''' <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>
    ''' Gibt die ID3-Tag Struktur des aktuellen Streams zurück.
    ''' </summary>
    Public ReadOnly Property ID3() As WMP.ID3Tags
      Get
        Return m_ID3CurrentData
      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>
    ''' 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>
    ''' 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>
    ''' 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
#End Region
#Region "Methoden"
 
    ''' <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)
      Try
        Me.Stop()
        m_Player.URL = MediaStream
 
        Dim iMedia As IWMPMedia = m_Player.newMedia(MediaStream)
        With m_ID3CurrentData
          .Album = iMedia.getItemInfo("Album").Trim
          .Genre = iMedia.getItemInfo("Genre").Trim
          .Interpret = iMedia.getItemInfo("Author").Trim
          .Spieldauer = iMedia.duration
          .SpieldauerString = iMedia.durationString.Trim
          .Titel = iMedia.getItemInfo("Title").Trim
          .Year = iMedia.getItemInfo("WM/Year").Trim
        End With
      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>
    ''' 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>
    ''' 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>
    ''' 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
#End Region
#Region "Events"
 
    ''' <summary>
    ''' Wertet den PlayStateChange Event des Players aus.
    ''' </summary>
    Private Sub m_Player_PlayStateChange( _
      ByVal NewState As Integer) Handles m_Player.PlayStateChange
 
      Dim isChanged As Boolean = True
 
      Select Case NewState
        Case WMPLib.WMPPlayState.wmppsReady
          m_PlayerStatus = PlayState.Ready
        Case WMPLib.WMPPlayState.wmppsStopped
          m_PlayerStatus = PlayState.Stopped
        Case WMPLib.WMPPlayState.wmppsPlaying
          m_PlayerStatus = PlayState.Playing
        Case WMPLib.WMPPlayState.wmppsPaused
          m_PlayerStatus = PlayState.Paused
        Case WMPLib.WMPPlayState.wmppsWaiting
          m_PlayerStatus = PlayState.Waiting
        Case WMPLib.WMPPlayState.wmppsTransitioning
          m_PlayerStatus = PlayState.Busy
        Case WMPLib.WMPPlayState.wmppsUndefined
          m_PlayerStatus = PlayState.Undefined
        Case Else
          isChanged = False
      End Select
 
      If isChanged Then
        RaiseEvent PlayStateChange(Me, m_PlayerStatus)
      End If
    End Sub
    ''' <summary>
    ''' Leitet den StatusChange Event des Players an die 
    ''' aufrufende Form weiter.
    ''' </summary>
    Private Sub m_Player_StatusChange() Handles m_Player.StatusChange
      RaiseEvent StatusChange(Me, m_Player.status)
    End Sub
#End Region
  End Class
End Namespace

Anwendungsbeispiel:
Das folgende Beispiel demonstriert den Einsatz der Klasse. Es wird der SWR3 Web-Radiostream zum Abspielen gebracht. Für das Beispiel benötigen Sie auf der Form1 einen Button (Button1), eine TrackBar (TrackBar1) und ein Label (Label1). Fügen Sie den nachfolgenden Code in das Codefenster der Form1 ein:

Public Class Form1
 
  ' Instanz der WMPWrapper Klasse
  Private WithEvents myPlayer As New WMP.WMPWrapper
 
  Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
 
    ' Controls initialisieren
    Me.Button1.Text = "Play"
 
    Me.TrackBar1.Minimum = 0
    Me.TrackBar1.Maximum = 100
    Me.TrackBar1.TickFrequency = 10
    Me.TrackBar1.Value = myPlayer.Volume
  End Sub
 
  Private Sub Form1_FormClosing(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
 
    myPlayer.Stop()
  End Sub
 
  Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
 
    ' SWR3 Web-Radio Stream öffnen und abspielen
    myPlayer.Open("http://213.200.97.110/swr3live/livestream.mp3")
    myPlayer.Play()
  End Sub
 
  Private Sub TrackBar1_Scroll(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles TrackBar1.Scroll
 
    ' Lautstärke regeln
    myPlayer.Volume = Me.TrackBar1.Value
  End Sub
 
  Private Sub myPlayer_StatusChange(ByVal sender As WMP.WMPWrapper, _
    ByVal Msg As String) Handles myPlayer.StatusChange
 
    ' Player Status ausgeben
    Me.Label1.Text = Msg
  End Sub
End Class

Viel Spaß beim Radio hören...