Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur execution programme

Sujet résolu
Anonyme
    14 janvier 2015 à 18:41:55

    Salut les zér0s,

    je viens demandé votre aide car je n'arrive plus à exécuter mon code qui auparavant fonctionné; je n'ai apporté aucune modification et je ne l'ai pas déplacer cependant il ne fonctionne pas.

    Voici l'erreur:

    >>> ================================ RESTART ================================
    >>> 
    Traceback (most recent call last):
      File "L:/ISN/Mini projet 2/lecture_wav1.py", line 8, in <module>
        fichier = wave.open("son_stereo.wav","rb")
      File "C:\Python34\lib\wave.py", line 497, in open
        return Wave_read(f)
      File "C:\Python34\lib\wave.py", line 163, in __init__
        self.initfp(f)
      File "C:\Python34\lib\wave.py", line 128, in initfp
        self._file = Chunk(file, bigendian = 0)
      File "C:\Python34\lib\chunk.py", line 63, in __init__
        raise EOFError
    EOFError
    >>> 

    Merci d'avance pour votre aide

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      14 janvier 2015 à 18:44:57

      Ton fichier wav ne serait pas vide par hasard ?
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        14 janvier 2015 à 19:01:05

        Non il est bel est bien complet j'ai vérifié

        J'ai rien touché je voulais juste réessayer le programme et la ça fonctionne plus alors que mon camarade n'a pas d'erreur

        • Partager sur Facebook
        • Partager sur Twitter
          19 janvier 2015 à 19:54:06

          Salut :), est ce que ton 'son_stereo.wav' est bien dans le même repertoire que ton programme ? Ou dans le même dossier ?

          L'erreur vient peut être de là ;)

          -
          Edité par Koyochi 19 janvier 2015 à 19:54:40

          • Partager sur Facebook
          • Partager sur Twitter
          Je possède maintenant une signature
          Anonyme
            19 janvier 2015 à 22:51:53

            Salut, merci de ta réponse Koyochi, mais le problème vient pas de là, tout est dans le même répertoire, je ne comprend pas :(
            • Partager sur Facebook
            • Partager sur Twitter
              20 janvier 2015 à 7:20:00

              Bon bah.. désolé je ne suis pas vraiment un expert :D je ne vois pas là :(

              Mais je pense que d'autre zer0s trouveront 

              Bonne chance;) !

              • Partager sur Facebook
              • Partager sur Twitter
              Je possède maintenant une signature
                20 janvier 2015 à 9:56:21

                Cette exception est lancée car il y a moins de 4 octets dans ton fichier. Tu dis qu'il n'est pas vide cependant... Alors pour essayer autre chose, fais:

                with open("son_stereo.wav","rb") as fichier:
                
                data = fichier.read()
                print(len(data))
                
                </pre> Et dis-nous quel chiffre ça retourne.

                -
                Edité par Dan737 20 janvier 2015 à 9:57:16

                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  20 janvier 2015 à 18:19:26

                  Ca me retourne ce chiffre : 3230910

                  Et j'ai nouveau une erreur:

                  Traceback (most recent call last):
                    File "L:\ISN\Mini projet 2\lecture_wav1.py", line 20, in <module>
                      canaux = fichier.getnchannels()
                  AttributeError: '_io.BufferedReader' object has no attribute 'getnchannels'



                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    20 janvier 2015 à 18:20:39

                    J'ai un peu modifier le code et maintenant j'ai cette erreur:
                    Traceback (most recent call last):
                      File "L:\ISN\Mini projet 2\lecture_wav1.py", line 45, in <module>
                        nouveauFichier.writeframes(data)
                      File "C:\Python34\lib\wave.py", line 426, in writeframes
                        self.writeframesraw(data)
                      File "C:\Python34\lib\wave.py", line 414, in writeframesraw
                        data = memoryview(data).cast('B')
                    TypeError: memoryview: float object does not have the buffer interface

                    :(
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      20 janvier 2015 à 18:59:18

                      Voici mon code ça sera peut-être plus simple pour vous de m'aider

                      # lecture audio (sortie vers la carte son)
                      
                      import wave
                      import binascii
                      
                      ##############################################
                      ########## LECTURE ET TRAITEMENT DU ##########
                      ##########     FICHIER STEREO       ##########
                      ##############################################
                      
                      tableau = ""
                      canalG = []          #Canal gauche
                      canalD = []          #Canal droit
                      
                      nomFichier = "extrait_stereo_8bits"
                      fichier = wave.open(nomFichier + ".wav","rb")
                      
                      canaux = fichier.getnchannels()
                      print("Nombre de canaux:" ,canaux)
                      
                      frequence = fichier.getframerate()
                      print("Fréquence: ", frequence)
                      
                      echantillons = fichier.getnframes()
                      
                      tableau = fichier.readframes(echantillons)
                      
                      for i in range(0, echantillons):
                          canalG.append(tableau[i] & 0xF0) 
                          canalD.append(tableau[i] & 0x0F)
                          
                      fichier.close()
                      
                      
                      ##############################################
                      ########## CREATION DU FICHIER MONO ##########
                      ##############################################
                      
                      nouveauFichier = wave.open(nomFichier + "_Mono.wav","w")
                      
                      parametres = (1,1,frequence,echantillons,"NONE","not compressed")
                      nouveauFichier.setparams(parametres)    # création de l'en-tête (44 octets)
                      
                      for i in range(0, echantillons):
                          data = (canalG[i]+canalD[i])/2
                          nouveauFichier.writeframes(data)
                      
                      nouveauFichier.close()
                      



                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 janvier 2015 à 21:18:59

                        Essaie comme ceci:

                        !/usr/bin/env python3

                        -- coding: utf8 --

                        lecture audio (sortie vers la carte son)

                        import wave

                        LECTURE ET TRAITEMENT DU
                        FICHIER STEREO

                        nomFichier = "extrait_stereo_8bits" with wave.open(nomFichier + ".wav","rb") as fichier:

                        canaux = fichier.getnchannels()
                        print("Nombre de canaux:" ,canaux)
                         
                        frequence = fichier.getframerate()
                        print("Fréquence: ", frequence)
                         
                        echantillons = fichier.getnframes()
                        
                        tableau = fichier.readframes(echantillons)
                        
                        canalG = tableau[::2]
                        canalD = tableau[1::2]
                        
                        
                        CREATION DU FICHIER MONO

                        with wave.open(nomFichier + "_Mono.wav","wb") as nouveauFichier:

                        parametres = (1,1,frequence,echantillons,"NONE","not compressed")
                        nouveauFichier.setparams(parametres)    # création de l'en-tête (44 octets)
                        
                        data = b''.join( ((left+right)//2).to_bytes(1, byteorder='big') for left, right in zip(canalG, canalD))
                        
                        nouveauFichier.writeframes(data)
                        
                        </pre>

                        Et pour ne pas utiliser trop de mémoire (pas besoin de canalG, canalD) il suffit de remplacer la fin par

                        
                        
                        CREATION DU FICHIER MONO

                        with wave.open(nomFichier + "_Mono.wav","wb") as nouveauFichier:

                        parametres = (1,1,frequence,echantillons,"NONE","not compressed")
                        nouveauFichier.setparams(parametres)    # création de l'en-tête (44 octets)
                        
                        it = iter(tableau)
                        data = b''.join( ((left+right)//2).to_bytes(1, byteorder='big') for left, right in zip(it, it))
                        
                        nouveauFichier.writeframes(data)
                        
                        </pre>

                        -
                        Edité par Dan737 20 janvier 2015 à 21:26:08

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          20 janvier 2015 à 21:24:58

                          Merci cela fonctionne parfaitement :D

                          pourrait-tu juste m'expiquer la logne 38 ? :)

                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 janvier 2015 à 21:33:05

                            Oui bien entendu. Ca revient à faire ceci

                            data = b''
                            for left, right in zip(canalG, canalD):
                            
                            average = (left + right) // 2 #average is an int !!!
                            data += average.to_bytes(1, byteorder='big')
                            
                            </pre> Donc on créé une string de bytes. On prend en même temps les éléments de canalG et canalD. left et right sont des int maintenant! On calcul la moyenne. Mais il nous faut revenir à des bytes. On utilise la méthode to_bytes pour ce faire. On concatène tout ça dans notre variable data.

                            join permet de concaténer de manière plus performante. C'est une méthode commune aux objets de typebytes.

                            -
                            Edité par Dan737 20 janvier 2015 à 21:34:08

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              20 janvier 2015 à 21:35:21

                              Dan737 a écrit:

                              On prend en même temps les éléments de canalG et canalD. left´ et right´ sont des int maintenant!

                              Je ne comprend pas pourquoi on utilise pas canalG et canalD et on les remplaces par left et right :euh:

                              -
                              Edité par Anonyme 20 janvier 2015 à 21:36:50

                              • Partager sur Facebook
                              • Partager sur Twitter
                                20 janvier 2015 à 21:49:07

                                On ne les remplace pas, on itère dessus.

                                a = [0,1,2,3,4,5,6]
                                b = [10, 11, 12, 13, 14, 15, 16]
                                for x, y in zip(a, b):
                                
                                print (x, y)
                                

                                0 10

                                1 11

                                2 12

                                ...

                                </pre>

                                -
                                Edité par Dan737 20 janvier 2015 à 21:49:39

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  20 janvier 2015 à 21:51:41

                                  Ah d'accord :D

                                  Merci beaucoup de ton aider Dan737 :D

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Erreur execution programme

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown