Python wave库readframe 时域波形数值很大的问题

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函数中填写正确的数据类型即可
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值