`
郑睿9
  • 浏览: 161875 次
  • 性别: Icon_minigender_2
  • 来自: 浙江
社区版块
存档分类
最新评论

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一边,图就出现啦。



 

 

 

 

 

 

  • 大小: 49.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics