PyAudio, как узнать частоту и амплитуду при записи? - PullRequest
6 голосов
/ 02 августа 2011

Я использовал пример записи по умолчанию в PyAudio и добавил numpy и scipy.Однако я могу использовать scipy.io.wavefile.read('FILE.wav') только после записи файла, и это также дает мне этот случайный кортеж, например: (44100, array([[ 0, 0], [-2, 0], [ 0, -2], ..., [-2, -2], [ 1, 3], [ 2, -1]], dtype=int16)).Что дает мне этот массив, и знаете ли вы, как еще вы можете получить частоту / амплитуду каждого кадра файла WAV, предпочтительно во время записи?

1 Ответ

12 голосов
/ 02 августа 2011

Массив - это не случайные данные, это волновые данные вашего стереозвука, а 44100 - это частота дискретизации.используйте следующий код для построения графика левого канала:

import scipy.io.wavfile as wavfile
import numpy as np
import pylab as pl
rate, data = wavfile.read('FILE.wav')
t = np.arange(len(data[:,0]))*1.0/rate
pl.plot(t, data[:,0])
pl.show()

Чтобы получить частоту и амплитуду вашей волны, выполните FFT.Следующий код отображает мощность каждого частотного бина:

p = 20*np.log10(np.abs(np.fft.rfft(data[:2048, 0])))
f = np.linspace(0, rate/2.0, len(p))
pl.plot(f, p)
pl.xlabel("Frequency(Hz)")
pl.ylabel("Power(dB)")
pl.show()
...