将wav文件读入python

将wav文件读入python,python,audio,scipy,Python,Audio,Scipy,我试图读取一个wav文件以在其上运行fft,但我一直遇到scipy错误 import matplotlib.pyplot as plt from scipy.io import wavfile as wav import scipy from scipy.fftpack import fft import numpy as np rate, data = scipy.io.wavfile.read('a1.wav') fft_out = fft(data) #matplotlib in

我试图读取一个wav文件以在其上运行fft,但我一直遇到scipy错误

import matplotlib.pyplot as plt
from scipy.io import wavfile as wav
import scipy    
from scipy.fftpack import fft
import numpy as np

rate, data = scipy.io.wavfile.read('a1.wav')
fft_out = fft(data)
#matplotlib inline
plt.plot(data, np.abs(fft_out))
plt.show()
print 'exit'
我遇到的错误是:

Traceback (most recent call last):
    File "test.py", line 9, in <module>
        rate, data = scipy.io.wavfile.read('a1.wav')
    File "/usr/local/lib/python2.7/site-packages/scipy/io/wavfile.py", line 275, in read
        return fs, data
UnboundLocalError: local variable 'data' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“test.py”,第9行,在
速率,data=scipy.io.wavfile.read('a1.wav')
文件“/usr/local/lib/python2.7/site packages/scipy/io/wavfile.py”,第275行,已读
返回fs、数据
UnboundLocalError:赋值前引用的局部变量“data”
我认为这可能是一个蟒蛇错误,所以我删除了蟒蛇,但我仍然遇到这个问题


如果有更好的方法来读取wav文件,以便我可以在它们上运行FFT,请告诉我!谢谢

如果查看Github上特定
wavefile.read()
的代码,您会发现
数据
仅在函数中的一个位置设置:

        elif chunk_id == b'data':
            if not fmt_chunk_received:
                raise ValueError("No fmt chunk before data")
            data = _read_data_chunk(fid, format_tag, channels, bit_depth,
                                    is_big_endian, mmap)
因此,当Python解释器运行代码时,这个条件永远不会满足,我们会得到referencebefore赋值异常


wav文件由一个头和一系列块组成。有不同类型的春卷。例如,一个可以携带关于数据格式的信息,另一个可以携带关于采样率的信息,然后是包含数据的信息。在这种情况下,Scipy的
read
较新版本似乎遇到了这个
数据
chunck,因此很可能wav文件有问题,或者它可能是某种较新的格式,而Scipy的实现尚不支持。

可能是因为您需要sox包。 如果是,请尝试安装sox<代码>apt安装sox 此外,请检查音频文件的标题

soxi file_1.wav


我们谈论的是哪个版本的scipy?你能试试最新的一个,看看错误是否持续0.18.1(最新的)并且错误仍然存在。你能试着加载一个不同的WAV文件吗?问题可能是特定于
a1.wav
。请原谅我的提问:您已经播放了此wave?您可以尝试运行上提供的软件,查看它是否公开了有关该文件的任何内容。
apt install libav-tools
apt install ffmpeg