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 :

lecture simultanée audio avec pygame


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 11
    Par défaut lecture simultanée audio avec pygame
    J'essaie actuellement de lire deux audios différents sur deux sorties de mon pc différentes en utilisant le module pygame.
    Cependant, le programme que j'ai écrit (en m'inspirant du code proposé ici : https://stackoverflow.com/questions/...nels-in-pygame ) ne me permet d'entendre les deux audios sur une seule sortie et pendant seulement 1-2sec au lieu des 20sec des audios.

    Auriez-vous des idées s'il vous plait?

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import pygame
     
    pygame.mixer.init(frequency = 44100, size = -16, channels = 1, buffer = 2**12)
     
    pygame.mixer.set_num_channels(2)
     
    channel1 = pygame.mixer.Channel(0)
    channel2 = pygame.mixer.Channel(1)
     
    Son1= pygame.mixer.Sound('audio1.wav')
    Son2= pygame.mixer.Sound('audio2.wav')
     
    channel1.play(Son1)
    channel2.play(Son2)

  2. #2
    Membre actif
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 143
    Par défaut
    Salut,

    Si tu avais fait une recherche sur le net, tu aurais vite compris que Pygame fonctionne avec une boucle événementielle qu'il faut créer, comme dans ton lien d'ailleurs.

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 11
    Par défaut
    Citation Envoyé par Diablo76 Voir le message
    Salut,

    Si tu avais fait une recherche sur le net, tu aurais vite compris que Pygame fonctionne avec une boucle événementielle qu'il faut créer, comme dans ton lien d'ailleurs.
    Bonjour, merci de ta réponse. Je ne pensais pas que c'était necessaire à pygame... J'ai donc essayé avec la boucle en plus, mais il semble y avoir un problème de séparation des "channels". Mes deux audios sont bien lus, avec la bonne durée, mais sur la meme sortie malgré la définition de "channel1" et "channel2" dans mon code.
    Je ne vois pas pourquoi ceci ne peut pas fonctionner. Une idée?

    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
     
    import pygame
    import time
     
    # initialize pygame.mixer
     
    pygame.mixer.init(frequency = 44100, size = -16, channels = 1, buffer = 2**12) 
    # # init() channels refers to mono vs stereo, not playback Channel object
     
     
    # définition des 2 canaux différents
    channel1 = pygame.mixer.Channel(0)
    channel2 = pygame.mixer.Channel(1)
     
     
    Son1=pygame.mixer.Sound('audio1.wav')
    Son2=pygame.mixer.Sound('audio2.wav')
     
    # plays loop of the audios
     
    channel1.play(Son1, loops = -1)
     
    duration = Son2.get_length() # duration of Son2
    while True: # infinite while-loop
        channel2.play(Son2, loops=-1)
        # pause while-loop for duration of Son2
        time.sleep(duration)

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 211
    Par défaut
    hello,
    si tu peux utiliser autre chose que pygame, peut-être une possibilité ici : How to connect multiple audio output channels for use with PyAudio

    Ami calmant, J.P

  5. #5
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 11
    Par défaut
    Merci beaucoup jurassic pork, cela fait bien ce que je recherche!
    Si jamais quelqu'un a besoin du programme, je précise tout de même que j'ai dû ajouter une boucle en plus à la fin sinon les 2 audios n'étaient joués que 0.5s au lieu de leur durée originale.
    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
    import sounddevice as sd
    import soundfile as sf
    import threading
    from threading import Thread
    import time
     
    # print(sd.query_devices())
     
    Son1= 'audio1.wav'
    Son2= 'audio2.wav'
     
    def audioFunc1():
        audio1 = 'audio1.wav'
        data1, fs1 = sf.read(audio1, dtype='float32')
        sd.play(data1, fs1, device=5)   #speaker 1
     
    def audioFunc2():
        audio2 = 'audio2.wav'
        data2, fs2 = sf.read(audio2, dtype='float32')
        sd.play(data2, fs2, device=6)  #speaker 2
     
    Thread(target = audioFunc1).start()
     
    duration = len(sf.read(Son2)[0]) # duration of Son2
     
    while True: # infinite while-loop
        Thread(target = audioFunc2).start()
        # pause while-loop for duration of Son2
        time.sleep(duration)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Coucou !

    Je viens de tester ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import pygame
     
    pygame.mixer.init()
    pygame.mixer.Channel(0).play(pygame.mixer.Sound(r'D:\Musique\Roddy Ricch - The Box [Official Audio] - 256.mp3'))
    pygame.mixer.Channel(1).play(pygame.mixer.Sound(r'D:\Musique\ALI – LOST IN PARADISE feat. AKLO(Re-edit ver.) - 256.mp3'))
    pygame.time.wait(5000) #wait 5 seconds
    pygame.mixer.Channel(0).stop()
    pygame.mixer.Channel(1).stop()
    Et ça marche
    Dernière modification par Invité ; 07/04/2022 à 23h48.

Discussions similaires

  1. PB lecture "manuelle" d'un CD audio avec W7
    Par Guy_L dans le forum Windows 7
    Réponses: 5
    Dernier message: 12/01/2014, 08h54
  2. Réponses: 1
    Dernier message: 10/05/2011, 15h54
  3. Lecture de mail avec TIdPop3
    Par skywaukers dans le forum Web & réseau
    Réponses: 1
    Dernier message: 06/07/2005, 10h52
  4. [LG]Lecture de fichier avec une adresse internet
    Par forbin dans le forum Langage
    Réponses: 8
    Dernier message: 09/02/2005, 19h00
  5. Réponses: 4
    Dernier message: 23/07/2003, 13h07

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