Comment extraire les informations de fréquence d'un flux audio d'entrée (à l'aide de PortAudio)?
Question
Je souhaite enregistrer du son (voix) à l'aide de PortAudio (PyAudio) et émettre l'onde sonore correspondante à l'écran. Sans espoir, je ne parviens pas à extraire les informations de fréquence du flux audio pour pouvoir les dessiner sous forme Hz / heure.
Voici un exemple d'extrait de code qui enregistre et lit l'audio enregistré pendant cinq secondes, au cas où cela aiderait:
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 de la variable "données" ci-dessus. (Ou utilisez une autre approche de haut niveau avec PortAudio ou une autre bibliothèque avec des liaisons Python.)
Je serais très reconnaissant pour toute aide! Même des fragments vaguement liés de la sagesse d'analyse audio sont appréciés. :)
La solution
Ce que vous voulez, c'est probablement la transformation de Fourier des données audio. Plusieurs packages peuvent calculer cela pour vous. scipy
et numpy
est deux d'entre eux. Il est souvent appelé "Transformée de Fourier rapide". (FFT), mais ce n’est que le nom de l’algorithme.
Voici un exemple d'utilisation: https : //svn.enthought.com/enthought/browser/Chaco/trunk/examples/advanced/spectrum.py
Autres conseils
La transformation de Fourier ne vous aidera pas beaucoup si vous souhaitez que l'analyse soit effectuée à la fois dans le domaine fréquentiel et temporel. Vous voudrez peut-être consulter "Transformées en ondelettes". Il y a un paquet appelé pywavelets ... http://www.pybytes.com/pywavelets/#discrete-wavelet- transformation-dwt