Utiliser Windows Media Player en VB et VBA

SilkyRoad

Ce document présente l'utilisation de Windows Media Player en VB et VBA.
La bibliothèque WMP permet de lire des fichiers audio et vidéo, de gérer des PlayList, mais aussi de récupérer des informations sur les lecteurs multimédias de votre poste.

- Titre : Utiliser Windows Media Player en VB et VBA

- Auteur : SilkyRoad

- Parution : 9 janvier 2007

- Licence : Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- I. Introduction

- II. Gérer une séquence

- II-A. Définir et lire un fichier

- II-B. Arrêter la lecture

- II-C. Afficher la durée de la séquence en cours

- II-D. Effectuer une pause

- II-E. Vérifier si une action peut etre appliquée

- II-F. Afficher le statut de Windows Media Player

- II-G. Désactiver et Réactiver le son

- II-H. Modifier le volume sonore

- II-I. Effectuer une avance rapide

- II-J. Lire la même séquence en boucle

- II-K. Afficher Windows Media Player en mode plein écran

- II-L. Afficher des informations sur la séquence en cours

- II-M. Modifier les informations d'une séquence

- III. Gérer une PlayList

- III-A. Créer une PlayList

- III-B. Passer à la séquence suivante ou précédente

- III-C. Supprimer une séquence dans la PlayList

- III-D. Lire une séquence spécifique de la PlayList

- III-E. Lister le nom des séquences contenues dans la PlayList

- III-F. Ajouter une séquence dans la PlayList

- III-G. Retrouver l'index de la séquence active

- III-H. Compter le nombre de séquences dans la PlayList

- IV. Gérer les CD Audio

- V. Utiliser la librairie sans objet support

- VI. Divers

- VI-A. Lister les lecteurs de CD et de DVD installés

- VI-B. Ouvrir le lecteur de CD / DVD

- VI-C. Lancer le lecteur Windows Media Player pour lire un fichier

- VII. Téléchargement

I - Introduction

Tous les exemples présentés dans ce document ont été testés à partir de Windows Media Player 10.0

Les méthodes et propriétés sont identiques pour gérer les fichiers audio ou video.

Les termes employés dans ce document:

Une séquence: est un fichier audio ou une video spécifique
Une PlayList: est un ensemble de séquences.

Pour plus d'informations, consultez la documentation MSDN

II - Gérer une séquence

Vous devez préalablement créer une forme dans votre projet et y ajouter un objet Windows Media Player, nommé WindowsMediaPlayer1

II-A - Définir et lire un fichier

Vb

'Définit et lit un fichier
WindowsMediaPlayer1.URL = "C:\leFichier.mp3"

Cette première procédure charge le fichier et joue automatiquement la séquence.

La propriété autoStart a une valeur True par défaut.
Si vous souhaitez uniquement charger le fichier sans démarrer la lecture, utilisez:

Vb

'Désactive la lecture automatique
WindowsMediaPlayer1.settings.autoStart = False

'Définit le fichier
WindowsMediaPlayer1.URL = "C:\leFichier.mp3"

Ensuite, pour lire le fichier, utilisez:

Vb

WindowsMediaPlayer1.Controls.Play

Il est possible de spécifier une position précise dans la séquence pour débuter la lecture.

Vb

Private Sub CommandButton1_Click()
'Chargement fichier & lecture
WindowsMediaPlayer1.URL = "C:\maMusique.mp3"

'Positionnement à la 3eme minute
WindowsMediaPlayer1.Controls.currentPosition = 180 'secondes
End Sub

II-B - Arrêter la lecture

Vb

WindowsMediaPlayer1.Controls.Stop

II-C - Afficher la durée de la séquence en cours

Vb

Private Sub CommandButton1_Click()
'Lance la lecture du fichier
WindowsMediaPlayer1.URL = "C:\leFichier.mp3"

'La récupération d'informations sur une séquence peut se faire uniquement
'lorsque le statut de chargement "Transitioning" est atteint
'9 = statut "Préparation nouvelle séquence" (constante wmppsTransitioning)
While WindowsMediaPlayer1.playState = 9: DoEvents: Wend

'Affiche la durée de la séquence au format hh:mm:ss
MsgBox WindowsMediaPlayer1.currentMedia.durationString
End Sub

Remarque:
La propriété Duration renvoie la durée en secondes

Vb

'Affiche la durée de la séquence en secondes
MsgBox WindowsMediaPlayer1.currentMedia.duration

Pour afficher la position de la lecture en cours au format hh:mm:ss, utilisez:

Vb

MsgBox WindowsMediaPlayer1.Controls.currentPositionString

II-D - Effectuer une pause

Vb

WindowsMediaPlayer1.Controls.Pause

Et pour relancer la séquence:

Vb

WindowsMediaPlayer1.Controls.Play

II-E - Vérifier si une action peut etre appliquée

La propriété isAvailable permet de contôler si une action peut être effectuée, par exemple vérifier si la séquence peut être mise en Pause.

Vb

'vérifie si l'action "pause" peut etre appliquée (Renvoie Vrai ou Faux)
MsgBox WindowsMediaPlayer1.Controls.isAvailable("Pause")

D'autres actions contrôlables:

- Stop

- Play

- Pause

- FastForward

- FastReverse

- Next

- Previous

- CurrentItem

- CurrentPosition

II-F - Afficher le statut de Windows Media Player

Première solution:

Vb

MsgBox WindowsMediaPlayer1.Status

Une deuxième solution:

Vb

Select Case WindowsMediaPlayer1.playState
Case 0: MsgBox "Undefined"
Case 1: MsgBox "Stopped"
Case 2: MsgBox "Paused"
Case 3: MsgBox "Playing"
Case 4: MsgBox "ScanForward" 'Avance rapide
Case 5: MsgBox "ScanReverse" 'Retour rapide
Case 6: MsgBox "Buffering"
Case 7: MsgBox "Waiting"
Case 8: MsgBox "MediaEnded"
Case 9: MsgBox "Transitioning" 'Préparation nouvelle séquence
Case 10: MsgBox "Ready"
Case 11: MsgBox "Reconnecting"
End Select

II-G - Désactiver et Réactiver le son

Vb

'Désactive le son
WindowsMediaPlayer1.settings.mute = True

Vb

'Active le son
WindowsMediaPlayer1.settings.mute = False

II-H - Modifier le volume sonore

Attribuez une valeur entre 0 et 100 (%) pour modifier la position du curseur de réglage sonore.

Vb

'Modifie le volume sonore
WindowsMediaPlayer1.settings.volume = 50

II-I - Effectuer une avance rapide

Vb

'Effectue une avance rapide
If WindowsMediaPlayer1.Controls.isAvailable("FastForward") Then _
WindowsMediaPlayer1.Controls.fastForward

Pour revenir en lecture normale

Vb

'pour revenir à la lecture normale
WindowsMediaPlayer1.Controls.Play

II-J - Lire la même séquence en boucle

Vb

WindowsMediaPlayer1.Controls.Play
WindowsMediaPlayer1.settings.setMode "loop", True

Pour vérifier le statut, utilisez:

Vb

MsgBox WindowsMediaPlayer1.settings.getMode("loop")

II-K - Afficher Windows Media Player en mode plein écran

Windows Media player doit avoir le statut "Lecture en cours" pour utiliser cette option.
Vous pouvez identifier le statut du lecteur en utilisant l'évenement PlayStateChange.

Vb

Private Sub WindowsMediaPlayer1_PlayStateChange(ByVal NewState As Long)
If NewState = 3 Then _
WindowsMediaPlayer1.fullScreen = True
End Sub

II-L - Afficher des informations sur la séquence en cours

Remarque:
La récupération d'informations sur une séquence peut se faire uniquement lorsque le statut de chargement "Transitioning" est atteint.

Vb

MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("Name")
'MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("author")
'MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("Title")
'MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("Album")
'MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("copyright")
'MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("Artist")
'MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("Genre")
'MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("Bitrate") / 1000 & " kbps"
'MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("Abstract")
'MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("bitRate")
'MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("duration")

Une autre solution qui liste toutes les informations:

Vb

Private Sub CommandButton1_Click()
Dim Resultat As String
Dim i As Integer
Dim Cm As WMPLib.IWMPMedia
Set Cm = WindowsMediaPlayer1.currentMedia

'boucle sur les attributs
For i = 0 To Cm.attributeCount - 1
If Cm.getItemInfo(Cm.getAttributeName(i)) <> "" Then _
Resultat = Resultat & Cm.getAttributeName(i) & " : " & _
Cm.getItemInfo(Cm.getAttributeName(i)) & vbLf
Next

MsgBox Resultat
End Sub

II-M - Modifier les informations d'une séquence

Par exemple pour modifier le titre de la séquence en cours, utilisez:

Vb

'Modifie le titre de la séquence en cours
WindowsMediaPlayer1.currentMedia.setItemInfo "title", "Nouveau_Titre"

'Vérifie le contenu du titre
MsgBox WindowsMediaPlayer1.currentMedia.getItemInfo("title")

III - Gérer une PlayList

Vous devez préalablement créer une forme dans votre projet et y ajouter un objet Windows Media Player nommé WindowsMediaPlayer1

III-A - Créer une PlayList

Cet exemple crée une PlayList composée de 3 séquences:

Vb

Dim Xwmp As IWMPMedia

'nettoye la Playlist en cours avant de réalimenter la liste
WindowsMediaPlayer1.currentPlaylist.Clear

Set Xwmp = WindowsMediaPlayer1.newMedia("C:\essai.mid")
WindowsMediaPlayer1.currentPlaylist.insertItem 0, Xwmp

Set Xwmp = WindowsMediaPlayer1.newMedia("C:\maMusique.mp3")
WindowsMediaPlayer1.currentPlaylist.insertItem 1, Xwmp

Set Xwmp = WindowsMediaPlayer1.newMedia("C:\Jumbalaya.mid")
WindowsMediaPlayer1.currentPlaylist.insertItem 2, Xwmp

'Lecture
WindowsMediaPlayer1.Controls.Play

III-B - Passer à la séquence suivante ou précédente

Vb

'Permet d'accéder à la séquence suivante
WindowsMediaPlayer1.Controls.Next

Remarque:
Le premier item de la PlayList sera réactivé si vous êtes arrivé en fin de liste.

Vb

'Permet d'accéder à la séquence précédente
WindowsMediaPlayer1.Controls.Previous

Remarque:
le dernier item de laPlayList sera activé si vous êtes en début de liste.

III-C - Supprimer une séquence dans la PlayList

Exemple pour supprimer la deuxieme séquence. (L'index du premier élément = 0)

Vb

Dim It As Object
Set It = WindowsMediaPlayer1.currentPlaylist.Item(1)
WindowsMediaPlayer1.currentPlaylist.RemoveItem It

III-D - Lire une séquence spécifique de la PlayList

Exemple pour lire la 3eme séquence:

Vb

Dim It As Object
Set It = WindowsMediaPlayer1.currentPlaylist.Item(2)
WindowsMediaPlayer1.Controls.playItem It

III-E - Lister le nom des séquences contenues dans la PlayList

Vb

Sub Lister_NomDesSequences_DansLaPlayList()
Dim Pl As IWMPPlaylist
Dim j As Integer, i As Integer

'Définit la playlist active
Set Pl = WindowsMediaPlayer1.currentPlaylist

'compte le nombre de séquences dans la playList
j = Pl.Count
If Not j > 0 Then MsgBox "il n'y a pas d'éléments dans la playlist"

'Boucle sur les séquences
For i = 0 To j - 1
MsgBox Pl.Item(i).Name
'
'pour afficher la source :
'MsgBox Pl.Item(i).sourceURL
'
Next i
End Sub

III-F - Ajouter une séquence dans la PlayList

La séquence est automatiquement placée à la suite des items existants.

Vb

Dim Ad As IWMPMedia
Set Ad = WindowsMediaPlayer1.newMedia("C:\couldntStandTheWeather.mp3")
WindowsMediaPlayer1.currentPlaylist.appendItem Ad

III-G - Retrouver l'index de la séquence active

Vb

Dim Pl As IWMPPlaylist
Dim j As Integer, i As Integer
Dim Cible As String

Cible = WindowsMediaPlayer1.Controls.currentItem.Name

Set Pl = WindowsMediaPlayer1.currentPlaylist
j = Pl.Count
If Not j > 0 Then MsgBox "il n'y a pas d'éléments dans la playlist"

For i = 0 To j - 1
If Cible = Pl.Item(i).Name Then
MsgBox "L'index de la séquence " & Cible & " est : " & i
Exit For
End If
Next i

III-H - Compter le nombre de séquences dans la PlayList

Vb

WindowsMediaPlayer1.currentPlaylist.Count

IV - Gérer les CD Audio

Vous devez préalablement créer une forme dans votre projet et y ajouter un objet Windows Media Player nommé WindowsMediaPlayer1

L'exemple suivant montre comment définir le contenu d'un CD audio (Tracks) en tant que PlayList.

Vb

Private Sub CommandButton1_Click()
Dim Lecteur As wmplib.IWMPCdrom
Dim It As wmplib.IWMPMedia

'Définit le lecteur contenant le CD
'Item(0) Correspond au 1er lecteur du PC
Set Lecteur = WindowsMediaPlayer1.cdromCollection.Item(0)

'Définit le contenu du lecteur en tant que PlayList
WindowsMediaPlayer1.currentPlaylist = Lecteur.Playlist

'----
'à partir de ce point, la lecture est lancée automatiquement.
'----
'Les lignes suivantes montrent simplement comment atteindre
'une séquence spécifique.
'----

'Permet de vérifier si WMP est prêt
If WindowsMediaPlayer1.playState = 0 Then
MsgBox "Opération annulée."
Exit Sub
End If

'Active la 3eme séquence du CD pour la lecture
Set It = WindowsMediaPlayer1.currentPlaylist.Item(2)
WindowsMediaPlayer1.Controls.playItem It
End Sub

Les méthodes et propriétés sont identiques aux exemples présentés dans les chapitres précédents.

V - Utiliser la librairie sans objet support

Pour les fichiers musicaux, il est possible de lancer une séquence ou de gérer une playlist sans ajouter d'objet dans votre projet, en utilisant directement la bibliothèque WindowsMediaPlayer (wmp.dll).

Pour activer la référence en VBA:
Dans l'éditeur de macros,
Menu Outils
References
Cochez la ligne "Windows Media Player"
Cliquez sur OK pour valider

Pour activer la référence en VB:
Menu Projet
Références
Cochez la ligne "Windows Media Player" (wmp.dll)
Cliquez sur OK pour valider

Vb

Option Explicit
Dim Wmp As WindowsMediaPlayer

Sub jouerWindowsMediaPlayer()
Set Wmp = CreateObject("WMPlayer.OCX.7")
Wmp.URL = "C:\leFichier.mp3"
Wmp.Controls.Play
End Sub

et pour arrêter la séquence

Vb

Sub arreterWondowsMediaPlayer()
If Wmp Is Nothing Then Exit Sub
Wmp.Controls.stop
End Sub

Les méthodes et propriétés sont identiques aux exemples présentés dans les chapitres précédents.

VI - Divers

VI-A - Lister les lecteurs de CD et de DVD installés

La référence WindowsMediaPlayer (wmp.dll) doit être préalablement activée.

Vb

Sub listeLecteurs_CD_DVD()
Dim Wmp As WindowsMediaPlayer
Dim nombreLecteurs As Integer, i As Integer
Dim PCd As IWMPCdrom

Set Wmp = CreateObject("WMPlayer.OCX.7")

nombreLecteurs = Wmp.cdromCollection.Count
If Not nombreLecteurs > 0 Then _
MsgBox "il n'y a pas de lecteur de CD ou DVD installés ."

For i = 0 To nombreLecteurs - 1
Set PCd = Wmp.cdromCollection.Item(i)
MsgBox PCd.driveSpecifier
Next i
End Sub

VI-B - Ouvrir le lecteur de CD / DVD

Vb

Sub ouvrirLecteur()
Dim Wmp As Object, Lecteur As Object

Set Wmp = CreateObject("WMPlayer.OCX.7")

'L'index 0 est correspond au 1er lecteur du poste
Set Lecteur = Wmp.cdromCollection.Item(0)
Lecteur.eject
End Sub

VI-C - Lancer le lecteur Windows Media Player pour lire un fichier

Vb

Sub lancerUneVideo()
'Necessite d'activer la référence Windows Media Player
Dim Wmp As WindowsMediaPlayer

Set Wmp = CreateObject("WMPlayer.OCX.7")
Wmp.openPlayer "C:\monFilm.mpg"
End Sub

VII - Téléchargement