PyAudio,如何在录音时判断频率和振幅?
我用的是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
这个数组不是随机数据,它是你立体声音频的波形数据,而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()