1、打开要进行分析的wav文件:
wf = wave.open("F:\\pycharm\\audio.wav", "rb")
2、创建PyAudio对象
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnumchannels(),
rate=wf.getframerate(),
output=True)
numframes = wf.getnumframes()
framerate = wf.getframerate()
3、读取完整的帧数据
str_data = wf.readframes(numframes)
wf.close()
4、修改采样点数和起始位置从而进行不同位置和长度的音频波形分析
N = 44100
start = 0
df = framerate / (N - 1)
freq = [df * n for n in range(0, N)]
wave_data2 = wave_data[0][start:start + N]
c = numpy.fft.fft(wave_data2) * 2 / N
5、将频率在4000以下的频谱显示出来
while freq[d] > 4000:
d -= 10
pylab.plot(freq[:d - 1], abs(c[:d - 1]), 'r')
pylab.show()
与前面的方法一样,但是出现了错误,具体如下:
出错原因:是wav格式的问题;Wav格式有很多种,但是wave.open()中支持的是pcm的格式,因此需要进行格式的转变。
1、在window系统下下载sox;用它做格式转换。
sox的安装教程
按照如上教程安装成功并配置环境变量后,cmd 输入sox 查看是否成功安装。
如下说明sox已成功安装:
2、在python中安装sox包
Python包sox,提取码:3ii4。
在cmd下按如下方式安装:
3、在对音频进行转换时,需要在音频文件所在路径下进行,有如下两种方式
(1)利用cd到音频文件所在路径
(2)直接在音频文件所在路径打开cmd命令窗口
输入sox noiseaudio.wav -b 16 -e signed-integer 00.wav进行转换
成功后再用上述方法绘制频谱,结果如下: