Как извлечь информацию о частоте из входного аудиопотока (используя PortAudio)?

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

Вопрос

Я хочу записать звук (голос) с помощью PortAudio (PyAudio) и вывести соответствующую звуковую волну на экран. Безнадежно, как я, я не могу извлечь информацию о частоте из аудиопотока, чтобы я мог нарисовать ее в форме Гц / время.

<Ч>

Вот пример фрагмента кода, который записывает и воспроизводит записанное аудио в течение пяти секунд, если это поможет:

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)

Я хочу извлечь необходимую информацию из вышеуказанной переменной "data". (Или используйте другой высокоуровневый подход с PortAudio или другой библиотекой с привязками Python.)

<Ч>

Я был бы очень благодарен за любую помощь! Ценится даже смутно связанный с ним аудио-анализ мудрости. :)

Это было полезно?

Решение

Вероятно, вам нужно преобразование Фурье аудиоданных. Есть несколько пакетов, которые могут рассчитать это для вас. scipy и numpy - это два из них. Его часто называют «быстрое преобразование Фурье». (БПФ), но это только название алгоритма.

Вот пример его использования: https : //svn.enthought.com/enthought/browser/Chaco/trunk/examples/advanced/spectrum.py

Другие советы

Преобразование Фурье мало поможет вам, если вы хотите, чтобы анализ проводился как в частотной, так и во временной области. Возможно, вы захотите взглянуть на «Wavelet Transforms». Есть пакет под названием pywavelets ... http://www.pybytes.com/pywavelets/#discrete-wavelet- спектрально-дедвейтом

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top