Comment extraire les informations de fréquence d'un flux audio d'entrée (à l'aide de PortAudio)?

StackOverflow https://stackoverflow.com/questions/259451

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. :)

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top