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