我试图读取一个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
我认为这可能是一个anaconda错误所以我删除了anaconda但我仍然遇到了这个问题。
如果有更好的方法来读取wav文件,以便我可以对它们运行fft,请告诉我!谢谢!
答案 0 :(得分:1)
如果您查看Github上特定wavefile.read()
here的代码,您会看到data
仅设置在函数中的一个位置:
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解释器运行代码时,这个条件永远不会得到满足,并且我们在赋值异常之前得到引用。
wav文件由一个标题后跟一系列块组成。有不同类型的chuncks。例如,可以携带有关数据格式的信息,另一个可以携带采样率,然后是包含数据的信息。在这种情况下,似乎Scipy的read
更新遇到了这个data
chunck,因此wav文件很可能出现问题,或者它可能是一些较新的格式,Scipy的实现方式也是如此。尚未支持。