Piloter Windows Media Player depuis Excel

MichelXld

XLDnaute Barbatruc
bonjour

vous trouverez ci joint quelques exemples pour piloter Windows Media Player depuis Excel

la source utilisée :
Ce lien n'existe plus
(il s'agit de codes JScript que j'ai essayé d'adapter )

Testé avec Excel2002 et Windows Média Player 10.0
necessite d'activer la reference Windows Media Player

le document comporte 4 parties :
Piloter une séquence musicale spécifique
Piloter une playList ( gestion de plusieurs séquences musicales dans une session)
Visualiser une séquence vidéo ( un seul exemple tres simple )
L'objet Windows Media Player inséré dans une feuille ou dans un UserForm


remarque :
si vous faites une fausse manip et qu'une macro plante , il est possible que vous ne puissiez pas arrêter la séquence musicale avant la fin .
dans ce cas , sauvegardez vos données et fermer Excel : tout devrait rentrer dans l'ordre




@@@@@ Gérer une séquence musicale @@@@@


Démarrer et arreter une séquence musicale

Option Explicit
Dim Wmp As WindowsMediaPlayer
'necessite d'activer la reference Windows Media Player
'michelxld le 06.08.2005
'pour le forum https://www.excel-downloads.com/

Sub jouerMediaPlayer()
Set Wmp = CreateObject('WMPlayer.OCX.7')
Wmp.URL = 'C:\\monFichier.mp3'
Wmp.Controls.Play
End Sub



Les procédures qui suivent supposent que la macro 'jouerMediaPlayer' a préalablement été lancée et se trouve active


Fermer la session Windows Media Player en cours

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



Afficher la durée de la séquence musicale en cours

Sub dureeSequence()
Dim ValMin As Double, ValSec As Double, S As Double
S = Wmp.currentMedia.Duration
ValMin = Application.WorksheetFunction.RoundDown((S / 60), 0)
ValSec = Application.WorksheetFunction.RoundDown(S, 0) - (ValMin * 60)
MsgBox Format(ValMin, '00') & ':' & Format(ValSec, '00')
End Sub



Effectuer une pause de 5 secondes dans la séquence musicale

Sub pauseMediaPlayer()
Dim t As Date

If Wmp Is Nothing Then Exit Sub
Wmp.Controls.Pause
'
'temporisation de 5 secondes
t = Timer + 5: Do Until Timer > t: DoEvents: Loop
'pour relancer
Wmp.Controls.Play
End Sub



vérifier si l'action 'Pause' peut etre appliquée
( renvoie Vrai ou faux )

Sub verfieStatut_Pause()
'vérifie si l'action 'pause' peut etre appliquée ( renvoie Vrai ou Faux )
MsgBox Wmp.Controls.isAvailable('Pause')
End Sub



Afficher le statut de Windows Media Player

Sub afficheStatutWMP()
If Wmp Is Nothing Then Exit Sub
MsgBox Wmp.Status
End Sub


Afficher le statut de Windows Media Player ( un autre exemple )

Sub statut_WMP()

Select Case Wmp.playState
Case 0: MsgBox 'Undefined'
Case 1: MsgBox 'Stopped'
Case 2: MsgBox 'Paused'
Case 3: MsgBox 'Playing'
Case 4: MsgBox 'ScanForward' 'fast forwarding
Case 5: MsgBox 'ScanReverse' 'fast rewinding
Case 6: MsgBox 'Buffering'
Case 7: MsgBox 'Waiting'
Case 8: MsgBox 'MediaEnded'
Case 9: MsgBox 'Transitioning' 'Preparing new media item
Case 10: MsgBox 'Ready'
Case 11: MsgBox 'Reconnecting'
End Select

End Sub



Désactiver ou Activer le son

Sub desactiverLeSonWMP()
If Wmp Is Nothing Then Exit Sub
Wmp.settings.mute = True
End Sub

Sub activerLeSonWMP()
If Wmp Is Nothing Then Exit Sub
Wmp.settings.mute = False
End Sub



Afficher la version de Windows Media player installée

Sub afficherVersion_WMP()
If Wmp Is Nothing Then Exit Sub
MsgBox Wmp.versionInfo
End Sub



Effectuer une avance rapide sur la séquence , pendant 3 secondes

Sub accelererVitessseSequence_WMP()
Dim t As Date

If Wmp Is Nothing Then Exit Sub
If Wmp.Controls.isAvailable('FastForward') Then Wmp.Controls.fastForward
'
'temporisation de 3 secondes
t = Timer + 3: Do Until Timer > t: DoEvents: Loop
'pour revenir à la vitesse normale
Wmp.Controls.Play
End Sub



Le nom du fichier en cours de lecture

Sub nomFichierEnCourslecture()
Dim Cm As Object
Set Cm = Wmp.currentMedia
MsgBox Cm.Name
End Sub



Informations sur la séquence en cours

Sub informationSequenceEnCours()
MsgBox Wmp.currentMedia.getItemInfo('author')
MsgBox Wmp.currentMedia.getItemInfo('Title')
MsgBox Wmp.currentMedia.getItemInfo('Album')
MsgBox Wmp.currentMedia.getItemInfo('copyright')
MsgBox Wmp.currentMedia.getItemInfo('Artist')
MsgBox Wmp.currentMedia.getItemInfo('Genre')
MsgBox Wmp.currentMedia.getItemInfo('Bitrate') / 1000 & ' kbps'
MsgBox Wmp.currentMedia.getItemInfo('Abstract')
MsgBox Wmp.currentMedia.getItemInfo('bitRate')
MsgBox Wmp.currentMedia.getItemInfo('duration')
End Sub

une autre solution qui liste toutes les informations :

Sub informationsSequence_WMP()
Dim Resultat As String
Dim i As Integer
Dim Cm As WMPLib.IWMPMedia
Set Cm = Wmp.currentMedia

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



Modifier le volume sonore

(valeurs de 0 à 100 % )

Sub modifierVolumeSon()
Wmp.settings.volume = 50
End Sub





@@@@@ La gestion des PlayList @@@@@


Créer une PlayList de plusieurs séquences et les jouer à la suite

Option Explicit
Dim Wmp As WindowsMediaPlayer
'necessite d'activer la reference Windows Media Player
'michelxld le 06.08.2005
'pour le forum https://www.excel-downloads.com/

Sub ajout_PlusieurSequences_PlayList_Et_Lance_Sequence()
Dim Xwmp As IWMPMedia

Set Wmp = CreateObject('WMPlayer.OCX.7')
Wmp.currentPlaylist.Clear

Set Xwmp = Wmp.newMedia('C:\\essai.mid') 'adapter les noms de fichiers
Wmp.currentPlaylist.insertItem 0, Xwmp

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

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

Wmp.Controls.Play
End Sub


nota:
-------
ne pas oublier de créer un bouton pour arreter la boucle

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




Les procédures qui suivent supposent que la macro 'ajout_PlusieurSequences_PlayList_Et_Lance_Sequence' a préalablement été lancée et se trouve active


Pour passer à la séquence suivante ou précédente

Sub passerSequenceSuivante()
Wmp.Controls.Next
End Sub

Sub passerSequencePrecedente()
Wmp.Controls.Previous
End Sub



Supprimer la deuxieme séquence dans la playlist

remarque : l'index du premier élément = 0

Sub supprimer_SequenceDansPlayList()
Dim It As Object
Set It = Wmp.currentPlaylist.Item(1)
Wmp.currentPlaylist.RemoveItem It
End Sub



Lancer une séquence spécifique de la playlist ( exemple le 3 eme item )

Sub JouerUneSequenceSpecifique()
Dim It As Object
Set It = Wmp.currentPlaylist.Item(2)
Wmp.Controls.playItem It
End Sub



Lister le nom des séquences contenues dans la PlayList

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

Set Pl = Wmp.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
MsgBox Pl.Item(i).Name
'
'pour afficher la source :
'MsgBox Pl.Item(i).sourceURL
'
Next i
End Sub



Ajouter une séquence musicale dans la PlayList

( la séquence est automatiquement placée à la suite des items existants )

Sub ajouterSequence_dans_playList()
Dim Adx As IWMPMedia
Set Adx = Wmp.newMedia('C:\\maMusique.mp3') 'adapter le chemin
Wmp.currentPlaylist.appendItem Adx
End Sub



Insérer 3 séquences dans la PlayList et en jouer une au hasard

( sans lien direct avec les exemples précédents )

Sub lancerSequenceAleatoire()
Dim NombreItem As Integer, Aleat As Integer
Dim Xwmp As IWMPMedia

Set Wmp = CreateObject('WMPlayer.OCX.7')
Wmp.currentPlaylist.Clear

Set Xwmp = Wmp.newMedia('C:\\fragancia.mid')
Wmp.currentPlaylist.insertItem 0, Xwmp

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

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

'------------------------------------------------------
NombreItem = Wmp.currentPlaylist.Count
Randomize
Aleat = Int((NombreItem * Rnd) + 1)
'------------------------------------------------------
Wmp.currentMedia = Wmp.currentPlaylist.Item(Aleat - 1)
Wmp.Controls.Play
End Sub




@@@@@ Lancer une séquence video et Divers @@@@@


Lancer une video

( sans lien avec les exemples précédents )

Sub lancerUneVideo()
Dim Wmp As WindowsMediaPlayer
Set Wmp = CreateObject('WMPlayer.OCX.7')
Wmp.openPlayer 'C:\\monFilm.mpg'
End Sub



Lister les lecteurs de CD et de DVD installés

Sub listeLecteurs_CD_DVD()
Dim Wmp As WindowsMediaPlayer
Dim iNumDrives As Integer, i As Integer
Dim oThisDrive As IWMPCdrom

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

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

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




@@@@@ L'objet Windows Media Player inséré dans une feuille ou dans un UserForm @@@@@

Si vous utilisez Windows Média Player apres avoir inséré l'objet dans la feuille ( ou dans un UserForm) , vous pourrez facilement adapter les procédures vues précédemment


par exemple pour lire ou arreter un séquence musicale :

Sub jouerMediaPlayer()
Feuil1.WindowsMediaPlayer1.URL = 'C:\\maMusique.mp3'
Feuil1.WindowsMediaPlayer1.Controls.Play
End Sub

Sub arreterMediaPlayer()
Feuil1.WindowsMediaPlayer1.Controls.stop
End Sub



Voila , plus rien ne vous empeche de créer votre lecteur multi média personnalisé ...;o)


bonne journée
MichelXld

Message édité par: MichelXld, à: 07/08/2005 06:37
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Michel, le Forum

Pendant qu'il y en a qui vont en boite de nuit, ou encore des concert de rock... Il y en a un qui va essayer de faire marcher un truc depuis un autre truc qui n'a jamais été prévu pour ça !!!

IL est très fou !!! Mais on l'adore !!!

Bonne Nuit à toi Michel !!
[ol]@+Thierry[/ol]
 

JJM

XLDnaute Occasionnel
Bonjour MichelXld, _Thierry, le forum,

Que dire de plus, merci est encore trop faible. :)

Encore une solution complètement développée, qui nous est donnée avant la venue du problème et qui donne envie de l'exploiter. Si ça continue Excel va concurrencer Windows, car s'agit-il encore d'une application ?

Professionnellement, nous avons cessé d'utiliser VBA pour diffuser des applications, car les DLL doivent être enregistrées et il faut des droits d'administrateur pour les installer. En reprenant le code tel quel en VBA (plus quelques modifications mineures), plus aucun problème pour diffuser ces applications, par messagerie.

D'autant plus qu'il y a deux niveaux de programmation sous Excel : le VBA et le MichelXld, de niveau supérieur.
 

jeanpierre

Nous a quitté
Repose en paix
Bonjour MichelXld, _Thierry, JJM, le forum,

Ben, sur ce coup, Billou va exploser.
Mettez vos versions d'Excel à l'abri car il risque de les retirer de la vente... :)
Ou alors elles vaudront de l'or car il va augmenter le prix des licences.
Perso, je pense plutôt à cette dernière solution.... :woohoo:

En tous cas, un Grand Merci à toi Michel.

Bon dimanche à tous

Jean-Pierre
 

Creepy

XLDnaute Accro
Bonsoir,

Justement je m'etais lancé dans un petit player de MP3 sous excel pour être tranquille et ne pas avoir à basculer de l'un à l'autre.

Je cherchais de l'info sur le code et voila que tu tombes à pique Michel !!!

Merci

++

Creepy
 

MichelXld

XLDnaute Barbatruc
bonsoir à tous

merci pour vos messages tres sympa
...voila à quoi j'en suis réduit , faute d'obtenir des places pour aller aux concerts ...;o)


Creepy , si ça t'interesse , j'avais aussi fait un lecteur de CD audio (tracks) , il y a quelques temps

Lien supprimé


bonne soiree
MichelXld
 

Hervé

XLDnaute Barbatruc
Bonsoir tout le monde

Michel, nous t'interdisons expressément d'aller dans des concerts, tu es bien mieux chez toi à nous préparer des posts comme celui-là. crois-moi :)


Encore merci de nous faire profiter de ton savoir.

salut
 

JJM

XLDnaute Occasionnel
Bonjour à tous,

C'est absolument super, je n'ai pas encore tout testé mais ce que j'ai essayé fonctionne à la perfection, y compris la macro complémentaire pour jouer des CD.
Il ne reste plus qu'a adapter pour créer un vrai utilitaire (dommage que j'aie déjà un projet en cours pour mon 100ème post : un jeu de Nim graphique imbattable en application ne ressemblant pas à Excel).

P.S. : les concerts c'est vraiment nul, rien ne vaut Excel... eh eh eh...
Au fait... hum...
- et pour afficher les notes de musique ?
- et les paroles de la chanson ?
- et pour composer des musiques à l'aide d'un synthétiseur ?
- et pour créer automatiquement des tubes avec Excel ?
A demain, j'espère, pour ces solutions... :)

(j'espère que personne ne me prend au sérieux).
 
M

Michel C

Guest
Bonjour à tous et spécialement à Michelxld,

Je tiens à te remercier pour tes précieux renseignements sur la méthode à utiliser pour jouer la musique de cette façon.

Quand j'utilise des fichiers MP3 individuels, la méthode est super. Mais cela ne fonctionne pas sur un fichier MP3 contenant toutes les chansons d'un album donné (au lieu d'avoir 12 fichiers MP3, j'en ai seulement qu'un qui contient toutes ces chansons).

Te reste-t=il des lignes de programmation supplémentaires pour pouvoir gérer ce type de fichier? (avancer, reculer, choix de chansons à l'intérieur du fichier MP3 même).

Merci beaucoup de ton aide et encore une fois merci pour tous ces petits trucs.

Michel C
 

MichelXld

XLDnaute Barbatruc
bonjour à tous , bonjour Michel_C

Michel , peux tu préciser comment tu passes actuellement d'une plage à une autre lorsque tu lis ton fichier MP3 'manuellement' ? ton lecteur affiche la liste des différentes séquences ?

pour ma part je ne connais pas la solution à ce cas de figure


bon week end
MichelXld
 
M

Michel C

Guest
Bonjour à tous et Michelxld

J'avais oublié de te mentionner ce petit détail. C'était la raison pour laquelle je te demandais des lignes supplémentaires de programmation.

Je te remercie beaucoup tout de même de t'avoir penché sur mon problème.

À la prochaine,

Michel C
 
M

Michel C

Guest
Bonjour à tous,

Bonjour Michelxld,

Je tiens à te remercier pour tous les codes spécifiés. Ceci m'a beaucoup aidé à monter mon petit programme.

Le fichier musical comprend le chemin à prendre pour faire jouer la musique (ex,: c:\\...etc). J'ai copié le tout (programme et fichiers musique) sur un CD.

Le CD fonctionne bien sur mon ordinateur. Le problème survient lorsque je fais jouer le CD sur un autre ordi. Mon lecteur CD est le drive E:, par contre sur un autre ordi, la lettre peut changer.

Comment puis-je faire reconnaître le lecteur à mon programme et quelle serait la ligne de code pour indiquer le chemin des fichiers musicaux sur le CD?

Je m'explique plus précisément sur le chemin des fichiers musicaux. Dans le programnme, j'indique E:\\bla bla... sur mon ordi, mais cette même ligne de code devrait se modifier elle-même si je fais jouer le CD sur un autre ordi.

Michel C
 

MichelXld

XLDnaute Barbatruc
bonjour Michel

merci pour ton message

Cet exemple permet de boucler sur tous les lecteurs du poste afin de récupérer la lettre associée . Si oThisDrive.Playlist.Count est supérieur à 0 cela signifie qu'il y a un CD ou un DVD d'installé


Sub listeLecteurs_CD_DVD()
Dim Wmp As WindowsMediaPlayer
Dim iNumDrives As Integer, i As Integer
Dim oThisDrive As IWMPCdrom

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

iNumDrives = Wmp.cdromCollection.Count
If iNumDrives = 0 Then MsgBox 'il n'y a pas de lecteur de CD ou DVD installés .'

For i = 0 To iNumDrives - 1
Set oThisDrive = Wmp.cdromCollection.Item(i)
MsgBox oThisDrive.driveSpecifier & vbLf & oThisDrive.Playlist.Count
Next i

End Sub



bonne journée
MichelXld
 
M

Michel C

Guest
Bonjour à tous,

Bonjour Michelxld,

Merci pour ces lignes car le programme identifie bien quel lecteur possède les fichiers musicaux. De ce fait, j'ai donc retiré la lettre de mes autres lignes. ex.:

Set Xwmp = Wmp.newMedia('C:maMusique.mp3')
Wmp.currentPlaylist.insertItem 1, Xwmp

est devenu

Set Xwmp = Wmp.newMedia('maMusique.mp3')
Wmp.currentPlaylist.insertItem 1, Xwmp

En retirant tout simplement la lettre, je croyais que le programme irait chercher les fichiers musicaux dans le bon lecteur, ce qui n'est pas le cas.

Y a-t-il quelque chose que je fais de travers?

Je te remercie de m'aider,

Michel C
 

Statistiques des forums

Discussions
314 634
Messages
2 111 427
Membres
111 133
dernier inscrit
dominique001