You need to enable JavaScript to run this app. Python实现音频滤波时触发x与y维度不匹配ValueError问题求助
优惠活动
大模型
产品
解决方案
定价
更多

Python实现音频滤波时触发x与y维度不匹配ValueError问题求助

报错原因

这个报错是两个问题共同导致的:

  1. 你读取的WAV文件为双声道音频,wave库读取后返回的一维waveData是左右声道采样点交错存储的,总长度为声道数*帧数,你调用plt.plot时传入的x轴time长度等于帧数2140699,y轴waveData长度是两倍的帧数4281398,维度不匹配。
  2. 函数返回值变量名拼写错误:函数内定义的变量是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 11:06:04