将wav文件读入python

时间:2017-01-21 17:07:55

标签: 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 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,请告诉我!谢谢!

1 个答案:

答案 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的实现方式也是如此。尚未支持。

相关问题