Schématiquement, Mon programme de diffusion pour notre webradio lit à la suite les uns des autres des fichiers .ogg via loadsound et playsound (playsound non utilisé en 'mode' streaming'). Ce programme devrait fonctionner toute la journée.
Sur cette machine, windows 10 famille, fonctionne Rocket Broadcaster (logiciel de streaming vers mon icecast2 sur un VPS hébergé chez OVH). Rocket Broadcaster intègre le vst StereoTool.
Mon logiciel écrit des informations dans un fichier de log, lorsqu'il charge un .ogg, le lit, ...
- Le soucis, c'est que mon système va rebooter au bout de quelques heures et je ne parviens pas à déterminer la cause ! Pas un seul message d'erreur. Si le pc ne reboote pas, et bien c'est l'affichage qui est passé à une résolution inférieure et le programme semble encore tourner, par contre il refuse de charger via loadsound les fichiers : dans mon code IsSound à lire est à 0 après le loadsound.
- J'ai installé sur un autre machine plus puissante (8Go de mémoire, ...) , essayé de monitorer avec le gestionnaire de tâche, d'autres softs... Mon programme semble pourtant utiliser peu de ressource ! Un pic, un dépassement soudain ferait-il planter l'ensemble ?
Je soupçonne un soucis au niveau de la mémoire. Un dépassement RAM ou qqchose en lien avec l'affichage vidéo. Va savoir ! Ou alors la suite des LoadSound. Quelquechose se remplirait, un tampon, sans se vider correctement !
J'utilise un Freesound(MonSonlu) avant d'en relire un autre pour vider la mémoire. Est-ce suffisant ? Il y a un Freesound(#Pb_all) avant le rebouclage des lectures, c'est radical çà non, devrait libérer de la mémoire ?
Q1 : Existe t-il des commandes internes à Purebasic qui me permettent de connaitre l'utilisation de la mémoire de mon application.
Q2 : Playsound, loadsound, freesound. Des conseils d'utilisation pour pallier à mon problème ?
Un extrait de mon programme :
Code : Tout sélectionner
Procedure Charger_et_jouer_element_liste()
Define NomFichier$
Define Titre$
Define Code$
Define Personnes$
Define Image$
Define Duree$
Define Commentaire$
NomFichier$ = Tableau_playlist$ (gItem_lecture-1)
Titre$ = Tableau_elements(gItem_lecture-1)\Titre
If Titre$ <> "<DIRECT>"
If IsSound (gSonLu) <> 0
While SoundStatus(gSonLu) > 0 : Wend
FreeSound (gSonLu)
EndIf
gSonLu = LoadSound(#PB_Any, gChemin_general_donnees$ + NomFichier$)
If IsSound (gSonLu) <> 0
PlaySound(gSonLu)
gNbreTentativesChargement = 0
Code$ = Tableau_elements(gItem_lecture-1)\Code
Personnes$ = Tableau_elements(gItem_lecture-1)\Personnes
Image$ = Tableau_elements(gItem_lecture-1)\Image
Duree$ = Convertion_affichage_temps ( SoundLength(gSonlu, #PB_Sound_Millisecond) )
Commentaire$ = Tableau_elements(gItem_lecture-1)\Commentaire
Ajouter_au_log ("Lecture du fichier : '" + Titre$ + "' - " + Code$ + " - " + Duree$ + " - '" + NomFichier$ + "'.")
Afficher_message ("Lecture du fichier : '" + Titre$ + "' - " + Code$ + " - " + Duree$ + " - '" + NomFichier$ + "'.")
Envoyer_message_retour_diffusion ("Lecture du fichier : '" + Titre$ + "' - " + Code$ + " - " + Duree$ + " - '" + NomFichier$ + "'.")
Envoyer_requete_site(Titre$, Code$, Duree$, Personnes$, Image$,Commentaire$)
Ecrire_meta_donnees (Tableau_elements(gItem_lecture-1)\Personnes, Tableau_elements(gItem_lecture-1)\Titre)
gEtat_lecture = #LECTURE_LISTE_ITEM_EN_COURS
Else
Ajouter_au_log("ERREUR : Impossible de lire le fichier'" + NomFichier$ + "'")
Envoyer_message_retour_diffusion ("ERREUR : Impossible de lire le fichier'" + NomFichier$ + "'")
If gNbreTentativesChargement >= #MAX_TENTATIVES_CHARGEMENT
gEtat_lecture = #LECTURE_LISTE_ITEM_SUIVANT
Else
FreeSound (#PB_All) ; pour liberer de la mémoire ?
Delay (2000)
gNbreTentativesChargement = gNbreTentativesChargement + 1
Ajouter_au_log("TENTATIVE RECHARGEMENT DU FICHIER " + Str(gNbreTentativesChargement) + "/" + Str(#MAX_TENTATIVES_CHARGEMENT) + " : " + NomFichier$ + "'")
Envoyer_message_retour_diffusion ("TENTATIVE RECHARGEMENT DU FICHIER " + Str(gNbreTentativesChargement) + "/" + Str(#MAX_TENTATIVES_CHARGEMENT) + " : " + NomFichier$ + "'")
Charger_et_jouer_element_liste()
EndIf
EndIf
Else
gEtat_lecture = #LECTURE_DIRECT_DEBUT
EndIf
EndProcedure
Merci à vous.