logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 09-12-2020 19:13:30

cyrille
CA Debian-Facile
Lieu : Nowhere
Distrib. : SID + FreeBSD. Stable sur serveurs.
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

[python] soucis de cache lors de la lecture d'un fichier son

Hello
Je réalise une application GTK3, python
J'ai une fenetre sur laquelle s'affiche une image, son nom et un bouton qui lit le son correspondant à l'image.
J'ai un bouton suivant, qui lit l'image suivant et met à jour les différents composants

Pour la lecture du son j'ai essayé
soit via le module vlc, soit directement via os.sysem et mpg123

Je rencontre le même soucis avec les 2 procédures

A la première image, le son se lit correctement

Mais à la seconde image, le son de la première et celui de la deuxième également au dessus, à la troisième rebelote, les 3 sons se lisent en simultanée

Le bouton est lecture est initilisé avec

        self.btnLireOgg.connect("clicked", self.on_sound_play, self.motOrtho)



Et la fonction on_sound_play

    def on_sound_play(self, wigdet, ogg):
        """
        Lit un fichier ogg ou mp3
        :param wigdet:
        :param ogg: le fichier son
        """

        file =  "sons/" + ogg + '.mp3'
        print(file)

        """
        Si VLC
        piste = vlc.MediaPlayer(file)
        piste.play()
        """
        os.system("mpg123 " + file)



Je présume qu'il met le fichier dans un tampon qu'il incrémente. COmment peut on le vider ?

D'avance merci wink

Dernière modification par cyrille (09-12-2020 20:14:01)


"Ils ne me comprennent point, je ne suis pas la bouche qu’il faut à ces oreilles."

Association Debian-Facile | Les cahiers du débutant | ISO Debian-FacilePage perso. sur #df

Hors ligne

#2 09-12-2020 21:31:55

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : [python] soucis de cache lors de la lecture d'un fichier son

os.system("mpg123 " + file)


Je comprend pas pourquoi le système te rendrait la main là-dessus avant que le processus soit terminé... Comme dans un shell en fait si tu n'y adjoint pas un & en fin de commande par exemple.

Bon, en émettant l'hypothèse que os.command te rende la main,
je suppose qu'il crée un nouveau processus à chaque fois,
il faudrait terminer le processus avant d'en lancer un autre.

J'ai tendance à utiliser os.command aussi, mais il semble que ce ne soit plus la méthode préconisée.
subprocess serait à préférer

Voici une utilisation possible

process = subprocess.Popen(["vlc", "01 Blur - Tender.mp3"])

Puis, avant de lancer un nouveau morceau

process.terminate()



A noter que ça ne fonctionne que si la commande n'est pas lancée dans un shell (voir paramètre shell)

En ligne

#3 09-12-2020 21:42:42

cyrille
CA Debian-Facile
Lieu : Nowhere
Distrib. : SID + FreeBSD. Stable sur serveurs.
(G)UI : Xfce/Openbox
Inscription : 21-06-2020
Site Web

Re : [python] soucis de cache lors de la lecture d'un fichier son

Honte à moi,
J'avais pas vu que j'avais décommenté une ligne dans le reste de mon code qui relançait une ancienne entrée.
Donc oui j'avais beau essayé de chercher au niveau des threads mais l'erreur etait ailleurs.
DOnc résolu wink
Désolé de la pollution ... pas les yeux en face des trous ...

Dernière modification par cyrille (09-12-2020 21:53:21)


"Ils ne me comprennent point, je ne suis pas la bouche qu’il faut à ces oreilles."

Association Debian-Facile | Les cahiers du débutant | ISO Debian-FacilePage perso. sur #df

Hors ligne

#4 10-12-2020 00:17:45

David5647
Membre
Distrib. : Debian Sid
Noyau : 5.15.0-2-amd64
(G)UI : i3wm + des bouts de kde
Inscription : 27-08-2017

Re : [python] soucis de cache lors de la lecture d'un fichier son

tiens, au passage, un truc que j'ai découvert tardivement en python : les f-string .
ça :

file =  "sons/" + ogg + '.mp3'

c'est pareil que ça:

file =  "sons/{}.mp3".format(ogg)

qui est pareil que ça

file =  f"sons/{ogg}.mp3"


Bien utile pour pas se mélanger avec les espaces

Dernière modification par David5647 (10-12-2020 00:18:16)

En ligne

Pied de page des forums