Je repris le code alternatif pour mettre le résultat de la lecture récursive des mp3 dans un ListIconGadget.
Cette Lecture s'effectue dans un thread de manière à commencer et même jouer un premier morceau sans attendre la fin de la lecture récursive des fichiers. C'est pratique en cas de gros dossier.
Pensez à bien sélectionner un item avant de lancer la lecture.
Code : Tout sélectionner
EnableExplicit
Enumeration
#Mainform
#Mp3
#Mp3List
#Mp3Load
#Mp3Play
#Mp3Balance
EndEnumeration
Global FileName.s
Global Mp3Folder.s
Define.l Event, WEvent, MEvent, GEvent, TEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Procedure.s MCI_GetDuration(Filename.s)
Protected Time.q, Nb.i =1
Protected a$=Space(#MAX_PATH)
Protected sek.l, min.l
mciSendString_("close MCI_"+Str(Nb), 0, 0, 0)
mciSendString_("OPEN "+Chr(34)+FileName+Chr(34)+" Type MPEGVIDEO ALIAS MCI_"+Str(Nb), 0, 0, 0)
mciSendString_("status MCI_"+Str(Nb)+" length", @a$, #MAX_PATH, 0)
Time=Val(a$)
Time/1000
sek=Time%60:Time/60
min=Time%60:Time/60
ProcedureReturn RSet(Str(Time), 2, "0")+":"+RSet(Str(min), 2, "0")+":"+RSet(Str(sek), 2, "0")
EndProcedure
Procedure.s ParseDirectory(folder.s, id.l = 0)
If Right(folder, 1) <> "\"
folder + "\"
EndIf
If ExamineDirectory(id, folder, "*.*")
While NextDirectoryEntry(id)
If DirectoryEntryName(id) <> "." And DirectoryEntryName(id) <> ".."
Filename = folder + DirectoryEntryName(id)
If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory
ParseDirectory(folder + DirectoryEntryName(id), id + 1)
EndIf
If GetExtensionPart(Filename) = "mp3"
AddGadgetItem(#Mp3List,-1, FileName + Chr(10) +MCI_GetDuration(Filename))
EndIf
EndIf
Wend
FinishDirectory(id)
EndIf
EndProcedure
Procedure StartThread(*Value)
ClearGadgetItems(#Mp3List)
ParseDirectory(Mp3Folder)
EndProcedure
;Selection du dossier à explorer
Procedure.s Mp3Load()
Protected N.i
;Selection du dossier à explorer
Mp3Folder = PathRequester("","d:\musique")
;On lance un Thread de maniere à ne pas attendre la fin de la lecture recursive
;Plus rapide à l'affichage en cas de gros dossier
CreateThread(@StartThread(), 0)
EndProcedure
;Fenetre de l'application
Procedure Open_MainForm()
OpenWindow(#Mainform, 0, 0, 500, 400, "MP3 Player", WindowStyle)
ListIconGadget(#Mp3List, 10, 50, 480, 280, "Titre", 380, #PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_FullRowSelect)
AddGadgetColumn(#Mp3List, 1, "Durée", 80)
ButtonGadget(#Mp3Load, 10, 350, 80, 22, "Load")
ButtonGadget(#Mp3Play, 100, 350, 80, 22, "Play")
TrackBarGadget(#Mp3Balance, 200, 350, 100, 20, 0, 100)
SetGadgetState(#Mp3Balance, 70) ;Son à 70%
EndProcedure
Procedure Start()
;Initialisation application, police, etc ..
InitMovie()
Open_MainForm()
EndProcedure
start()
Repeat
Event = WaitWindowEvent(10)
;WEvent = EventWindow()
;MEvent = EventMenu()
GEvent = EventGadget()
;TEvent = EventType()
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #Mp3Load
Mp3Load()
Case #Mp3play
If CountGadgetItems(#Mp3List)<>0
LoadMovie(#Mp3, GetGadgetItemText(#Mp3List, GetGadgetState(#Mp3List)))
MovieAudio(#Mp3, GetGadgetState(#Mp3Balance), 0)
PlayMovie(#Mp3, WindowID(#MainForm))
EndIf
Case #Mp3Balance
If IsMovie(#Mp3)
MovieAudio(#Mp3, GetGadgetState(#Mp3Balance), 0)
EndIf
EndSelect
Case #PB_Event_CloseWindow
If IsMovie(#Mp3)
StopMovie(#Mp3)
FreeMovie(#Mp3)
EndIf
End
EndSelect
ForEver