2008-11-03 11 views
2

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


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

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) 

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


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

+0

Итак, вы хотите сделать анализатор спектра? – endolith 2009-09-17 16:23:24

ответ

4

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

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

1

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

+0

Принимая преобразования Фурье каждого куска, когда он входит, будет эквивалентен STFT, что является тем же самым видом, что и вейвлет-преобразование. – endolith 2009-09-17 16:26:45