IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

Incrémentation de variables


Sujet :

wxPython

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut Incrémentation de variables
    Bonjour,

    Je tente désespérément de réaliser un petit programme me permettant de lire successivement des fichier .wav avec wx.media.

    La liste de mes titres est stockée dans un dictionnaire de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dico_1 = {0:'son0', 1:'son1', 2:'son2'}
    dico_2 = {0:'son0.wav', 1:'son1.wav', 2:'son2.wav'}
    L'interface graphique est faite avec wx.Python. Un wx.Button permet de lancer la fonction OnPlay(). La fonction OnLoad() est chargée dès l'ouverture du programme. La fonction Suivant() doit permettre le changement de piste. (c'est ici que j'ai un problème)

    Voici le code qui correspond:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    def OnLoad(self):    
            dico_1[0] = wx.media.MediaCtrl(self.conteneur, -1)
            dico_1[1] = wx.media.MediaCtrl(self.conteneur,-1)
            dico_1[2] = wx.media.MediaCtrl(self.conteneur,-1)
            file1 = dico_1[0].Load
            file2 = dico_1[1].Load
            file3 = dico_1[2].Load
            file1(dico_2[0])
            file2(dico_2[1])
            file3(dico_2[2])
     
        def OnPlay(self,evt):
            dico_1[0].Play()
            self.Bind(wx.media.EVT_MEDIA_FINISHED, self.Comparaison)
     
     
        def Comparaison(self,evt):
            dico_1[1].Play()
    En fait j'aimerai pouvoir faire en sorte que dans Comparaison() le prochain fichier lancé soit celui directement après celui joué (donc celui qui lance l'évènement EVT_MEDIA_FINISHED.

    Dans le cas actuel, mon code lance dico_2[0] -dans OnPlay()-, puis dico_2[1] en boucle...

    D'avance merci de votre aide

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 889
    Points : 7 241
    Points
    7 241
    Par défaut
    Tu te compliques bien la vie je trouve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for mp3 in liste_mp3 :
        commande='mplayer %s' %(mp3)
        os.system(commande)
    C'est un exemple, à toi de le placer dans ton code.

    mplayer est un programme sous linux, mais tu peux utiliser le meme genre de code avec wxmedia je suppose, meme si je ne le connais pas.

    ton mp3 suivant dans le code que je t'ai donné sera executé et ainsi de suite.

    Si tu veux trier tes mp3 il suffit d'utiliser la fonction de tri sur une liste.

    Pourquoi faire simple quand on peut faire compliqué?


  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    En ce qui concerne l'instruction for... in..., j'avais effectivement prévu de l'utiliser. Le problème est que dans mon cas (et je ne sais pour quelle raison), il n'y a que le dernier son qui est joué...

    La seule solution que j'ai trouvé est de dire au programme de jouer le premier titre de la liste, puis une fois celui-ci terminé, le deuxième...

    Pour cela il me faut donc mettre en place un compteur...
    Pour le moment je le fais ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def OnLoad(self):
            npiste = open('piste.txt', 'r')
            t = npiste.read()
            n = int(t)
            npiste.close()
            self.son.Load(liste_music[n])
            nouveau = n + 1
            npiste = open('piste.txt','w')
            npiste.write(str(nouveau))
            npiste.close()
    C'est peut-être compliqué mais à priori ça marche, donc...

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 84
    Points : 86
    Points
    86
    Par défaut
    Bonjour,

    Pour quoi tu insère pas directement une boucle While dans ton Onload().

    Tu initialise un compteur i.
    Puis, je vais peut être me faire corriger mais tu fais compter le nombre de fichiers que tu as dans ton dico, ou par fonction, ca existe sans doute, tu met un while i < Fonction(dico), ou ton nombre récupérer et tu fais lire :
    dico_1[i].Play(). Après tu dois le faire en boucle ceci?

    Après c'est à tester mais je pense que tant que ton morceau est pas fini le prog ne continue pas, une fois terminé tu incrémentes. Voila si ca peut t'aider à transformer ton prog. Par contre le coup de la liste de lecture c'est peut être pas mal aussi.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    J'avais effectivement penser à ceci. J'ai du d'ailleurs déjà faire un essai et si j'ai bonne mémoire cela ne me lance que le dernier morceau. Mais il faut que je vérifie et que je ré-essaye car j'ai un gros doute.

    @+

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 889
    Points : 7 241
    Points
    7 241
    Par défaut
    J'avais effectivement penser à ceci. J'ai du d'ailleurs déjà faire un essai et si j'ai bonne mémoire cela ne me lance que le dernier morceau. Mais il faut que je vérifie et que je ré-essaye car j'ai un gros doute.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> dict={1:"fichier1.mp3", 2:"fichier2.mp3"}
    >>> len(dict)
    2
    Il est évident que tu peux connaitre la longueur des termes de ton dictionnaire, puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> for i in range(len(dict)):
    ...    print dict[i+1]
    ...    
     
    fichier1.mp3
    fichier2.mp3
    Je ne vois pas ce que tu ne peux pas faire avec python

  7. #7
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Je ne vois pas ce que tu ne peux pas faire avec python
    Je sais très bien qu'avec Python on peut quasiment tout faire...
    Mais au risque de me répéter, j'ai déjà pensé à cette solution. Le problème c'est que là, il n'y a que le dernier son qui est joué, car c'est celui-ci qui est chargé.

    Des solutions doivent certainement exister mais à priori beaucoup plus compliquées que celle utilisée avec le fichier txt. En tout cas pour le moment je vais continuer mon programme avec l'utilisation du fichier txt et ensuite je chercherai une autre solution.

  8. #8
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 889
    Points : 7 241
    Points
    7 241
    Par défaut
    Bon si j'utilise tes dico du 1er post :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/env python
    #_*_ coding:utf-8 _*_
     
    def lecture(piste):
        commande='mplayer %s' % (piste)
        os.system(commande)
     
    dico_1 = {0:'son0.wav', 1:'son1.wav', 2:'son2.wav'}
     
    for nb in range(len(dico_1)):
    	lecture(dico_1[nb])
    Pour un fichier texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/env python
    #_*_ coding:utf-8 _*_
    
    def lecture(piste):
        commande='mplayer %s' % (piste)
        os.system(commande)
    
    f=open('pistes.txt', 'r').readlines()
    
    for music in f:
    	lecture(music)
    A toi d'adapter

  9. #9
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Sauf erreur de ma part, je pense qu'il y a un petit malentendu.

    Le code que tu me donnes doit permettre de lancer et d'écouter des sons dans un lecteur audio (mplayer). Si je comprends bien mplayer doit être à linux ce que windows media player est à windows...

    Moi ce que je veux faire c'est créer un lecteur audio...

    Désolé si je n'ai pas été assez précis.

    Pour créer ce lecteur j'utilise wxMedia qui est inclus dans wxPython...

  10. #10
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 889
    Points : 7 241
    Points
    7 241
    Par défaut
    A toi d'adapter
    Je croyais m'être fait comprendre pourtant

    Le code que tu me donnes doit permettre de lancer et d'écouter des sons dans un lecteur audio (mplayer). Si je comprends bien mplayer doit être à linux ce que windows media player est à windows...
    En effet, ce n'est pas le résultat que tu attends et heureusement car le but de ce forum est de te donner des idées, des pistes et non la réponse

    Moi ce que je veux faire c'est créer un lecteur audio...
    J'avais bien compris, et je continue à te faire comprendre qu'il faut que tu regardes du côté des itérateurs.

    Je t'explique aussi comment faire executer une commande en lisant ligne par ligne dans un fichier texte.

    Désolé si je n'ai pas été assez précis.
    En tout cas suffisament pour moi, par contre désolé de ne pas te donner le code entier de ce que tu recherches

    Pour créer ce lecteur j'utilise wxMedia qui est inclus dans wxPython...
    Encore une fois j'avais bien compris, il suffit de remplacer mplayer par un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def lecture(piste):
        piste.Load
    non

    Ce qui fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/env python
    #_*_ coding:utf-8 _*_
     
    def lecture(piste):
        piste.Load
        piste.Play()
     
    f=open('pistes.txt', 'r').readlines()
     
    for music in f:
    	lecture(music)
    Enfin à quelques modif prêt

    Sinon ça serait pas marrant

  11. #11
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    D'un point de vue théorique je suis à 110% d'accord avec toi et dans mon idée de base c'est ce que je voulais faire...

    Le problème c'est que je n'arrive toujours pas à faire fonctionner cette idée avec wxmedia et là ...

    Par contre comme il n'y a que les c.n qui ne changent pas d'avis, j'ai ré-essayé avec pygame (que j'avais laissé de coté d'une part par manque à première vue d'outils et d'autre part à cause des problèmes qu'il risque de poser lors de la compilation...)

    Et là ça marche.

    Je n'arrive toujours pas à comprendre pourquoi l'instruction for...in... ne marche pas avec wxmedia.

    En tout cas merci pour ton conseil, je vais adapter tout ça avec pygame à mon code.

    Encore merci.

  12. #12
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Ça y est j'ai retrouvé pourquoi j'avais arrêté avec Pygame (ou Pymedia d'ailleurs).

    Pour boucler je dois utiliser l'instruction while de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def OnLoad(self,evt):
        for music in liste_music:
            self.OnPlay(music)
     
    def OnPlay(self, piste):
        pygame.mixer.music.load(piste)
        pygame.mixer.music.play()
        while pygame.mixer.music.get_busy():
            pass
    On OnLoad() correspond au clic de la souris sur un bouton.

    Le problème, c'est qu'en faisant comme cela je bloque le logiciel et ne peux plus agir sur les différents boutons tant que la boucle n'est pas finie, et de ce fait je ne peux pas arrêter le lancement manuellement.

    Il me faut donc trouver une parade...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. incrémenter une variable à chaque clique sur un lien
    Par Piccolo_son dans le forum Langage
    Réponses: 7
    Dernier message: 17/12/2007, 21h56
  2. Incrémenter une variable en CR9
    Par nanouille56 dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 13/02/2007, 15h59
  3. [XSLT] incrémenter une variable
    Par nemya dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/09/2005, 17h12
  4. incrémenter un variable
    Par penelope dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 21/07/2005, 17h49
  5. [débutant][xsl]incrémenter une variable
    Par guitalca dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 01/04/2003, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo