Code : Tout sélectionner
; ----------------------------------------------------------------------
;
; PROGRAMME d'AUTOMATION RADIO DES FLORALIES
;
; ----------------------------------------------------------------------
; Hubert BAYRE : hubert.bayre@wanadoo.fr
; janvier 2021
EnableExplicit
XIncludeFile "formulaire_programme_automation.pbf"
#LECTURE_LISTE_OFF = 0
#LECTURE_LISTE_ON = 1
#LECTURE_LISTE_INIT = 2
#LECTURE_LISTE_ITEM_CHARGER = 3
#LECTURE_LISTE_ITEM_EN_COURS = 4
#LECTURE_LISTE_ITEM_FINIE = 5
#LECTURE_LISTE_ITEM_SUIVANT = 6
#LECTURE_LISTE_TERMINEE = 7
#LECTURE_LISTE_BOUCLER = 8
Global Event
Global Fini
Global gEtat_lecture
Global gItem_lecture
Global gMaxItem_lecture
Global gNbBoucle_lecture
Global gSonLu
Global gSonTest
; ----------------------------------------------------------------------
;
; PROCEDURES
;
; ----------------------------------------------------------------------
Procedure Afficher_message (Message$)
SetGadgetText (Text_message, Message$)
EndProcedure
Procedure Ajouter_au_log (Message$)
Define Texte$
Texte$ = FormatDate("%hh:%ii:%ss", Date()) + " - " + FormatDate(" %dd/%mm/%yyyy", Date()) + " : " + Message$
AddGadgetItem (Listview_log, -1, Texte$)
SetGadgetState (Listview_log, CountGadgetItems(Listview_log)-1)
EndProcedure
Procedure Arreter_son()
gEtat_lecture = #LECTURE_LISTE_OFF
gMaxItem_lecture = 0
gItem_lecture = 0
Ajouter_au_log ("Arrêt du son et de la playlist.")
Afficher_message ("Arrêt du son et de la playlist.")
If IsMovie(gSonTest )
StopMovie (gSonTest )
EndIf
If IsMovie(gSonLu)
StopMovie (gSonLu)
EndIf
EndProcedure
Procedure Quitter()
Define Result
Result = MessageRequester("Quitter le programme", "Veuillez faire votre choix :", #PB_MessageRequester_YesNo)
If Result = #PB_MessageRequester_Yes
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure Creer_nouvelle_liste()
Define Result
Result = MessageRequester("Créer une nouvelle liste", "Cette action effacera la liste en cours...", #PB_MessageRequester_YesNo)
If Result = #PB_MessageRequester_Yes
ClearGadgetItems(Listview_playlist)
Afficher_message ("Nouvelle playlist")
SetWindowTitle (Window_0, "Programme Automation Radio Les Floralies : " + "Nouvelle")
gEtat_lecture = #LECTURE_LISTE_OFF
gMaxItem_lecture = 0
gItem_lecture = 0
gNbBoucle_lecture = 0
Arreter_son()
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure Enlever_element()
Define Result
Result = GetGadgetState(Listview_playlist)
If Result <> -1
RemoveGadgetItem(Listview_playlist, Result)
EndIf
EndProcedure
Procedure Jouer_element()
Define Resultat
Define NomFichier$
Resultat = GetGadgetState(Listview_playlist)
If Resultat<> -1
NomFichier$ = GetGadgetItemText(Listview_playlist, Resultat)
gSonTest = LoadMovie(#PB_Any, NomFichier$)
If gSonTest <> 0
OpenWindow(0, 100, 150, MovieWidth(gSonTest), MovieHeight(gSonTest), "Lecture d'un fichier mp3 en test.")
PlayMovie(gSonTest , WindowID(0))
Else
MessageRequester("Erreur", "Impossible de lire le fichier son mp3 de test !", 0)
EndIf
Else
MessageRequester("Erreur", "Impossible de lire le fichier son mp3 de test !", 0)
EndIf
EndProcedure
Procedure Initier_lecture_liste()
gMaxItem_lecture = CountGadgetItems(Listview_playlist)-1
If gMaxItem_lecture <> -1
Ajouter_au_log ("Initialisation de la lecture de la playlist.")
Afficher_message ("Initialisation de la lecture de la playlist.")
gItem_lecture = 0
gEtat_lecture = #LECTURE_LISTE_ITEM_SUIVANT
Else
MessageRequester("Erreur", "La Playliste est vide !", 0)
gItem_lecture = 0
gMaxItem_lecture = 0
gEtat_lecture = #LECTURE_LISTE_OFF
EndIf
EndProcedure
Procedure Boucler_lecture_liste()
gMaxItem_lecture = CountGadgetItems(Listview_playlist)-1
If gMaxItem_lecture <> -1
gNbBoucle_lecture = gNbBoucle_lecture + 1
Ajouter_au_log ("Bouclage " + gNbBoucle_lecture + " de la lecture de la playlist.")
Afficher_message ("Bouclage " + gNbBoucle_lecture + " de la lecture de la playlist.")
gItem_lecture = 0
gEtat_lecture = #LECTURE_LISTE_ITEM_SUIVANT
Else
MessageRequester("Erreur", "La Playliste est vide !", 0)
gItem_lecture = 0
gMaxItem_lecture = 0
gEtat_lecture = #LECTURE_LISTE_OFF
EndIf
EndProcedure
Procedure Gerer_liste_lecture()
If gItem_lecture <= gMaxItem_lecture
gEtat_lecture = #LECTURE_LISTE_ITEM_CHARGER
gItem_lecture = gItem_lecture +1
EndIf
EndProcedure
Procedure Determiner_lecture_element_liste_finie()
If MovieStatus(gSonLu) = 0
If gItem_lecture <= gMaxItem_lecture
gEtat_lecture = #LECTURE_LISTE_ITEM_FINIE
Else
gEtat_lecture = #LECTURE_LISTE_TERMINEE
EndIf
Delay(50) ; laisse le temps au player extérieur de démarrer
EndIf
EndProcedure
Procedure Charger_et_jouer_element_liste()
Define NomFichier$
Define Window_1
NomFichier$ = GetGadgetItemText(Listview_playlist, gItem_lecture-1)
gSonLu = LoadMovie(#PB_Any, NomFichier$)
If gSonLu <> 0
Ajouter_au_log ("Lecture du fichier '" + NomFichier$ + "'")
Afficher_message ("Lecture du fichier '" + NomFichier$ + "'")
Window_1 = OpenWindow(#PB_Any, 100, 150, 800, 100, "Lecture d'un fichier mp3 : '" + NomFichier$ + "'")
PlayMovie(gSonLu,WindowID(Window_1))
HideWindow (Window_1, #True)
SetActiveWindow(Window_0)
gEtat_lecture = #LECTURE_LISTE_ITEM_EN_COURS
Else
Ajouter_au_log("ERREUR : Impossible de lire le fichier'" + NomFichier$ + "'")
gEtat_lecture = #LECTURE_LISTE_ITEM_SUIVANT
EndIf
EndProcedure
Procedure Terminer_lecture_liste()
Ajouter_au_log ("Fin de la lecture de la playlist.")
Afficher_message ("Fin de la lecture de la playlist.")
gItem_lecture = 0
gMaxItem_lecture = 0
gEtat_lecture = #LECTURE_LISTE_BOUCLER
EndProcedure
Procedure Monter_dans_liste()
EndProcedure
Procedure Descendre_dans_liste()
EndProcedure
Procedure Modifier_element()
Define Position
Define Fichier$
Position = GetGadgetState(Listview_playlist)
If Position <> -1
Fichier$ = OpenFileRequester("Choisissez un fichier mp3 de remplacement", "", "mp3 files|*.mp3",0)
If Fichier$ <> ""
SetGadgetItemText(Listview_playlist, Position, Fichier$)
Else
MessageRequester("Erreur de fichier", "Impossible de modifier l'élément !", 0)
EndIf
EndIf
EndProcedure
Procedure Charger_liste()
Define StandardFile$
Define Pattern$
Define Pattern
Define NomFichier$
StandardFile$ = "texte.txt" ; set initial file+path to display
; With next string we will set the search patterns ("|" as separator) for file displaying:
; 1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
; 2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
; 3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
Pattern$ = "Text (*.txt)|*.txt|All files (*.*)|*.*"
Pattern = 0 ; use the first of the three possible patterns as standard
NomFichier$ = OpenFileRequester("Chargement d'une playliste", StandardFile$, Pattern$, Pattern)
If NomFichier$
If ReadFile(0, NomFichier$)
ClearGadgetItems(Listview_playlist)
While Eof(0) = 0
AddGadgetItem ( Listview_playlist, -1, ReadString(0))
Wend
CloseFile(0)
Ajouter_au_log ("Fichier playlist chargé.")
Afficher_message ("Fichier playlist chargé '" + NomFichier$ + "'.")
SetWindowTitle (Window_0, "Programme Automation Radio Les Floralies : " + NomFichier$)
gEtat_lecture = #LECTURE_LISTE_OFF
gMaxItem_lecture = 0
gItem_lecture = 0
gNbBoucle_lecture = 0
Arreter_son()
Else
MessageRequester("Information","Impossible d'ouvrir le fichier !")
EndIf
Else
Afficher_message ("Pas de playliste chargée.")
EndIf
EndProcedure
Procedure Sauvegarder_liste()
Define StandardFile$
Define Pattern$
Define Pattern
Define NomFichier$
Define i
StandardFile$ = "texte.txt" ; set initial file+path to display
; With next string we will set the search patterns ("|" as separator) for file displaying:
; 1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
; 2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
; 3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
Pattern$ = "Text (*.txt)|*.txt|All files (*.*)|*.*"
Pattern = 0 ; use the first of the three possible patterns as standard
NomFichier$ = SaveFileRequester("Indiquez le nom du fichier à sauvegarder", StandardFile$, Pattern$, Pattern)
If NomFichier$
If CreateFile(0, NomFichier$)
For i=0 To CountGadgetItems(Listview_playlist)-1
WriteStringN(0,GetGadgetItemText (Listview_playlist, i))
Next
CloseFile(0)
Afficher_message ("Playlist sauvegardée '" + NomFichier$ + "'.")
SetWindowTitle (Window_0, "Programme Automation Radio Les Floralies : " + NomFichier$)
gEtat_lecture = #LECTURE_LISTE_OFF
gMaxItem_lecture = 0
gItem_lecture = 0
gNbBoucle_lecture = 0
Arreter_son()
Else
MessageRequester("Information","Impossible de créer le fichier")
EndIf
Else
Afficher_message ("Pas de playliste enregistrée.")
EndIf
EndProcedure
Procedure Ajouter_fichier ()
Define Fichier$
Fichier$ = OpenFileRequester("Choisissez un fichier mp3", "", "mp3 files|*.mp3",0)
If Fichier$ <> ""
AddGadgetItem ( Listview_playlist, -1, Fichier$)
Else
MessageRequester("Erreur de fichier", "Impossible d'ajouter le fichier à la liste.", 0)
EndIf
EndProcedure
Procedure Ajouter_interruption()
Define Fichier$
Define Chaine$
Fichier$ = OpenFileRequester("Choisissez un fichier mp3", "", "mp3 files|*.mp3",0)
If Fichier$ <> ""
Chaine$ = GetGadgetText (String_quand_interruption) + " | " + Fichier$
AddGadgetItem ( ListView_interruption, -1, Chaine$)
Else
MessageRequester("Erreur", "Impossible d'ajouter le fichier à la liste.", 0)
EndIf
EndProcedure
Procedure Modifier_interruption()
Define Position
Define Fichier$
Define Chaine$
Position = GetGadgetState(ListView_interruption)
If Position <> -1
Fichier$ = OpenFileRequester("Choisissez un fichier mp3", "", "mp3 files|*.mp3",0)
If Fichier$ <> ""
Chaine$ = GetGadgetText (String_quand_interruption) + " | " + Fichier$
SetGadgetItemText(ListView_interruption, Position, Chaine$)
Else
MessageRequester("Erreur", "Impossible de modifier l'élément !", 0)
EndIf
EndIf
EndProcedure
Procedure Supprimer_interruption()
Define Result
Result = GetGadgetState(ListView_interruption)
Define Result
If Result <> -1
RemoveGadgetItem(ListView_interruption, Result)
EndIf
EndProcedure
Procedure Creer_nouvelle_interruption()
Define Result
Result = MessageRequester("Créer une nouvelle liste d'interruptions", "Cette action effacera la liste en cours...", #PB_MessageRequester_YesNo)
If Result = #PB_MessageRequester_Yes
ClearGadgetItems(Listview_interruption)
Afficher_message ("Nouvelle liste d'interruptions")
SetGadgetText (Text_titre_interruption, "Interruption : " + "Nouvelle")
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure Charger_interruption()
Define StandardFile$
Define Pattern$
Define Pattern
Define NomFichier$
StandardFile$ = "interruption.dat" ; set initial file+path to display
; With next string we will set the search patterns ("|" as separator) for file displaying:
; 1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
; 2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
; 3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
Pattern$ = "Text (*.dat)|*.dat|All files (*.*)|*.*"
Pattern = 0 ; use the first of the three possible patterns as standard
NomFichier$ = OpenFileRequester("Chargement d'une liste d'interruptions", StandardFile$, Pattern$, Pattern)
If NomFichier$
If ReadFile(0, NomFichier$)
ClearGadgetItems(Listview_interruption)
While Eof(0) = 0
AddGadgetItem ( Listview_interruption, -1, ReadString(0))
Wend
CloseFile(0)
Ajouter_au_log ("Fichier d'interruptions chargé.")
Afficher_message ("Fichier d'interruption chargé '" + NomFichier$ + "'.")
SetGadgetText (Text_titre_interruption, "Interruption : " + NomFichier$)
Else
MessageRequester("Information","Impossible d'ouvrir le fichier !")
EndIf
Else
Afficher_message ("Pas de liste d'interruptions chargée.")
EndIf
EndProcedure
Procedure Sauvegarder_interruption()
Define StandardFile$
Define Pattern$
Define Pattern
Define NomFichier$
Define i
StandardFile$ = "interruption.dat" ; set initial file+path to display
; With next string we will set the search patterns ("|" as separator) for file displaying:
; 1st: "Text (*.txt)" as name, ".txt" and ".bat" as allowed extension
; 2nd: "PureBasic (*.pb)" as name, ".pb" as allowed extension
; 3rd: "All files (*.*) as name, "*.*" as allowed extension, valid for all files
Pattern$ = "Text (*.dat)|*.dat|All files (*.*)|*.*"
Pattern = 0 ; use the first of the three possible patterns as standard
NomFichier$ = SaveFileRequester("Indiquez le nom du fichier à sauvegarder", StandardFile$, Pattern$, Pattern)
If NomFichier$
If CreateFile(0, NomFichier$)
For i=0 To CountGadgetItems(Listview_interruption)-1
WriteStringN(0,GetGadgetItemText (Listview_interruption, i))
Next
CloseFile(0)
Afficher_message ("Fichier d'interruption sauvegardé '" + NomFichier$ + "'.")
SetGadgetText (Text_titre_interruption, "Interruption : " + NomFichier$)
Else
MessageRequester("Information","Impossible de créer le fichier")
EndIf
Else
Afficher_message ("Pas de liste d'interruptions enregistré.")
EndIf
EndProcedure
Procedure Jouer_interruption(NomFichier$)
Define SonLocal
Define Window_2
If MovieStatus(gSonLu) > 0
PauseMovie(gSonLu)
Delay(50)
Ajouter_au_log ("Pause fichier en cours.")
EndIf
SonLocal = LoadMovie(#PB_Any, NomFichier$)
If SonLocal <> 0
Ajouter_au_log ("Lecture du fichier interruption '" + NomFichier$ + "'")
Afficher_message ("Lecture du fichier interruption '" + NomFichier$ + "'")
Window_2 = OpenWindow(#PB_Any, 100, 150, 800, 100, "Lecture d'un fichier mp3 interruption : '" + NomFichier$ + "'")
PlayMovie(SonLocal ,WindowID(Window_2))
HideWindow (Window_2, #True)
SetActiveWindow(Window_0)
While MovieStatus(SonLocal) > 0 : Wend
Delay(50)
FreeMovie (SonLocal)
CloseWindow (Window_2)
If MovieStatus(gSonLu) = -1
ResumeMovie(gSonLu)
Ajouter_au_log ("Reprise du dernier fichier en cours.")
Afficher_message ("Reprise du dernier fichier en cours.")
EndIf
Else
Ajouter_au_log("ERREUR : Impossible de lire le fichier'" + NomFichier$ + "'")
EndIf
EndProcedure
Procedure Gerer_interruptions()
Define Heures_actuelle
Define Minutes_actuelle
Define Secondes_actuelle
Define Heures
Define Minutes
Define Chaine$
Define Fichier$
Define i
Heures_actuelle = Val (FormatDate("%hh", Date()))
Minutes_actuelle = Val(FormatDate("%ii", Date()))
Secondes_actuelle = Val(FormatDate("%ss", Date()))
For i=0 To CountGadgetItems(Listview_interruption)-1
Chaine$ = GetGadgetItemText (Listview_interruption, i)
Heures = Val( Mid(Chaine$, 1,2))
Minutes = Val(Mid(Chaine$, 4,2))
Fichier$ = Trim(Mid(Chaine$, 8))
If Heures_actuelle = Heures
If Minutes_actuelle = Minutes
If Secondes_actuelle = 0
Jouer_interruption (Fichier$)
Delay (1000) ; pour passer à la seconde suivante et ne pas répéter
EndIf
EndIf
EndIf
Next
EndProcedure
; ----------------------------------------------------------------------
;
; PROGRAMME PRINCIPAL
;
; ----------------------------------------------------------------------
OpenWindow_0(0,0)
SetWindowTitle (Window_0, "Programme Automation Radio Les Floralies")
HideWindow(Window_0, #False,#PB_Window_ScreenCentered)
Ajouter_au_log ("Démarrage du programme...")
Afficher_message ("Bienvenue - hubert.bayre@orange.fr - version 0.1")
If InitMovie() = 0
Ajouter_au_log ("ERREUR : Système de lecture non initialisé !")
MessageRequester("Erreur", "Système de lecture non initialisé !", 0)
EndIf
gEtat_lecture = #LECTURE_LISTE_OFF
gMaxItem_lecture = 0
gItem_lecture = 0
gNbBoucle_lecture = 0
Repeat
Event = WindowEvent()
If Event
Select Event
Case #PB_Event_CloseWindow
Fini = 1
Case #PB_Event_Gadget ; on a reçu un message en provenance d'un gadget PureBasic
Select EventGadget()
Case Button_ajouter_fichier
Ajouter_fichier()
Case Button_enlever_element
Enlever_element()
Case Button_monter_element
Monter_dans_liste()
Case Button_descendre_element
Descendre_dans_liste()
Case Button_jouer_element
Jouer_element()
Case Button_modifier_element
Modifier_element()
Case Button_nouvelle_liste
Creer_nouvelle_liste()
Case Button_charger_liste
Charger_liste()
Case Button_sauvegarder_liste
Sauvegarder_liste()
Case Button_jouer_liste
If gEtat_lecture = #LECTURE_LISTE_OFF
gEtat_lecture = #LECTURE_LISTE_INIT
Else
MessageRequester("ERREUR", "La playlist est déjà en cours de lecture !", 0)
EndIf
Case Button_stop
Arreter_son()
Case Button_interruption_ajouter
Ajouter_interruption()
Case Button_interruption_supprimer
Supprimer_interruption()
Case Button_interruption_modifier
Modifier_interruption()
Case Button_interruption_nouveau
Creer_nouvelle_interruption()
Case Button_interruption_charger
Charger_interruption()
Case Button_interruption_sauvegarder
Sauvegarder_interruption()
Case Button_quitter
Fini = Quitter()
EndSelect
EndSelect
Else
Delay(2)
EndIf
Select gEtat_lecture
Case #LECTURE_LISTE_OFF
; rien
Case #LECTURE_LISTE_ON
Gerer_liste_lecture()
Case #LECTURE_LISTE_INIT
Initier_lecture_liste()
Case #LECTURE_LISTE_ITEM_CHARGER
Charger_et_jouer_element_liste()
Case #LECTURE_LISTE_ITEM_SUIVANT
Gerer_liste_lecture()
Case #LECTURE_LISTE_ITEM_EN_COURS
Determiner_lecture_element_liste_finie()
Case #LECTURE_LISTE_ITEM_FINIE
Gerer_liste_lecture()
Case #LECTURE_LISTE_TERMINEE
Terminer_lecture_liste()
Case #LECTURE_LISTE_BOUCLER
Boucler_lecture_liste()
EndSelect
Gerer_interruptions()
SetGadgetText (Text_titre, FormatDate(" %dd/%mm/%yyyy", Date()) + " - " + "Automation Radio Les Floralies " + " - " + FormatDate("%hh:%ii:%ss", Date()))
Until fini