采样率和wav数据包含不同的维度

2024-04-18 20:54:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python读取wav文件。当我使用wavfile.read文件我得到了样本率数据它们具有以下维度:

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,)

你知道怎么解决这个问题吗?你知道吗


Tags: 文件samplereadratefigfilessamplesprint
1条回答
网友
1楼 · 发布于 2024-04-18 20:54:29

替换

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轴。样本数/每秒样本数将给出秒数,而不是相反。你知道吗

相关问题 更多 >