J'ai pris mon code précédent pour l'améliorer. la lecture séquentielle n'est pas encore gérer.
Ajout : du double clique, Pause, abandon de lecture, chargement d'un dossier, Volume et balance.
Code : Tout sélectionner
EnableExplicit
Enumeration
#Player
#Son
#MoviesDir
#MovieAdd
#DirectoryAdd
#ListMovies
#Volume
#Balance
#Kbd_On
#Kbd_Off
#Kbd_Pause
EndEnumeration
Define.l Event
Global Dim Movies.s (1), CountMovies.i, Movie.s, MoviesDir.s, CurrentMovie.i, MoviePlay.b, MoviePause.b
;Initialisation de la bibilothéque movie
Procedure MovieInit()
If InitMovie() = 0
MessageRequester("Ooops ", "Ne peut initialiser l'environnement movie", #MB_ICONERROR)
End
EndIf
EndProcedure
;Chargement d'un fichier
Procedure MovieLoad()
Movie=OpenFileRequester("Que voulez vous jouer ?", "", "Mp3|*.mp3", 0)
If Movie
;Ajout du fichier dans le tableau des fichiers à jouer (Movies)
Movies(CountMovies)=Movie
;Ajout du nom du fichier
AddGadgetItem(#ListMovies, -1, GetFilePart(Movie))
;On relie ListMp3 au tableau des sources à jouer
SetGadgetItemData(#ListMovies, CountGadgetItems(#ListMovies)-1, CountMovies)
CountMovies=CountMovies+1
ReDim Movies(CountMovies)
EndIf
EndProcedure
;AJout d'un dossier
Procedure MoviesLoad()
Protected Result.i, FileName.s, FileExt.s
; Quel dossier selectionner
MoviesDir = PathRequester("Dossier ou se trouve les morceaux à jouer:", MoviesDir)
; On cherche les mp3
If ExamineDirectory(#MoviesDir, MoviesDir, "*.*")
Repeat
Result = NextDirectoryEntry(#MoviesDir)
If Result
FileName = DirectoryEntryName(#MoviesDir)
If FileName <> "." And FileName <> ".."
FileExt = LCase(Right(FileName,4))
If FileExt = ".mp3"
Movies(CountMovies)=MoviesDir+FileName
AddGadgetItem(#ListMovies, -1, GetFilePart(FileName))
SetGadgetItemData(#ListMovies, CountGadgetItems(#ListMovies)-1, CountMovies)
CountMovies=CountMovies+1
ReDim Movies(CountMovies)
EndIf
EndIf
EndIf
Until Result=0
Else
MessageRequester("Error","Erreur de lecture" ,#MB_ICONERROR)
EndIf
EndProcedure
;Jouer un mp3
Procedure MoviePlay()
CurrentMovie=GetGadgetItemData(#ListMovies, GetGadgetState(#ListMovies))
If LoadMovie(#Son, Movies(CurrentMovie))
MoviePlay=#True
MovieAudio(#Son, GetGadgetState(#Volume), 100-GetGadgetState(#Balance))
PlayMovie(#Son, WindowID(#Player))
Else
MessageRequester("Erreur", "Le son ne peut etre lu", #MB_ICONERROR)
EndIf
EndProcedure
;Ne joue plus de son
Procedure MovieStop()
If IsMovie(#Son)
MoviePlay=#False
StopMovie(#Son)
EndIf
EndProcedure
Procedure MoviePause()
If IsMovie(#Son)
If MoviePause=#False
MoviePause=#True
PauseMovie(#Son)
Else
MoviePause=#False
ResumeMovie(#Son)
EndIf
EndIf
EndProcedure
;Ouverture du player et selection du mp3 à jouer
Procedure PlayerShow()
OpenWindow(#Player, 100, 150, 300, 310, "Jouer un MP3")
ButtonGadget(#MovieAdd, 10, 10, 80, 20, "Add File")
ButtonGadget(#DirectoryAdd, 95, 10, 80, 20, "Add Directory")
ListIconGadget(#ListMovies, 10, 35, 280, 200,"Mp3", 275)
TrackBarGadget(#Volume, 255, 240, 25, 70, 0, 100, #PB_TrackBar_Vertical)
SetGadgetState(#Volume, 50)
TrackBarGadget(#Balance, 280, 240, 25, 70, 0, 200, #PB_TrackBar_Vertical)
SetGadgetState(#Balance, 100)
TextGadget(#PB_Any, 10, 250, 300, 20, "[Entrée] - Jouer")
TextGadget(#PB_Any, 10, 270, 300, 20, "[Escape] - Arrêter")
TextGadget(#PB_Any, 10, 290, 300, 20, "[Espace] - Pause")
;Affectation des touches de racourcis (Un raccourci génère un évènement du type 'Menu' )
AddKeyboardShortcut(#Player, #PB_Shortcut_Return, #Kbd_On)
AddKeyboardShortcut(#Player, #PB_Shortcut_Escape, #Kbd_Off)
AddKeyboardShortcut(#Player, #PB_Shortcut_Space, #Kbd_Pause)
EndProcedure
;-Début du programme
CountMovies=1
MovieInit()
PlayerShow()
;-Boucle evenementiel
Repeat
Event=WaitWindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu()
Case #Kbd_On
MoviePlay()
Case #Kbd_Off
MovieStop()
Case #Kbd_Pause
MoviePause()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #MovieAdd
MovieLoad()
Case #DirectoryAdd
MoviesLoad()
Case #ListMovies
If EventType()=#PB_EventType_LeftDoubleClick
MoviePlay()
EndIf
Case #Volume, #Balance
If IsMovie(#Son)
MovieAudio(#Son, GetGadgetState(#Volume), 100-GetGadgetState(#Balance))
EndIf
EndSelect
Case #PB_Event_CloseWindow
;Libere la mémoire
If IsMovie(#Son)
FreeMovie(#Son)
EndIf
End ;Fermeture du programme
EndSelect
ForEver