我正在尝试用Python读取一个wav文件。我是25MB文件,当我使用wavfile.read读取并获得 sample_rate 和数据时,它们具有以下维度:
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,)
任何想法如何解决这个问题?
答案 0 :(得分: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轴。样本数/每秒样本数将给出秒数,而不是相反。