Python——Pylab简单读取wav文件示例
本例是一个简单的读取wav文件并进行绘图的程序。
在基本的Python平台之外,还需要安装PyLab库。
下载地址:http://wiki.scipy.org/PyLab
里面有 NumPy, SciPy, Matplotlib三个库的下载链接,自己下就OK啦。
# -*- coding: utf-8 -*- import wave import numpy import pylab as pl #打开wav文件 #open返回一个的是一个Wave_read类的实例,通过调用它的方法读取WAV文件的格式和数据 f = wave.open(r"D:1.wav","rb") #读取格式信息 #一次性返回所有的WAV文件的格式信息,它返回的是一个组元(tuple):声道数, 量化位数(byte单位), 采 #样频率, 采样点数, 压缩类型, 压缩类型的描述。wave模块只支持非压缩的数据,因此可以忽略最后两个信息 params = f.getparams() nchannels, sampwidth, framerate, nframes = params[:4] #读取波形数据 #读取声音数据,传递一个参数指定需要读取的长度(以取样点为单位) str_data = f.readframes(nframes) f.close() #将波形数据转换成数组 #需要根据声道数和量化单位,将读取的二进制数据转换为一个可以计算的数组 wave_data = numpy.fromstring(str_data,dtype = numpy.short) wave_data.shape = -1,2 wave_data = wave_data.T time = numpy.arange(0,nframes)*(1.0/framerate) len_time = len(time)/2 time = time[0:len_time] ##print "time length = ",len(time) ##print "wave_data[0] length = ",len(wave_data[0]) #绘制波形 pl.subplot(211) pl.plot(time,wave_data[0]) pl.subplot(212) pl.plot(time, wave_data[1],c="r") pl.xlabel("time") pl.show()
这段代码很简单,但有一个地方特别值得注意一下:
len_time = len(time)/2 time = time[0:len_time]
之前参看网上的代码时,没有上面两行代码。程序报错:
raise ValueError("x and y must have same first dimension")
提示plot函数里的两个参数维度不同,于是打印了time 和 wave_data[0]的长度:
time length = 9000 wave_data[0] length = 4500
所以将time的长度截取一半,再run一边,图就出现啦。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Python 读取WAV音频文件 画频谱
- 下一篇: python版的读取声音文件到常量数组
copyright © 2008-2019 亿联网络 版权所有 备案号:粤ICP备14031511号-2