2008-11-03 21 views
2

Je veux enregistrer le son (voix) en utilisant PortAudio (PyAudio) et émettre l'onde sonore correspondante sur l'écran. Sans espoir comme je suis, je suis incapable d'extraire les informations de fréquence du flux audio afin que je puisse le dessiner en Hz/temps.Comment extraire des informations de fréquence d'un flux audio d'entrée (en utilisant PortAudio)?


Voici un exemple de code snippet qui enregistre et lit l'audio enregistrée pendant cinq secondes, au cas où il aide tout:

p = pyaudio.PyAudio() 

chunk = 1024 
seconds = 5 

stream = p.open(format=pyaudio.paInt16, 
       channels=1, 
       rate=44100, 
       input=True, 
       output=True) 

for i in range(0, 44100/chunk * seconds): 
    data = stream.read(chunk) 
    stream.write(data, chunk) 

Je souhaite extraire les informations nécessaires à partir des variables ci-dessus « données ». (Ou utiliser une autre approche de haut niveau avec PortAudio ou d'une autre bibliothèque liaisons Python.)


Je serais très reconnaissant pour toute aide! Même des bribes vaguement liées de sagesse d'analyse audio sont appréciées. :)

+0

Donc vous voulez faire un analyseur de spectre? – endolith

Répondre

1

La transformée de Fourier ne vous aidera pas beaucoup si vous voulez que l'analyse soit menée dans la fréquence et le domaine temporel. Vous voudrez peut-être jeter un oeil à "Wavelet Transforms". Il y a un paquet appelé pywavelets ... http://www.pybytes.com/pywavelets/#discrete-wavelet-transform-dwt

+0

Prenant des transformées de Fourier de chaque morceau comme il arrive sera équivalent à un STFT, qui est le même genre de chose comme une transformée en ondelettes. – endolith