scipy.io.wavfile.read返回的数据

时间:2015-01-23 19:24:15

标签: python wav

我试图从Python中获取wav文件中的数据并绘制它。当我使用scipy.io.wavfile.read()时,我得到一个如下所示的数组:

[[ -1.49836736e-02  -1.27559584e-02]
 [ -1.84625713e-02  -1.63264061e-02]
 [ -2.17888858e-02  -1.95001373e-02]
 ..., 
 [  6.10332937e-05   6.10332937e-05]
 [ -3.05166468e-05   0.00000000e+00]
 [  3.05166468e-05  -6.10332937e-05]]

为什么它是一堆长度为2的数组,而不是一个长数组,每个样本的值为?返回的数据代表什么?提前谢谢。

convert_16_bit = float(2**15)
sr, samples = scipy.io.wavfile.read('singingonenote.wav')
x = np.linspace(0, 2000, 0.01)
samples = samples / (convert_16_bit + 1.0)
y = samples
print samples
plt.plot(x, y)
plt.show()

1 个答案:

答案 0 :(得分:7)

您正在阅读的文件似乎是一个立体声文件。 它们包含二维数据 - 左边一个轨道,右边扬声器一个轨道。

这里解释了一般概念:https://en.wikipedia.org/wiki/Stereophonic_sound

如果您只想从二维数据序列中选择左侧音频通道,可以选择

y = samples[:,0]

要选择正确的频道,请将0替换为1。

作为替代方案,请确保用于生成文件的程序首先保存单声道波文件。根据您的尝试,这可能是实际的错误。