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 :

erreur module struct


Sujet :

Python

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Par défaut erreur module struct
    Bonjour, en exécutant le code suivant, j'obtiens une erreur que je ne comprend pas.
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import wave, struct
    from time import sleep
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.optimize import curve_fit
     
    def func(x,a,b,c):
        return c * np.exp( -np.power( (x-a)/b, 2) )
     
    plt.ion()   # utilise pyplot en interactif
     
    # Ouverture du fichier wav a decrypter
    wav_original = wave.open("son.wav",'rb')
     
    nchannels = wav_original.getnchannels()     # Returns number of audio channels (1 for mono, 2 for stereo)
    framerate = wav_original.getframerate()     # Returns sampling frequency
    nframes   = wav_original.getnframes()       # Returns number of audio frames
     
    # Decouper le fichier en plusieurs parties (une note par partie)
    frequences, freq_gauss = [], []
    larg_frame = 2500
    for posi in range(0,nframes,larg_frame):
     
        # Sequence contenant une note
        wav_original.setpos(posi)
        donnee = wav_original.readframes(larg_frame)
        data = struct.unpack('%sh' % (larg_frame * nchannels), donnee)
     
        # Transformee de Fourier
        w     = np.fft.fft(data)
        sig   = np.real(w * w.conjugate())
        freqs = np.fft.fftfreq(len(w)) * framerate
     
        # Estimation de la frequence
        idx = np.argmax(sig)
        f0, maxi = np.abs(freqs[idx]), sig[idx]
        frequences.append( f0 )
     
        # Ajustement par une gaussienne
        ind = np.where( np.abs(freqs - f0) < 20 )
        popt, pcov = curve_fit( func, freqs[ind], sig[ind]/maxi, p0=[f0,1,1] )
        a, b, c = popt
        freq_gauss.append(a)
     
        # Affichage
        plt.plot( freqs[ind], sig[ind], 'o')
        fnew = np.linspace( freqs[ind][0], freqs[ind][-1], 512)
        plt.plot( fnew, maxi * func(fnew,a,b,c), 'r')
        plt.draw() ; sleep(2) ; plt.clf()
     
    wav_original.close()
     
    for res in (frequences,freq_gauss):
        print(np.round(res, 0))
    Voici l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "C:\Users\axel.ch\Desktop\Python cryptage son\reconnaissance frequence son.py", line 27, in <module>
        data = struct.unpack('%sh' % (larg_frame * nchannels), donnee)
    struct.error: unpack requires a bytes object of length 5000
    Pouvez-vous m'aider, je ne trouve rien sur Internet pour régler le problème, merci de votre aide.

  2. #2
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par stinng Voir le message
    Voici l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "C:\Users\axel.ch\Desktop\Python cryptage son\reconnaissance frequence son.py", line 27, in <module>
        data = struct.unpack('%sh' % (larg_frame * nchannels), donnee)
    struct.error: unpack requires a bytes object of length 5000
    C'est typiquement l'erreur (exception) récupérée quand la taille ne correspond pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> struct.unpack('42s', 'developpez')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    struct.error: unpack requires a string argument of length 42
    >>>
    "donnee" ne fait pas larg_frame * nbchannels * 2 (h de '%sh' pour unsigned short) octets

    (et pourquoi le '%s' quand l'argument est, à l'évidence, un entier ?)

  3. #3
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Par défaut
    Merci de ta réponse, pour tout vous dire, je ne suis pas l'auteur de ce code et j'essaye de l'exécuter pour justement apprendre à me servir de ces modules. Comment puis-je resoudre le problème? Je ne sais pas pourquoi il y a '%s' non plus

  4. #4
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par stinng Voir le message
    Merci de ta réponse, pour tout vous dire, je ne suis pas l'auteur de ce code et j'essaye de l'exécuter pour justement apprendre à me servir de ces modules. Comment puis-je resoudre le problème? Je ne sais pas pourquoi il y a '%s' non plus
    Faudrait voir (debugger ou print (d'un len ? je ne sais pas quel est le type de donnee) bien placé) ce que "donnee" (ligne 26) a dans le ventre. struct.unpack s'attend à trouver un buffer de larg_frame * nchannels entiers sur 2 octets

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Par défaut
    voici ce que donne 'donnee'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b'\x80\x84\x89\x8e\x92\x97\x9c\xa0\xa5\xaa\xae\xb2\xb7\xbb\xbf\xc3\xc7\xcb\xcf\xd3\xd6\xda\xdd\xe0\xe3\xe6\xe9\xeb\xee\xf0\xf2\xf4\xf6\xf8\xf9\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xf9\xf8\xf6\xf5\xf3\xf0\xee\xec\xe9\xe6\xe4\xe1\xdd\xda\xd7\xd3\xcf\xcc\xc8\xc4\xc0\xbc\xb7\xb3\xaf\xaa\xa6\xa1\x9d\x98\x93\x8f\x8a\x85\x80|wrmid_[VRMIEA<851-)&#\x1f\x1c\x1a\x17\x14\x12\x0f\r\x0b\t\x08\x06\x05\x03\x02\x02\x01\x00\x00\x00\x00\x00\x01\x01\x02\x03\x04\x05\x07\x08\n\x0c\x0e\x10\x13\x15\x18\x1b\x1e!$(+/37:?CGKPTY]bfkpty~\x83\x87\x8c\x91\x96\x9a\x9f\xa4\xa8\xad\xb1\xb5\xba\xbe\xc2\xc6\xca\xce\xd1\xd5\xd8\xdc\xdf\xe2\xe5\xe8\xeb\xed\xef\xf2\xf4\xf6\xf7\xf9\xfa\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xfa\xf8\xf7\xf5\xf3\xf1\xef\xed\xea\xe7\xe4\xe1\xde\xdb\xd8\xd4\xd1\xcd\xc9\xc5\xc1\xbd\xb9\xb4\xb0\xac\xa7\xa3\x9e\x99\x95\x90\x8b\x87\x82}xtojea\\XSOJFB>:62.+\'$!\x1d\x1a\x18\x15\x12\x10\x0e\x0c\n\x08\x06\x05\x04\x03\x02\x01\x01\x00\x00\x00\x00\x01\x01\x02\x03\x04\x05\x06\x08\n\x0b\r\x10\x12\x15\x17\x1a\x1d #\'*.159=AFJNSW\\`ejnsx|\x81\x86\x8b\x8f\x94\x99\x9d\xa2\xa7\xab\xb0\xb4\xb8\xbc\xc1\xc5\xc9\xcc\xd0\xd4\xd7\xdb\xde\xe1\xe4\xe7\xea\xec\xef\xf1\xf3\xf5\xf7\xf8\xfa\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xff\xfe\xfd\xfd\xfc\xfa\xf9\xf7\xf6\xf4\xf2\xf0\xed\xeb\xe8\xe5\xe2\xdf\xdc\xd9\xd5\xd2\xce\xca\xc6\xc2\xbe\xba\xb6\xb2\xad\xa9\xa4\xa0\x9b\x96\x92\x8d\x88\x83\x7fzuplgb^YUPLGC?;73/,(%"\x1e\x1b\x18\x16\x13\x11\x0e\x0c\n\t\x07\x05\x04\x03\x02\x01\x01\x00\x00\x00\x00\x00\x01\x02\x02\x03\x04\x06\x07\t\x0b\r\x0f\x11\x14\x16\x19\x1c\x1f"&)-048<@DHMQVZ_chmqv{\x80\x84\x89\x8e\x93\x97\x9c\xa1\xa5\xaa\xae\xb3\xb7\xbb\xbf\xc3\xc7\xcb\xcf\xd3\xd6\xda\xdd\xe0\xe3\xe6\xe9\xeb\xee\xf0\xf2\xf4\xf6\xf8\xf9\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xf9\xf8\xf6\xf4\xf3\xf0\xee\xec\xe9\xe6\xe3\xe0\xdd\xda\xd7\xd3\xcf\xcc\xc8\xc4\xc0\xbb\xb7\xb3\xaf\xaa\xa6\xa1\x9c\x98\x93\x8e\x8a\x85\x80{wrmhd_[VRMIE@<841-)&#\x1f\x1c\x19\x17\x14\x12\x0f\r\x0b\t\x07\x06\x05\x03\x02\x02\x01\x00\x00\x00\x00\x00\x01\x01\x02\x03\x04\x05\x07\x08\n\x0c\x0e\x11\x13\x16\x18\x1b\x1e!%(+/37;?CGKPTY]bgkpuy~\x83\x88\x8c\x91\x96\x9b\x9f\xa4\xa8\xad\xb1\xb6\xba\xbe\xc2\xc6\xca\xce\xd2\xd5\xd9\xdc\xdf\xe2\xe5\xe8\xeb\xed\xef\xf2\xf4\xf6\xf7\xf9\xfa\xfb\xfc\xfd\xfe\xff\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xfa\xf8\xf7\xf5\xf3\xf1\xef\xec\xea\xe7\xe4\xe1\xde\xdb\xd8\xd4\xd1\xcd\xc9\xc5\xc1\xbd\xb9\xb4\xb0\xac\xa7\xa2\x9e\x99\x95\x90\x8b\x86\x82}xsojea\\WSOJFB>:62.*\'$ \x1d\x1a\x17\x15\x12\x10\x0e\x0c\n\x08\x06\x05\x04\x03\x02\x01\x01\x00\x00\x00\x00\x01\x01\x02\x03\x04\x05\x06\x08\n\x0c\x0e\x10\x12\x15\x17\x1a\x1d #\'*.259=BFJNSW\\`ejnsx}\x81\x86\x8b\x90\x94\x99\x9e\xa2\xa7\xab\xb0\xb4\xb8\xbd\xc1\xc5\xc9\xcd\xd0\xd4\xd7\xdb\xde\xe1\xe4\xe7\xea\xec\xef\xf1\xf3\xf5\xf7\xf8\xfa\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xff\xfe\xfd\xfc\xfb\xfa\xf9\xf7\xf6\xf4\xf2\xf0\xed\xeb\xe8\xe5\xe2\xdf\xdc\xd9\xd5\xd2\xce\xca\xc6\xc2\xbe\xba\xb6\xb1\xad\xa8\xa4\x9f\x9b\x96\x91\x8d\x88\x83~zupkgb]YTPLGC?;73/,(%!\x1e\x1b\x18\x16\x13\x11\x0e\x0c\n\t\x07\x05\x04\x03\x02\x01\x01\x00\x00\x00\x00\x00\x01\x02\x02\x03\x05\x06\x07\t\x0b\r\x0f\x11\x14\x16\x19\x1c\x1f"&)-048<@DIMQVZ_dhmrv{\x80\x85\x89\x8e\x93\x98\x9c\xa1\xa5\xaa\xae\xb3\xb7\xbb\xbf\xc4\xc8\xcb\xcf\xd3\xd6\xda\xdd\xe0\xe3\xe6\xe9\xec\xee\xf0\xf2\xf4\xf6\xf8\xf9\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xf9\xf8\xf6\xf4\xf2\xf0\xee\xec\xe9\xe6\xe3\xe0\xdd\xda\xd6\xd3\xcf\xcb\xc8\xc4\xbf\xbb\xb7\xb3\xae\xaa\xa5\xa1\x9c\x98\x93\x8e\x89\x85\x80{vrmhd_ZVQMID@<840-)&"\x1f\x1c\x19\x17\x14\x11\x0f\r\x0b\t\x07\x06\x05\x03\x02\x02\x01\x00\x00\x00\x00\x00\x01\x01\x02\x03\x04\x05\x07\x08\n\x0c\x0e\x11\x13\x16\x18\x1b\x1e!%(,/37;?CGLPTY]bgkpuz~\x83\x88\x8d\x91\x96\x9b\x9f\xa4\xa8\xad\xb1\xb6\xba\xbe\xc2\xc6\xca\xce\xd2\xd5\xd9\xdc\xdf\xe2\xe5\xe8\xeb\xed\xf0\xf2\xf4\xf6\xf7\xf9\xfa\xfb\xfc\xfd\xfe\xff\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xfa\xf8\xf7\xf5\xf3\xf1\xef\xec\xea\xe7\xe4\xe1\xde\xdb\xd7\xd4\xd0\xcd\xc9\xc5\xc1\xbd\xb8\xb4\xb0\xab\xa7\xa2\x9e\x99\x94\x90\x8b\x86\x81}xsnje`\\WSNJFB=952.*\'# \x1d\x1a\x17\x15\x12\x10\x0e\x0c\n\x08\x06\x05\x04\x03\x02\x01\x01\x00\x00\x00\x00\x01\x01\x02\x03\x04\x05\x06\x08\n\x0c\x0e\x10\x12\x15\x17\x1a\x1d $\'*.26:>BFJOSW\\aejosx}\x82\x86\x8b\x90\x95\x99\x9e\xa2\xa7\xab\xb0\xb4\xb9\xbd\xc1\xc5\xc9\xcd\xd0\xd4\xd8\xdb\xde\xe1\xe4\xe7\xea\xec\xef\xf1\xf3\xf5\xf7\xf8\xfa\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xff\xfe\xfd\xfc\xfb\xfa\xf9\xf7\xf6\xf4\xf2\xef\xed\xeb\xe8\xe5\xe2\xdf\xdc\xd9\xd5\xd2\xce\xca\xc6\xc2\xbe\xba\xb6\xb1\xad\xa8\xa4\x9f\x9b\x96\x91\x8c\x88\x83~yupkgb]YTPKGC?;73/+(%!\x1e\x1b\x18\x16\x13\x11\x0e\x0c\n\x08\x07\x05\x04\x03\x02\x01\x01\x00\x00\x00\x00\x00\x01\x02\x02\x03\x05\x06\x07\t\x0b\r\x0f\x11\x14\x17\x19\x1c\x1f#&)-148<@EIMRV[_dhmrw{\x80\x85\x8a\x8e\x93\x98\x9c\xa1\xa6\xaa\xaf\xb3\xb7\xbb\xc0\xc4\xc8\xcc\xcf\xd3\xd6\xda\xdd\xe0\xe3\xe6\xe9\xec\xee\xf0\xf2\xf4\xf6\xf8\xf9\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xf9\xf8\xf6\xf4\xf2\xf0\xee\xeb\xe9\xe6\xe3\xe0\xdd\xda\xd6\xd3\xcf\xcb\xc7\xc3\xbf\xbb\xb7\xb3\xae\xaa\xa5\xa1\x9c\x97\x93\x8e\x89\x84\x80{vqmhc_ZVQMHD@<840-)&"\x1f\x1c\x19\x16\x14\x11\x0f\r\x0b\t\x07\x06\x04\x03\x02\x02\x01\x00\x00\x00\x00\x00\x01\x01\x02\x03\x04\x05\x07\t\n\x0c\x0e\x11\x13\x16\x18\x1b\x1e"%(,/37;?CGLPUY^bglpuz\x7f\x83\x88\x8d\x91\x96\x9b\x9f\xa4\xa9\xad\xb1\xb6\xba\xbe\xc2\xc6\xca\xce\xd2\xd5\xd9\xdc\xdf\xe2\xe5\xe8\xeb\xed\xf0\xf2\xf4\xf6\xf7\xf9\xfa\xfc\xfd\xfd\xfe\xff\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xfa\xf8\xf7\xf5\xf3\xf1\xef\xec\xea\xe7\xe4\xe1\xde\xdb\xd7\xd4\xd0\xcc\xc9\xc5\xc1\xbd\xb8\xb4\xb0\xab\xa7\xa2\x9e\x99\x94\x8f\x8b\x86\x81|xsnje`\\WSNJFA=952.*\'# \x1d\x1a\x17\x15\x12\x10\x0e\x0b\n\x08\x06\x05\x04\x03\x02\x01\x01\x00\x00\x00\x00\x01\x01\x02\x03\x04\x05\x06\x08\n\x0c\x0e\x10\x12\x15\x18\x1a\x1d $\'+.26:>BFJOSX\\aejosx}\x82\x87\x8b\x90\x95\x99\x9e\xa3\xa7\xac\xb0\xb4\xb9\xbd\xc1\xc5\xc9\xcd\xd1\xd4\xd8\xdb\xde\xe1\xe4\xe7\xea\xed\xef\xf1\xf3\xf5\xf7\xf8\xfa\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xfa\xf9\xf7\xf6\xf4\xf2\xef\xed\xeb\xe8\xe5\xe2\xdf\xdc\xd8\xd5\xd1\xce\xca\xc6\xc2\xbe\xba\xb5\xb1\xad\xa8\xa4\x9f\x9a\x96\x91\x8c\x88\x83~yupkfb]YTPKGC?;73/+($!\x1e\x1b\x18\x15\x13\x10\x0e\x0c\n\x08\x07\x05\x04\x03\x02\x01\x01\x00\x00\x00\x00\x00\x01\x02\x02\x03\x05\x06\x07\t\x0b\r\x0f\x12\x14\x17\x19\x1c\x1f#&)-148<@EIMRV[_dimrw{\x80\x85\x8a\x8e\x93\x98\x9d\xa1\xa6\xaa\xaf\xb3\xb7\xbc\xc0\xc4\xc8\xcc\xcf\xd3\xd7\xda\xdd\xe0\xe3\xe6\xe9\xec\xee\xf0\xf3\xf5\xf6\xf8\xf9\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xf9\xf8\xf6\xf4\xf2\xf0\xee\xeb\xe9\xe6\xe3\xe0\xdd\xda\xd6\xd3\xcf\xcb\xc7\xc3\xbf\xbb\xb7\xb2\xae\xaa\xa5\xa0\x9c\x97\x93\x8e\x89\x84\x80{vqmhc_ZVQMHD@<840,)&"\x1f\x1c\x19\x16\x14\x11\x0f\r\x0b\t\x07\x06\x04\x03\x02\x01\x01\x00\x00\x00\x00\x00\x01\x01\x02\x03\x04\x06\x07\t\n\x0c\x0f\x11\x13\x16\x19\x1b\x1e"%(,037;?CHLPUY^bglpuz\x7f\x83\x88\x8d\x92\x96\x9b\xa0\xa4\xa9\xad\xb2\xb6\xba\xbe\xc3\xc7\xca\xce\xd2\xd6\xd9\xdc\xdf\xe3\xe5\xe8\xeb\xed\xf0\xf2\xf4\xf6\xf7\xf9\xfa\xfc\xfd\xfd\xfe\xff\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xfa\xf8\xf7\xf5\xf3\xf1\xef\xec\xea\xe7\xe4\xe1\xde\xdb\xd7\xd4\xd0\xcc\xc8\xc5\xc0\xbc\xb8\xb4\xaf\xab\xa7\xa2\x9d\x99\x94\x8f\x8b\x86\x81|xsnie`[WRNJEA=951.*\'# \x1d\x1a\x17\x15\x12\x10\r\x0b\n\x08\x06\x05\x04\x03\x02\x01\x01\x00\x00\x00\x00\x01\x01\x02\x03\x04\x05\x07\x08\n\x0c\x0e\x10\x12\x15\x18\x1b\x1d!$\'+.26:>BFJOSX\\afjotx}\x82\x87\x8b\x90\x95\x9a\x9e\xa3\xa7\xac\xb0\xb5\xb9\xbd\xc1\xc5\xc9\xcd\xd1\xd4\xd8\xdb\xde\xe2\xe5\xe7\xea\xed\xef\xf1\xf3\xf5\xf7\xf9\xfa\xfb\xfc\xfd\xfe\xfe\xff\xff\xff\xff\xfe\xfe\xfd\xfc\xfb\xfa\xf9\xf7\xf5\xf4\xf2\xef\xed\xea\xe8\xe5\xe2\xdf\xdc\xd8\xd5\xd1\xce\xca\xc6\xc2\xbe\xb9\xb5\xb1\xac\xa8\xa3\x9f\x9a\x96\x91\x8c\x87\x83~ytpkfb]XTOKGC>:63/+($!\x1e\x1b\x18\x15\x13\x10\x0e\x0c\n\x08\x07\x05\x04\x03\x02\x01\x01\x00\x00\x00\x00\x00\x01\x02\x02\x03\x05\x06\x08\t\x0b\r\x0f\x12\x14\x17'
    il faudrait que je convertisse ca en un nombre et je ne comprend pas trop comment je pourrais faire.

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Par défaut
    Je cherche en fait à partir d'un fichier wav d'être capable d'extraire toutes les fréquences du fichiers et d'en faire une liste.
    Donc si vous avez d'autre solution que l'utilisation de ce programme, merci de m'en avertir.

  7. #7
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut

    essaye en remplaçant %sh par %dh

  8. #8
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Par défaut
    Cela ne change rien au message d'erreur.

  9. #9
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = struct.unpack('%dh' % (larg_frame * nchannels), donnee[:larg_frame*nchannels*2])
    et comme ça ?

  10. #10
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Par défaut
    Cela donne toujours la même erreur mais je me demande si ce n'est pas dû au fichier car avec un autre fichier cela a marché. J'ai donc testé plusieurs fichiers cependant cela a fonctionné une seule fois.

  11. #11
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Par défaut
    larg_frame est égal à 2500 et nchannels à 1 si cela peut aider

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par stinng Voir le message
    Cela donne toujours la même erreur mais je me demande si ce n'est pas dû au fichier car avec un autre fichier cela a marché. J'ai donc testé plusieurs fichiers cependant cela a fonctionné une seule fois.
    Relisez votre code avec larg_frame déclaré comme constante = 2500, çà ne fonctionnera que pour certains fichiers.

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

  13. #13
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Par défaut
    ah oui, donc il faut que je donne une valeur spécifique de larg_frame pour chaque fichier. quelle valeur identifiable dans chaque fichier puis-je donner?

  14. #14
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonjour,

    larg_frame peut rester à 2500, c'est la portion de vous souhaitez récupérer, du moment qu'il y a suffisamment d'octets je ne vois aucun problème à ce que ce soit fixe.

    for posi in range(0, nframes, larg_frame):

    Se charge bien de segmenter les portions donc aucun problème là-dedans.

    Le seul risque est de perdre la dernière portion qui ne fait pas 2500 octets qui ne sera pas extraite par la boucle, vérifiable avec le cas suivant : nframes % larg_frame

    L'erreur qu'il vous est renvoyé par l'opération struct :
    "unpack requires a bytes object of length 5000"

    vient du fait que votre extraction s'attend à avoir au moins 5000 octets et non 2500 !

    len(donnee) fait bien 2500 octets avec l'opération suivante :
    donnee = wav_original.readframes(larg_frame)

    donc l'erreur se trouve au niveau des éléments to unpack.

    '%sh' % (larg_frame * nchannels)
    donne 2500h

    Et si on regarde le manuel : docs.python.org/3.4/library/struct.html#format-characters

    h est un signed short dont la taille (standard) est de 2 octets, d'où les 5000 octets attendus.

    Si votre but est bien d'extraire des éléments de 2 octets (16 bits) alors il y aura 2 fois moins d'éléments que d'octets contenu dans donnee :
    "{}h".format(larg_frame // 2)

    J'ai retiré nchannels de votre formule ne comprenant pas le lien avec cette extraction qui dépend uniquement de larg_frame

    ce qui va donner '1250h'

    et ceci va fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = struct.unpack("{}h".format(larg_frame // 2), donnee)
    len(data): 1250
    type(data): <class 'tuple'>
    data[i] aura une valeur comprise entre -32768 et 32767

    Je ne connais pas bien le format WAVE mais si tous les canaux sont contenus dans donnee alors il faut extraire les canaux en même temps qu'on extrait les échantillons.

    Mon exemple risque de ne fonctionner qu'avec un seul canal.

    Votre problème est plus d’aspect sémantique que syntaxique.

  15. #15
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 72
    Par défaut
    merci beaucoup cela fonctionne. Maintenant je n'obtiens pas les bonnes fréquences mais ce n'est pas le sujet de ce topic donc je le marque comme résolu.

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par stinng Voir le message
    ah oui, donc il faut que je donne une valeur spécifique de larg_frame pour chaque fichier. quelle valeur identifiable dans chaque fichier puis-je donner?
    Tout dépend de ce que vous voulez lire.
    Si vous voulez lire:
    - toutes les "frames", il suffit d'écrire "donnee = wav_original.readframes(wav_original.getnframes())": pas besoin de boucle "for".
    - par paquets de "larg_frame" ou les premières "larg_frame", vous avez à gérer une condition aux limites car le nombre de frames n'a pas de raison d'être multiple de "larg_frame".

    Reste que la taille des frames est nchannels * samplewidth ces valeurs sont aussi spécifiques à chaque fichier et... écrire "struct.unpack('%sh' % ...)" suppose que samplewidth est 2 bytes alors qu'il peut être aussi 1, 3 ou 4.

    In fine, "struct.unpack" peut tomber en marche sans que vous récupériez les données attendues.

    Dans tous les cas, il faut faut un jeu de fichiers .wav "connus" vous permettant de vérifier que vous traitez proprement les différentes possibilités.
    Il faut aussi que vous passiez un peu de temps à étudier le format .WAV, voir comment la bibliothèque wave vous permet d'accéder aux différentes informations et aussi comment utiliser struct ou array, pour transformer ces bytes en nombres.

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

  17. #17
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2017
    Messages : 1
    Par défaut
    Bonjour,
    Je suis également intéressé par ce code.
    Mon but est d'enregistrer un son de xylophone de quelconque durée et dans extraire les fréquence afin de savoir qu'elle note la personne à jouée.
    Je crois comprendre que ce code est fait pour un morceaux de seulement 1sec. Est il possible de l'adapter pour un son de longueur quelconque et d'ordre de note quelconque ?
    Quand j'essaye de le faire marcher avec un autre fichier wav il me dit:
    ValueError: array must not contain infs or NaNs

    Je ne comprend pas bien si quelqu'un pourrait m'aider.
    De plus, si quelqu'un pourrait m'expliquer ce que c'est que les "frame" exactement ca serait super cool!

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

Discussions similaires

  1. Erreur module : impossible d'accèder au code VBA
    Par naci77 dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/06/2008, 10h05
  2. [py2exe] erreur module zipextimporter
    Par nougat dans le forum Py2exe
    Réponses: 1
    Dernier message: 30/08/2007, 21h06
  3. Erreur module introuvable
    Par fafabzh6 dans le forum VBA Access
    Réponses: 6
    Dernier message: 24/08/2007, 15h17
  4. Erreur Module pour empecher le Shift (SetBypassProperty)
    Par lars528 dans le forum Sécurité
    Réponses: 2
    Dernier message: 19/01/2007, 08h50
  5. Erreur module rtl60.bpl / vcl60.bpl
    Par say dans le forum C++Builder
    Réponses: 15
    Dernier message: 11/05/2005, 16h35

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