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

Programmation multimédia/Jeux Python Discussion :

Pygame : Charger un banque de sons


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre expert
    Pygame : Charger un banque de sons
    Bonjour,

    Je souhaite charger dans un tableau, plusieurs effets sonors (Objet Sound de PyGame). Voici mon 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
    15
    16
    17
     
    samples = []
    def loadSamples_event(_sampleFiles):
        pygame.mixer.stop();
        _sampleFiles = _sampleFiles.split(',') <-- Je transforme le JSON passé en argument, en objet de type tableau
        samples = [];
     
        for file in _sampleFiles:
    # Nettoyage de nom de fichier
           file = file.replace('[', '')
           file = file.replace(']', '')
           file = file.replace('"', '')
           try:
               sound = pygame.mixer.Sound(file) <-- me retourne une exception "fichier introuvable"
               samples.append(sound)
           except:
               print("Sample file " + file + " not open.")


    Je passe en argument de cette méthode un chaine JSON (provenant d'un JSON.stringify), que je transforme en un tableau de string (noms des fichiers à charger). Mais mes fichiers sont introuvables, alors qu'après vérification, ma variable "file" est bien renseignée et mes chemins d'accès sont correctement indiqués.

    Avez-vous une idée du problème ? Merci.
    "La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"

  2. #2
    Expert éminent sénior
    Salut,

    Un nom de fichier est soit absolu (et il devrait être trouvé) soit relatif au répertoire de travail (et on peut se tromper).

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

  3. #3
    Membre expert
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Un nom de fichier est soit absolu (et il devrait être trouvé) soit relatif au répertoire de travail (et on peut se tromper).

    - W
    Pour le coup, mes chemins de fichiers sont absolus.

    Voilà la chaine JSON que je passe :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    ["/home/pi/Documents/mes_projets/interface/media/wav/Jingle_Achievement_00.wav","/home/pi/Documents/mes_projets/interface/media/wav/Jingle_Achievement_01.wav","/home/pi/Documents/mes_projets/interface/media/wav/Jingle_Lose_00.wav"]


    Et je récupère bien chaque chemin de fichier dans ma variable "file" ('/home/pi/Documents/mes_projets/interface/media/wav/Jingle_Achievement_00.wav' par exemple). Et les chemins sont corrects. Alors je ne comprend pas pourquoi PyGame ne les trouve pas...
    "La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"

  4. #4
    Expert éminent sénior
    Citation Envoyé par zecreator Voir le message
    Et les chemins sont corrects. Alors je ne comprend pas pourquoi PyGame ne les trouve pas...
    PyGame retourne une exception que vous ne prenez pas la peine de visualiser pour conclure qu'il ne trouve pas le fichier.

    Admettons que pygame ne le trouve pas, un simple open ne devrait pas le trouver non plus. Si tel est le cas, impossible de vérifier à votre place que le chemin correspond bien a un nom de fichier i.e. de vérifier que "les chemins sont corrects".

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

  5. #5
    Membre expert
    Citation Envoyé par wiztricks Voir le message
    PyGame retourne une exception que vous ne prenez pas la peine de visualiser pour conclure qu'il ne trouve pas le fichier.
    Avant de mettre "try ... except";, j'avais bien vu le contenu de l'exception PyGame.voilà à ce qu'elle est :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ["/home/pi/Documents/mes_projets/interface/media/wav/Jingle_Achievement_00.wav","/home/pi/Documents/mes_projets/interface/media/wav/Jingle_Achievement_01.wav","/home/pi/Documents/mes_projets/interface/media/wav/Jingle_Lose_00.wav"]
    /home/pi/Documents/mes_projets/interface/media/wav/Jingle_Achievement_00.wav
    ERROR:websockets.server:Error in connection handler
    Traceback (most recent call last):
      File "/home/pi/.local/lib/python3.7/site-packages/websockets/server.py", line 195, in handler
        await self.ws_handler(self, path)
      File "/home/pi/Documents/mes_projets/interface/python/server.py", line 446, in counter
        await loadSamples_event(data["sampleFiles"], data["callback"])
      File "/home/pi/Documents/mes_projets/interface/python/server.py", line 327, in loadSamples_event
        sound = pygame.mixer.Sound(file)
    pygame.error: Unable to open file '/home/pi/Documents/mes_projets/interface/media/wav/Jingle_Achievement_00.wav'
    "La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"

  6. #6
    Expert éminent sénior
    Salut,

    Vous ne dites rien concernant le retour d'un simple "open".
    En supposant qu'il fonctionne, cherchez un peu sur Internet ce qui remonte avec le message d'erreur "pygame.error: Unable to open file" ou ouvrez la documentation de pygame.mixer pour voir si vous n'avez rien oublié.

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

  7. #7
    Membre expert
    Trouvé ! Sous Python 3, il faut encoder les chaines de caractères des chemins d'accès pour PyGame

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    sound = pygame.mixer.Sound(file.encode())
    "La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"

###raw>template_hook.ano_emploi###