You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python绘制音频信号波形?现有代码无法运行求解决

Python音频波形绘制代码错误排查与修正

你给出的错误代码如下:

samplerate,data= wavfile.read('bells.wav')

N = 5; # audio duration is 5 seconds
t = np.linspace(0, N/data, N)
plt(t, samplerate)

报错原因及修正点:

  • 缺失必要依赖导入:代码未导入运行所需的库,必须先添加:
    from scipy.io import wavfile
    import numpy as np
    import matplotlib.pyplot as plt
    
  • 时间轴计算逻辑错误:N/data 是整数与音频数据数组的除法,完全不符合时间轴计算逻辑。正确的时间轴应基于音频数据长度和采样率生成,若要绘制前5秒波形,需先计算对应采样点数量:
    sample_count = int(samplerate * 5)
    t = np.linspace(0, 5, sample_count)
    
  • 绘图函数调用错误:plt(t, samplerate) 是错误用法,绘制波形需用plt.plot(),且传入参数应为时间轴t和音频数据data,而非采样率数值。
  • 多通道音频处理:若音频为立体声(data是二维数组),需先转换为单通道,比如取左声道或求均值:
    if len(data.shape) > 1:
        data = data[:, 0]  # 取左声道,也可用np.mean(data, axis=1)计算均值
    

修正后的完整代码:

from scipy.io import wavfile
import numpy as np
import matplotlib.pyplot as plt

# 读取音频文件
samplerate, data = wavfile.read('bells.wav')

# 处理多通道音频
if len(data.shape) > 1:
    data = data[:, 0]

# 截取并绘制前5秒波形
sample_count = int(samplerate * 5)
data_5s = data[:sample_count]
t = np.linspace(0, 5, sample_count)

plt.plot(t, data_5s)
plt.xlabel('时间(秒)')
plt.ylabel('振幅')
plt.title('音频信号波形(前5秒)')
plt.show()

内容的提问来源于stack exchange,提问作者Xavi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:16:36