我试图从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()
答案 0 :(得分:7)
您正在阅读的文件似乎是一个立体声文件。 它们包含二维数据 - 左边一个轨道,右边扬声器一个轨道。
这里解释了一般概念:https://en.wikipedia.org/wiki/Stereophonic_sound
如果您只想从二维数据序列中选择左侧音频通道,可以选择
y = samples[:,0]
要选择正确的频道,请将0替换为1。
作为替代方案,请确保用于生成文件的程序首先保存单声道波文件。根据您的尝试,这可能是实际的错误。