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

Python Discussion :

Continuer une tache pendant l'execution d'une fonction


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Par défaut Continuer une tache pendant l'execution d'une fonction
    Bonjour,

    je suis entrain d'essayer de programmer un player midi en ligne de commande sous linux.

    Voici une partie de code (désolé je débute ;-) )

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    outport = mido.open_output('MIDISPORT 2x2 Anniv:MIDISPORT 2x2 Anniv MIDI 1 28:0')
    songlist = (glob.glob("/home/pi/Documents/song/*.mid"));
     
    def songplay(song):
        with outport as output:
            try:
                midifile = MidiFile(song)
                while True:
                    for message in midifile.play():    
                        output.send(message)
     
            except KeyboardInterrupt:
                print()
                output.reset()     
     
     
    try:
        with mido.open_input('arduino_midi:arduino_midi MIDI 1 20:0') as port:
            for message in port:
                print(message)
                if message.type in ('note_on') and message.note == 36:
                    print(songlist[i])
                    if i == (nbrsong-1):
                        i = 0
                    else:
                        i += 1
                if message.type in ('note_on') and message.note == 37:
                    songplay(songlist[i])
     
                sys.stdout.flush()
    except KeyboardInterrupt:
        pass
    En gros je definit le port d'entre et de sortie midi ..
    Je definit une fonction songplay qui lit le fichier midi en boucle
    et dans le try , j'écout ce qui entre sur le port d'entrée midi ... SI note 36 on change de chanson dans la liste ... si note 37 on lance la fonction songplay ...

    Mon problème , une fois que le fichier midi se lit (quand je suis dans la fonction songplay) , il ne reagit plus à mes entrée midi, il n'interprete plus le code du try ...

    A mon avis c'est une betise et je n'utilise pas les bons truc (try, fonction, with ...) mais je suis perdu

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par Tetsuo30 Voir le message
    Mon problème , une fois que le fichier midi se lit (quand je suis dans la fonction songplay) , il ne reagit plus à mes entrée midi, il n'interprete plus le code du try ...
    Si la lecture du port se fait à chaque itération de la boucle ligne 20, l'itération suivante ne pourra se faire qu'après le retour de la fonction songplay i.e. lorsque la fonction sera terminée.

    En général, la solution est de permettre aux opérations écriture et lecture de se dérouler indépendamment (de façon asynchone) en utilisant des threads et un mécanisme de communication entre les deux.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 8
    Par défaut
    Parfait j'y suis arrivé avec les thread, je ne connaissais pas

    merci

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 23/02/2018, 16h59
  2. Réponses: 8
    Dernier message: 20/05/2011, 16h52
  3. definition d'une tache qui s'execute toutes les secondes
    Par Mokhtar BEN MESSAOUD dans le forum Administration système
    Réponses: 3
    Dernier message: 07/08/2007, 07h19
  4. Rendre une interface inactive pendant l'exécution d'un programme
    Par ploukinet dans le forum Interfaces Graphiques
    Réponses: 7
    Dernier message: 21/05/2007, 16h25
  5. [VBA-E]Pendant l'execution d'une macro
    Par benoue dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/03/2006, 18h28

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