Python实现音频滤波时触发x与y维度不匹配ValueError问题求助
报错原因
这个报错是两个问题共同导致的:
- 你读取的WAV文件为双声道音频,
wave库读取后返回的一维waveData是左右声道采样点交错存储的,总长度为声道数*帧数,你调用plt.plot时传入的x轴time长度等于帧数2140699,y轴waveData长度是两倍的帧数4281398,维度不匹配。 - 函数返回值变量名拼写错误:函数内定义的变量是
waveData,你返回的是未定义的Wave,即使绘图问题解决,后续也会触发NameError。
解决方案
修改read_wav函数,增加双声道拆分逻辑、修正变量名即可,修改后的代码如下:
def read_wav(wavfile, plots=True, normal=False): f = wavfile params = f.getparams() nchannels, sampwidth, framerate, nframes = params[:4] strData = f.readframes(nframes) waveData = np.frombuffer(strData, dtype=np.int16) # 新增:拆分多声道,默认取左声道处理 if nchannels > 1: waveData = waveData.reshape(-1, nchannels)[:, 0] # 幅值归一化 if normal == True: waveData = waveData*1.0/(max(abs(waveData))) # 绘图 if plots == True: time = np.arange(0, nframes ,dtype=np.int16) *(1.0 / framerate) plt.figure(dpi=100) plt.plot(time, waveData) plt.xlabel("Time") plt.ylabel("Amplitude") plt.title("Single channel wavedata") plt.show() # 修正变量名拼写错误 return (waveData, time)
可选优化:你fft_wav函数里用到的np.int在NumPy 1.20及以上版本已被废弃,建议替换为int或者np.int_避免警告。
内容的提问来源于stack exchange,提问作者gasereldib
相关产品推荐
相关产品推荐

