Page 1 sur 1
[Re] Windows media player : lire une musique et passer à une autre
Posté : mer. 30 mars 2022 22:05
par franco
Bonjour.
Aimant bien écouter de la musique, j'ai décidé de me créer un petit script, me permettant d'
écouter en boucle (For), un dossier prévu à cet effet.
Seul souci : Pendant la lecture d'une musique,
je voudrais passer à une autre.
Je n'y arrive pas.
J'arrive à lire musique par musique, mais pas passer volontairement à une autre.
Voici le script en question :
► Afficher le texte
#include <File.au3>#include <GuiListView.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>$oPlayer = ObjCreate("WMPlayer.OCX")#Region ### START Koda GUI section ### Form=Global $Form1 = GUICreate("Form1", 650, 437, 192, 124)GUICtrlCreateLabel("Dossier Media (Audio / Vidéo)", 5, 5, 150, 20)$iDossier = GUICtrlCreateInput("", 160, 0, 400, 20)GUICtrlSetState($iDossier, 128)$Parcourir = GUICtrlCreateButton("...", 560, 0, 20, 20)$listview = GUICtrlCreateListView("#|Dossier|Média", 0, 40, 650, 280)GUICtrlSendMsg($listview, 4126, 0, 50)GUICtrlSendMsg($listview, 4126, 1, 200)GUICtrlSendMsg($listview, 4126, 2, 400)$lire_pl = GUICtrlCreateButton("Lire la Playlist", 5, 330, 150, 30)GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Parcourir GUICtrlSetData($iDossier, "") $dossier = FileSelectFolder("Choisissez le dossier où se trouve les médias (MUSIQUES / VIDEOS)", @DesktopDir, 2) If Not @error Then GUICtrlSetData($iDossier, $dossier) _MaListView
($dossier) EndIf Case $lire_pl;~ $nb = 0;~ _GUICtrlListView_ClickItem($listview,$nb);~ _GUICtrlListView_EnsureVisible($listview,$nb);~;~ $dossier = GUICtrlRead($iDossier) $FLTAR = _FileListToArrayRec($dossier, "*.mp3;*.wav;*.flac;*.ac3", 1, 1, 2, 2) If Not @error Then For $a = 1 To $FLTAR[0] $b = $a - 1 $media = $FLTAR[$a] _GUICtrlListView_ClickItem($listview, $b) _GUICtrlListView_EnsureVisible($listview, $b);~ MsgBox(0,$b+1,$media)_LireMedia
($media) Next EndIf EndSwitchWEnd;~ $dossier = "D:\[MUSIQUE]"Func _MaListView
($dossier) _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($listview)) $ext = "*.mp3;*.wma;*.wav;*.asf;*.ogg;*.ape;*.flac;*.mp4;*.wmv;*.avi;*.mkv;*.flv;*.webM" $FLTAR = _FileListToArrayRec($dossier, $ext, 1, 1, 2, 2) If Not @error Then For $a = 1 To $FLTAR[0] $media = $FLTAR[$a] $titre = StringSplit($media, "\")[StringSplit($media, "\")[0]] $dossiercible = StringStripWS(StringReplace($media, $titre, ""), 3) $item = $a & "|" & $dossiercible & "|" & $titre GUICtrlCreateListViewItem($item, $listview) Next EndIfEndFunc ;==>_MaListViewFunc _LireMedia
($media) $oPlayer.Controls.Stop $oPlayer.Settings.autoStart = True $oPlayer.uiMode = "none" $oPlayer.settings.volume = 50 $oPlayer.URL = $media $oPlayer.Controls.Play While $oPlayer.Playstate <> 1 Sleep(100) WEndEndFunc ;==>_LireMedia
En résumé, il faut que je modifie la fonction _LireMedia pour réussir à faire ce que je veux.
Merci de m'éclairer. :=)
Bon journée / soirée à vous.
Re: [..] Windows media player : lire une musique et passer à une autre
Posté : jeu. 31 mars 2022 11:43
par walkson
Bonjour,
J'ai ce bout de code (minimaliste) basé sur les playlists. Je pense que ça pourrait vous intéresser en l'adaptant mais ça va vous obliger à tout revoir votre code...
Code : Tout sélectionner
HotKeySet("a","suivant")
HotKeySet("z","precedent")
$wmp = ObjCreate("wmplayer.OCX")
$wmp.settings.autoStart = True
$wmp.settings.volume = 50
$wmp.URL = @UserProfileDir & "\Music\30-11-2021.m3u"
ConsoleWrite("Nom de la playliste " & $wmp.currentPlaylist.Name & @CR)
ConsoleWrite("Nombre de morceaux " & $wmp.currentPlaylist.count & @CR)
Sleep(1000)
For $i = 0 To $wmp.currentMedia.attributeCount - 1
ConsoleWrite($wmp.currentMedia.getAttributeName($i) & " : " & $wmp.currentMedia.getItemInfo($wmp.currentMedia.getAttributeName($i)) & @CR)
Next
Global $nbItem = $wmp.currentPlaylist.count
;PauseAndResume()
While $wmp.Playstate <> 1
Sleep(100)
WEnd
Func PauseAndResume()
Sleep(20000)
$wmp.controls.pause()
ConsoleWrite("Paused" & @CRLF)
Sleep(5000)
$wmp.controls.play()
ConsoleWrite("Playing" & @CRLF)
Sleep(5000)
$wmp.controls.stop()
ConsoleWrite("Stopped" & @CRLF)
EndFunc
Func suivant()
$wmp.Controls.Next
$Cible = $wmp.Controls.currentItem.Name
If $Cible = "30-11-2021" Then $wmp.Controls.playItem($wmp.currentPlaylist.Item(0));si $cible est le nom de la playliste "30-11-2021", on revient à l'item 0
$Cible = $wmp.Controls.currentItem.Name
For $i = 0 To $nbItem - 1
If $Cible = $wmp.currentPlaylist.item($i).Name Then ExitLoop
Next
ConsoleWrite($wmp.currentPlaylist.item($i).Name &" >> "& $i + 1 &"/"& $nbItem & @CR)
EndFunc
Func precedent()
$wmp.Controls.Previous
$Cible = $wmp.Controls.currentItem.Name
For $i = 0 To $nbItem - 1
If $Cible = $wmp.currentPlaylist.item($i).Name Then ExitLoop
Next
ConsoleWrite($wmp.currentMedia.getItemInfo("title") &" >> "& $i + 1 &"/"& $nbItem & @CR)
EndFunc
Re: [..] Windows media player : lire une musique et passer à une autre
Posté : jeu. 31 mars 2022 20:03
par jl56
Bonjour,
Sur un de script pour sortir d'une boucle d'action j'avais ajouté une case à cocher sur ma GUI.
Vous pouvez créer cette case exemple "Suivant" et dans votre fonction _LireMedia vous la testez dans la boucle while wend
j'utilise cette fonction pour tester une checkbox
dans votre boucle while wend vous ajoutez
If _IsChecked
($case_suivant) then
Vous décochez la case aussitôt pour ne pas sortir automatiquement à la prochaine musique
puis vous sortez de la boucle
ce n'est pas très esthétique mais ça reste très simple
C'est une idée
A+
JL56
Re: [..] Windows media player : lire une musique et passer à une autre
Posté : ven. 01 avr. 2022 23:01
par franco
Bonjour.
Souci résolu.
Déjà, un grand merci aux intervenants.
J'ai utilisé le script de Walkson pour arriver à mes fins.
J'avais un doute sur l'adaptation, puisque j'utilise souvent la même procédure pour créer une interface.
Et ce doute était réel : les boutons inopoérants.
Dans le passé, j'étais aussi confronté à ce souci.
Et en appliquant une autre méthode pour créer une interface, le souci fut réglé.
Et c'est le cas ici aussi.
Du coup, pour l'interface, j'ai utilisé ceci comme aide :
https://beamtic.com/creating-guis-autoit
Et voici le script final :
► Afficher le texte
#include <GUIConstantsEx.au3>#include <StaticConstants.au3>#include <File.au3>#include <GuiStatusBar.au3>#include <Array.au3>Opt('MustDeclareVars', 1)Opt("TrayMenuMode", 3)Global $wmp = ObjCreate("wmplayer.OCX")Global $MaPlaylist = @DesktopDir & "\MaPlaylist.m3u"Global $MaPlaylist_AL = @DesktopDir & "\MaPlaylist[aleatoire].m3u"MainGUI
()Func MainGUI
() Local $msg, $tmsg Local $iDossier, $parcourir, $creer_playlist Local $parcourir_pl, $iPlaylist, $jouer_pl, $suivant, $precedent Local $parcourir_tray, $jouer_pl_tray, $creer_playlist_tray, $parcourir_pl_tray, $jouer_pl_tray, $suivant_tray, $precedent_tray, $quitter_tray local $message_pl = "Permer de créer 2 playlist :" & @crlf & "- 1 playlist avec un tri par défaut." & @CRLF &"- 1 playlist avec un tri aléatoire." Local $gui = GUICreate("My GUI Window Title", 550, 600, 10, 10) GUISetFont(9, 500, 0, "comic sans ms");~ Opt("GUICoordMode", 2);~ $Button1 = GUICtrlCreateButton("Button 1", 10, 30, 100);~ $Button2 = GUICtrlCreateButton("Button 2", 0, -1) GUICtrlCreateLabel("Dossier Musique", 5, 2.5, 110, 20) $iDossier = GUICtrlCreateInput("", 120, 0, 400, 20) GUICtrlSetState($iDossier, 128) $parcourir = GUICtrlCreateButton("...", 525, 0, 20, 20) $creer_playlist = GUICtrlCreateButton("Créer les playlists", 5, 30, 150, 20) GUICtrlSetTip($creer_playlist,$message_pl,"Création de deux playlists") GUICtrlCreateLabel("", 0, 60, 550, 1, $SS_SUNKEN) $parcourir_pl = GUICtrlCreateButton("Importer une playlist", 5, 70, 150, 25) $iPlaylist = GUICtrlCreateInput("", 170, 70, 350, 25) GUICtrlSetState($iPlaylist, 128) $jouer_pl = GUICtrlCreateButton("Jouer la playlist", 25, 110, 120, 25) $suivant = GUICtrlCreateButton("Musique suivante", 150, 110, 120, 25) $precedent = GUICtrlCreateButton("Musique précédente", 275, 110, 120, 25) $parcourir_tray = TrayCreateItem("Choix du dossier Musique") $creer_playlist_tray = TrayCreateItem("Créer la playlist") TrayCreateItem("") $parcourir_pl_tray = TrayCreateItem("Importer la playlist") TrayCreateItem("") $jouer_pl_tray = TrayCreateItem("Jouer la playlist") $suivant_tray = TrayCreateItem("Suivant") $precedent_tray = TrayCreateItem("Précédent") TrayCreateItem("") $quitter_tray = TrayCreateItem("Quitter") Global $barre_etat = _GUICtrlStatusBar_Create($gui) _GUICtrlStatusBar_SetText($barre_etat, "Lecture en cours : --") GUISetState() ; Run the GUI until the window is closed While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case $msg = $parcourir Global $folder = FileSelectFolder("Choisissez le dossier où se trouver vos musiques / vidéos", @DesktopDir, 2) If Not @error Then GUICtrlSetData($iDossier, $folder) TrayTip("Succès", "Le dossier Musique a bien été sélectionné.", 5) EndIf Case $msg = $creer_playlist Global $dossier = GUICtrlRead($iDossier) _CreationPL
($dossier) Case $msg = $parcourir_pl Global $fod = FileOpenDialog("Choisissez La Playlist que vous souhaitez importer", @DesktopDir, "Playlist (*.m3u;*m3u8)", 1) If Not @error Then GUICtrlSetData($iPlaylist, $fod) Case $msg = $jouer_pl Global $Playlist = GUICtrlRead($iPlaylist) If FileExists($Playlist) Then _play_media
($Playlist) Case $msg = $suivant _suivant
() Case $msg = $precedent _precedent
() EndSelect $tmsg = TrayGetMsg() Select Case $tmsg = $parcourir_tray Global $folder = FileSelectFolder("Choisissez le dossier où se trouver vos musiques / vidéos", @DesktopDir, 2) If Not @error Then GUICtrlSetData($iDossier, $folder) TrayTip("Succès", "Le dossier Musique a bien été sélectionné.", 5) EndIf Case $tmsg = $creer_playlist_tray Global $dossier = GUICtrlRead($iDossier) _CreationPL
($dossier) Case $tmsg = $jouer_pl_tray Global $Playlist = GUICtrlRead($iPlaylist) If FileExists($Playlist) Then _play_media
($Playlist) Case $tmsg = $parcourir_pl_tray Global $fod = FileOpenDialog("Choisissez La Playlist que vous souhaitez importer", @DesktopDir, "Playlist (*.m3u;*m3u8)", 1) If Not @error Then GUICtrlSetData($iPlaylist, $fod) Case $tmsg = $jouer_pl_tray Global $Playlist = GUICtrlRead($iPlaylist) If FileExists($Playlist) Then _play_media
($Playlist) Case $tmsg = $suivant_tray _suivant
() Case $tmsg = $precedent_tray _precedent
() EndSelect WEndEndFunc ;==>MainGUIFunc _CreationPL
($dossier) Local $medias, $contenu_pl, $MPlist, $MPlist2, $n1, $n2, $temp If FileExists($dossier) Then Local $extensions = "*.ac3;*.flac;*.mp3;*.wav" Local $FLTAR = _FileListToArrayRec($dossier, $extensions, 1, 1, 1, 2) For $a = 1 To $FLTAR[0] Local $media = $FLTAR[$a] $medias &= $media & @CRLF Next EndIf If StringStripWS($medias, 8) <> "" Then FileDelete($MaPlaylist) FileDelete($MaPlaylist_AL) $MPlist = FileOpen($MaPlaylist, 2) FileWrite($MPlist, $medias) FileClose($MPlist) $MPlist2 = FileOpen($MaPlaylist_AL, 2) FileWrite($MPlist2, $medias) FileClose($MPlist2) Dim $Array[9] _FileReadToArray($MaPlaylist_AL, $Array) For $i = 1 To 10 * UBound($Array) $n1 = Random(1, UBound($Array) - 1, 1) ;was Random(0...but I change it to 1 so element [0] will $n2 = Random(1, UBound($Array) - 1, 1) ;not be read into the array (I think that's how it works $temp = $Array[$n1] ;because now text results show no [0] element showing up $Array[$n1] = $Array[$n2] $Array[$n2] = $temp Next;~ _ArrayDisplay($Array) _FileWriteFromArray($MaPlaylist_AL, $Array, 1) TrayTip("Succès", "La playlist a bien été créé !", 5) EndIfEndFunc ;==>_CreationPLFunc _play_media
($PL) $wmp.settings.autoStart = True $wmp.settings.volume = 50 $wmp.URL = $PL ConsoleWrite("Nom de la playliste " & $wmp.currentPlaylist.Name & @CR) ConsoleWrite("Nombre de morceaux " & $wmp.currentPlaylist.count & @CR) Sleep(1000) For $i = 0 To $wmp.currentMedia.attributeCount - 1 ConsoleWrite($wmp.currentMedia.getAttributeName($i) & " : " & $wmp.currentMedia.getItemInfo($wmp.currentMedia.getAttributeName($i)) & @CR) Next Global $nbItem = $wmp.currentPlaylist.count Global $cible = $wmp.Controls.currentItem.Name _GUICtrlStatusBar_SetText($barre_etat, $cible)EndFunc ;==>_play_mediaFunc _suivant
() If $wmp.Playstate <> 0 Then $wmp.Controls.Next Global $cible = $wmp.Controls.currentItem.Name If $cible = "MaPlaylist" Then $wmp.Controls.playItem($wmp.currentPlaylist.Item(0)) ;si $cible est le nom de la playliste "30-11-2021", on revient à l'item 0 _GUICtrlStatusBar_SetText($barre_etat, $cible) For $i = 0 To $nbItem - 1 If $cible = $wmp.currentPlaylist.item($i).Name Then ExitLoop Next;~ ConsoleWrite($wmp.currentPlaylist.item($i).Name & " >> " & $i + 1 & "/" & $nbItem & @CR) EndIfEndFunc ;==>_suivantFunc _precedent
() If $wmp.Playstate <> 0 Then $wmp.Controls.Previous Global $cible = $wmp.Controls.currentItem.Name _GUICtrlStatusBar_SetText($barre_etat, $cible) For $i = 0 To $nbItem - 1 If $cible = $wmp.currentPlaylist.item($i).Name Then ExitLoop Next;~ ConsoleWrite($wmp.currentMedia.getItemInfo("title") & " >> " & $i + 1 & "/" & $nbItem & @CR) EndIfEndFunc ;==>_precedent
Il fonctionne impec.
Big love sur vous
++