【问题标题】:Sample rate and wav data contains different dimensions采样率和 wav 数据包含不同的维度
【发布时间】:2018-04-13 20:09:09
【问题描述】:

我正在尝试在 Python 中读取 wav 文件。我使用 wavfile.read 读取 25MB 文件并获得 sample_ratedata 它们具有以下尺寸:

files[:1][0] 是 .wav 文件。

sample_rate, samples = wavfile.read(files[:1][0])
print(sample_rate)
print(len(samples))
print(samples)

48000
14466512
[157 150 141 ...,  33  37  42]

现在我想输出它的波形和频谱图,我正在使用以下代码来做到这一点:

freqs, times, spectrogram = log_specgram(samples, sample_rate)

fig = plt.figure(figsize=(14,8))
ax1 = fig.add_subplot(211)
ax1.set_title('Raw wave of ' + files[:1][0])
ax1.set_ylabel('Amplitude')
ax1.plot(np.linspace(0, sample_rate/len(samples), sample_rate), samples)

ax2 = fig.add_subplot(212)
ax2.imshow(spectrogram.T, aspect='auto', origin='lower', 
           extent=[times.min(), times.max(), freqs.min(), freqs.max()])
ax2.set_yticks(freqs[::16])
ax2.set_xticks(times[::16])
ax2.set_title('Spectrogram of ' + files[:1][0])
ax2.set_ylabel('Freqs in Hz')
ax2.set_xlabel('Seconds')

但是,我收到以下错误:

ValueError: x and y must have same first dimension, but have shapes (48000,) and (14466512,)

任何想法如何解决这个问题?

【问题讨论】:

    标签: python speech-recognition wav


    【解决方案1】:

    替换

    ax1.plot(np.linspace(0, sample_rate/len(samples), sample_rate), samples)
    

    ax1.plot(np.linspace(0, len(samples)/sample_rate, len(samples)), samples)
    

    采样率是每秒多少个样本。如果您尝试绘制所有样本,x 值的数量应该是样本数,而不是每秒的样本数。

    对于第二个更改,我假设您正在尝试在几秒钟内制作您的 x 轴。样本数/每秒样本数将为您提供秒数,而不是相反。

    【讨论】:

      猜你喜欢
      • 2021-11-12
      • 1970-01-01
      • 2019-12-30
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多