119 votes

Lecture de fichiers *.wav en Python

J'ai besoin d'analyser un son écrit dans un fichier .wav. Pour cela, je dois transformer ce fichier en un ensemble de nombres (des tableaux, par exemple). Je pense que je dois utiliser le paquetage wave. Cependant, je ne sais pas comment il fonctionne exactement. Par exemple, j'ai fait ce qui suit :

import wave
w = wave.open('/usr/share/sounds/ekiga/voicemail.wav', 'r')
for i in range(w.getnframes()):
    frame = w.readframes(i)
    print frame

Grâce à ce code, je m'attendais à ce que la pression acoustique soit fonction du temps. En revanche, je vois un grand nombre de symboles étranges et mystérieux (qui ne sont pas des nombres hexadécimaux). Quelqu'un peut-il, s'il vous plaît, m'aider à résoudre ce problème ?

0voto

leec Points 1

S'il ne s'agit que de deux fichiers et que le taux d'échantillonnage est significativement élevé, vous pouvez simplement les entrelacer.

from scipy.io import wavfile
rate1,dat1 = wavfile.read(File1)
rate2,dat2 = wavfile.read(File2)

if len(dat2) > len(dat1):#swap shortest
    temp = dat2
    dat2 = dat1
    dat1 = temp

output = dat1
for i in range(len(dat2)/2): output[i*2]=dat2[i*2]

wavfile.write(OUTPUT,rate,dat)

0voto

makaveli Points 1779

PyDub ( http://pydub.com/ ) n'a pas été mentionnée et il convient d'y remédier. IMO c'est la bibliothèque la plus complète pour lire des fichiers audio en Python à l'heure actuelle, même si elle n'est pas exempte de défauts. Lecture d'un fichier wav :

from pydub import AudioSegment

audio_file = AudioSegment.from_wav('path_to.wav')
# or
audio_file = AudioSegment.from_file('path_to.wav')

# do whatever you want with the audio, change bitrate, export, convert, read info, etc.
# Check out the API docs http://pydub.com/

PS. L'exemple concerne la lecture d'un fichier wav, mais PyDub peut gérer un grand nombre de formats différents. L'inconvénient est qu'il est basé sur le support natif de Python wav et sur ffmpeg, donc vous devez avoir ffmpeg installé et beaucoup de capacités de PyDub dépendent de la version de ffmpeg. En général, si ffmpeg peut le faire, pydub (qui est assez puissant) le peut aussi.

Non-responsabilité : je n'ai aucun lien avec le projet, mais j'en suis un utilisateur assidu.

-1voto

yunus Points 165

Vous pouvez également utiliser un simple import wavio bibliothèque il faut aussi avoir des connaissances de base sur le son.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X