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 d'un fichier wav/analyse sonore


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut lecture d'un fichier wav/analyse sonore
    Bonjour,
    Je dispose d'un fichier .wav et j'aimerais d'abord le convertir en tableau de valeurs afin de pouvoir afficher la "courbe" du du son à l'aide de matplotlib. Et ensuite faire l'analyse des partiels de ce son (fft, etc).
    CJe ne sais pas comment m'y prendre
    Je travaille sur Spyder
    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Peut être commencer par lire les réponses aux posts récents sur le sujet comme celui-ci?

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci, j'avais mal cherché désolé.
    J'ai pu faire de jolies FFT grâce à numpy.
    En fait, pour expliquer plus clairement mon projet, je veux réaliser une analyse/synthèse additive d'une note de piano.


    Un son est composé de partiels(ou harmoniques).
    Ici, ces partiels varient au cours du temps (en amplitude) donc une simple FFT est utile pour avoir les fréquences de ces partiels mais ne suffira pas pour modéliser car on ne voit pas leur variation temporelle.


    La clé du problème est d'obtenir un sonagramme, autrement dit, l'évolution de chaque partiel en fonction du temps pour les modéliser.
    La fonction sonagram de scipy nous donne déjà un résultat intéressant , malgré une mauvaise précision sur les fréquences qui peut être améliorée.
    On voit que la fréquence fondamentale colle bien avec la note jouée (un DO3 de 262 Hz) notamment.
    Nom : sonagramme.png
Affichages : 2496
Taille : 10,3 Ko


    Mais je voudrais un sonagramme où on pourrait avoir des valeurs numériques (et non juste des variations de couleurs) et pouvoir accéder à chaque partiel.
    En 2e pièce jointe, un exemple tiré d'un livre pour illustrer mon propos (désolé de la qualité approximative de ma photo).

    Je pense qu'il faut peut-être traiter les valeurs que renvoie la fonction sonagram.
    Si quelqu'un a déja été confronté à ce problème
    Merci de votre aide
    Images attachées Images attachées  

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    J'imagine que cela ne vous aidera pas mais on ne sait jamais :
    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
    import matplotlib.pyplot as plt
    import numpy as np
    from scipy.io import wavfile as wf
    from scipy import fft
     
    sons =["yeah.wav","beep_02.wav", "beep_03.wav","a6.wav"]
     
    def traitement(son):
        sampFreq, snd = wf.read(son)
        snd = snd / (2.**15)
        shap = snd.shape[0]
    #    print(snd)
        try:
            s1 = snd[:,0]
        except:
            s1 = snd
     
        timeArray = np.arange(0, shap, 1)
        timeArray = timeArray / sampFreq
        timeArray = timeArray * 1000 #scale to milliseconds
        plt.plot(timeArray, s1, color='b')
        plt.ylabel('Amplitude')
        plt.xlabel('Time (ms)')
        plt.show()
        plt.savefig("im"+str(son.split(".")[0])+".png")
     
        n = len(s1) 
        p = fft(s1) 
        nUniquePts = int(np.ceil((n+1)/2.0))
        p = p[0:nUniquePts]
        p = abs(p)
        p = p / float(n) 
     
        p = p**2  
     
        if n % 2 > 0: 
            p[1:len(p)] = p[1:len(p)] * 2
        else:
            p[1:len(p) -1] = p[1:len(p) - 1] * 2 
     
        freqArray = np.arange(0, nUniquePts, 1.0) * (sampFreq / n);
        plt.plot(freqArray/50, 10*np.log10(p), color='r')
        plt.xlabel('Frequency (kHz)')
        plt.ylabel('Power (dB)')
        plt.show()
     
        rms_val = np.sqrt(np.mean(s1**2))
        print("rms : ",rms_val)
     
     
    for i in range(len(sons)):
        print(sons[i])
        traitement(sons[i])
    Pas d'aide par mp.

Discussions similaires

  1. [Débutant] lecture d'un fichier .wav
    Par Maha Ing dans le forum MATLAB
    Réponses: 4
    Dernier message: 16/05/2014, 17h05
  2. Lecture d'un fichier wav
    Par hadeel dans le forum C
    Réponses: 8
    Dernier message: 04/06/2008, 22h18
  3. Lecture d'un fichier .wav octet par octet
    Par DevVB dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 27/07/2007, 12h10
  4. Lecture Fichier WAV
    Par psiyg69 dans le forum C
    Réponses: 4
    Dernier message: 03/05/2006, 10h34
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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