Python wave库readframe 时域波形数值很大的问题
问题描述:
在使用Python wave库画wave文件时域波形的时候,出现满屏、数值很大的波形
def read_data(path):
fw = wave.open(path, 'rb')
params = fw.getparams()
# print(params)
# 通道数、量化位数(单位字节)、频率、帧数
nchannels, sampwidth, framerate, nframes = params[:4]
str_data = fw.readframes(nframes)
fw.close()
wave_data = np.frombuffer(str_data, dtype='i' + str(sampwidth)) # 问题所在
wave_data.shape = -1, nchannels
return wave_data, framerate
path = ''
wave_data, framerate = read_data(path)
channel = 0
wave_data = wave_data[:, channel]
# wave_data = wave_data + 128
print(wave_data)
plt.plot(wave_data[10000:20000])
plt.show()
原因分析:
readframe函数返回的是二进制序列,在使用frombuffer时需要指定数据类型。
一般wave文件的数据类型是int8(具体是几位还需要看sampwidth),但是有一些是unit8(无符号)数据类型的。
在frombuffer函数里面指定‘i1’代表int8,‘u1’代表unit8(详细查数据类型)
解决方案:
在frombuffer函数中填写正确的数据类型即可