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

Calcul scientifique Python Discussion :

Ecriture de fichiers .wav en python


Sujet :

Calcul scientifique Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut Ecriture de fichiers .wav en python
    Bonjour a tous,
    je suis en classe prépa et j'étudie la distorsion du son pour mes TIPE
    J'essaie donc de créer des fichiers .wav correspondants aux formes sons qui m'intéressent (sinusoides auxquelles on a appliqué un polynôme)
    Tout ca pour dire que je bloque sur la commande "writeframes":

    ->que faut-il lui passer en argument ?
    ->Et comment transformer un tableau de valeurs en ce type d'argument?

    j'ai déja un peu de code mais je n'arrive pas a le faire fonctionner; la partie qui pose probleme est:


    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
    #procédé d'écriture de 'chaine'
     
    chaine = ''
    for n in range (32000):
        part = fnliste[n] 
        #fnliste est un tableau de reels correspondant aux valeurs de la sinusoide
        part = int(part)
        chaine+=chr(127+part)
     
     
    # écriture du fichier wave a partir de 'chaine'
     
    fichwav=wave.open('c:/'+name+'.wav','w')
        fichwav.setparams (1, 1, 11025 , 32000, 'NONE', 'not compressed')
        fichwav.writeframes (chaine)
    fichwav.close()
    Voila si quelqu'un pouvait repondre a une de ces questions, je lui en serait vraiment reconnaissant

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Bonjour,

    est-ce que tu pourrais poster ton message d'erreur, stp?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Je n'ai pas de message d'erreur en utilisant le shell
    Le problème, c'est que le programme ne crée pas du tout de fichier wav, alors qu'il en crée au moins un vide pour le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    wavfile = wave.open('c:/'+name+'.wav','w')
    fichwav.setparams (1, 2, 11025 , 32000, 'NONE', 'not compressed')
    for i in range(long):
        s=fnliste[i]
        vbit=struct.pack('hhl',s)
        wavfile.writeframes(vbit)
    wavfile.close()

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    bonjour,
    ton code provoque des erreurs chez moi:
    - ligne 2: fichwav est inconnu (ce serait plutot wavfile, non?)
    - les options passés à setparams doivent être dans un tuple

    J'ai essayé le code suivant, il produit un fichier wav qui est horrible à ecouter mais qui a l'air de fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import wave
    import random
     
    fnliste = [random.randrange(0, 1200) for i in range(1000000)]
     
    wavfile = wave.open('test.wav','w')
    wavfile.setparams ((1, 2, 11025 , 32000, 'NONE', 'not compressed'))
    for s in fnliste:
        wavfile.writeframes(hex(s))
    wavfile.close()

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Merci beaucoup! si tu as un fichier wave qu'il est possible d'ouvrir, c'est déja un gros progrès. J'essaie de suite d'adapter tout ça à mon programme et je te tiens au courant.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    en utilisant ton programme, mais en définissant fnliste comme une suite de valeurs de sinusoide enregistrées tous les 1/11025 secondes (c'est a dire la fréquence d'échantillonage), j'obtiens un son tres moche^^. la liste est définie comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(1000000):
        snliste.append(int(600*sin (2*pi*freq*(i/freqech))))
    a noter que l'on doit bien avoir des entiers, sinon ca ne marche pas
    Il faut maintenant que je triture la fonction pour avoir un son pur

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Par défaut
    Une autre question...
    dans le code suivant:
    wavfile.writeframes(hex(s))
    La fonction 'hex()' tient-elle compte du signe des entiers?
    Si non, quelle fonction utiliser pour le conserver?

  8. #8
    Membre émérite
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Par défaut
    Python a un interpreteur c'est super utile pour faire des tests....

    Deja la moitié de ta question résolue....

    Donc comme python est logique si tu entres -0x19 pour décoder je pense (Ca veut dire test a faire avec une petite routine sur idle.) que python devrait comprendre.
    [SIZE="2"]Dis moi qui tu suis, je te dirais qui je Hais!
    Heureux est l'étudiant, qui comme la rivière suit son cours sans sortir de son lit

    Mon premier Tutoriel


    A 80% des cas je résouts mon problème en rédigeant une nouvelle discussion, du coup je ne poste que 20% de mes problèmes...

Discussions similaires

  1. Ecriture du flux audio dans un fichier WAV
    Par firepolo dans le forum C++
    Réponses: 6
    Dernier message: 17/10/2012, 10h44
  2. [PYTHON/FORTRAN ( f2py )] Lecture ecriture de fichier
    Par squallmrs dans le forum Interfaçage autre langage
    Réponses: 7
    Dernier message: 28/06/2012, 08h48
  3. Ecriture d'un fichier wav
    Par totoysawa dans le forum Signal
    Réponses: 2
    Dernier message: 22/07/2009, 12h58
  4. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43
  5. [Kylix] jouer un fichier wav avec kilyx
    Par JlouisI dans le forum EDI
    Réponses: 1
    Dernier message: 14/06/2002, 02h05

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