Python pour musique aléatoire + heure

Bonjour,

Alors que je vous explique un peu le projet : Un raspberry PI, branché à un écran LCD - Projet de réveil en musique aléatoire.
En premier, je balance la musique aléatoire avec un script shell, le fichier joué est placé dans un fichier central.

A côté, j’ai donc mon script Python. Voici ce que j’aimerais faire :

  1. Si fichier central est vide, une boucle affiche successivement l’heure, puis un message perso. Et actualiser toutes les 5 secondes.
  2. Si une ligne est trouvée dans fichier central, une boucle (similaire à la précédente) affiche successivement artiste, album, titre, heure, RAM.

J’arrive déjà à faire quelque chose, seulement un ou deux problèmes se posent :

  • while taille_fichier <= 0 , appeler une fonction qui contient une boucle…
  • while taille_fichier >= 0, appeler la fonction qui contient également une boucle pour afficher successivement artiste, album…

Le problème principal, c’est que si aucune musique n’est jouée, le script affiche l’heure en boucle, même si on ajoute une musique après.
De même, si une musique est jouée, on entre dans la boucle 2, et on n’en sort jamais… AU moment où la musique s’arrête, le fichier se vide et l’affichage s’arrête … :think:

J’ai essayé en remplaçant les premiers while par des If, mais ca n’a pas l’air de fonctionner vraiment…
Niveau algo, que pourriez-vous me conseiller ?

Merci :slightly_smiling:

Je ne connais rien à Python, mais d’après tes tests la valeur “0” répond à tes deux conditions.
Est-ce que ça ne marcherait pas mieux avec “while taille_fichier = 0; …” et “while taille_fichier > 0; …” ?

Oui, je me suis trompé dans mon exemple, désolé… (voir ma fonction en dessous).

En fait, j’ai trouvé à peu près, il fallait mettre un while global qui était toujours valide. Ceci est obligatoire afin que le LCD reste toujours dans une boucle globale d’affichage dans tous les cas.
Dans ce while global, on pouvait en placer deux autres respectant chacun la condition self.music = 0 ou self.music = 1.

Cela donne ce style, si ça en intéresse certains :

Fonction pour savoir si fichier est vide :

def SysStop(self): Size = os.path.getsize("/root/scripts/log-music-random.txt") if Size >= 2L: self.music = 1; elif Size <= 1L: self.music = 0;

Fonction principale d’affichage (LCD s’allume quand self.stop == False) :

[code]while self.stop == False:
while self.music == 0:
self.lcd.LcdSetMessage(self.SysDate() +"\n" +self.SysHour())
sleep(4)
self.SysStop()

                     while self.music == 1:
                             self.SysPlay()
                             self.SysStop()[/code]

Merci de ton soutien.

J’ai une dernière question, mais je ne suis pas sûr qu’on puisse savoir facilement…

Mon script Python affiche correctement de la musique ou des valeurs horaires, mais aléatoirement, je tombe sur des caractères bizarres à la place d’une séquence, tel que “caractère math ‘appartient’, %F z WfV, …” Cela se produit assez aléatoirement, c’est étrange…

J’ai bien une petite idée, mais je ne vois pas comment savoir ou tester : Ma fonction SysPlay citée plus haut, permet d’afficher :
Nom d’artiste - Nom d’album - Titre.mp3 - Heure.

A chaque fois, je vais lire le fichier avec ce système, pour ne conserver qu’un seul champ :

f = open("fichier-musique.txt") content= f.read().split("-") f.close() except: return "Title Error" return content[2];

Cela peut-il poser problème de mémoire, ou de traitement, si toutes les 5 secondes, une ouverture / fermeture de fichier est faite ?? :think:

Merci.