Frage

Ich mag Ton (Stimme) unter Verwendung von Portaudio (PyAudio) und gibt die entsprechende Schallwelle auf dem Bildschirm aufzeichnen. Aussichtslos, wie ich bin, ich bin nicht in der Lage, die Frequenzinformation aus dem Audiostrom zu extrahieren, so dass ich es in Hz / Zeit-Form ziehen.


Hier ist ein Beispiel-Code-Snippet, das Aufzeichnung und aufgezeichnetes Audio fünf Sekunden lang spielt, falls es hilft jeder:

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)

Ich mag die benötigten Informationen aus den oben genannten Variablen „Daten“ extrahieren. (Oder verwenden Sie einen anderen High-Level-Ansatz mit Portaudio oder einem anderen Bibliothek mit Python-Bindungen).


Ich wäre sehr dankbar für jede Hilfe! Auch vage verwandten Leckerbissen von audio-Analyse Weisheit geschätzt. :)

War es hilfreich?

Lösung

Was Sie wollen, ist wahrscheinlich die Fourier der Audiodaten zu transformieren. Es gibt mehrere Pakete, die das für Sie berechnen. scipy und numpy ist zwei von ihnen. Es wird oft als „Fast Fourier Transformation“ (FFT) genannt, aber das ist nur der Name des Algorithmus.

Hier ist ein Beispiel für es Nutzung: https : //svn.enthought.com/enthought/browser/Chaco/trunk/examples/advanced/spectrum.py

Andere Tipps

Die Fourier-Transformation wird nicht viel helfen, wenn Sie die Analyse wollen sowohl in der Frequenz- und Zeitbereich durchgeführt werden. Vielleicht haben Sie einen Blick auf „Wavelettransformationen“ haben wollen. Es gibt ein Paket namens pywavelets ... http://www.pybytes.com/pywavelets/#discrete-wavelet- transformations dwt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top