繁体   English   中英

将wav文件读入python

[英]Read wav file into python

我正在尝试读取 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 文件以便我可以对它们运行 ffts,请告诉我! 谢谢!

如果你看一下具体的代码wavefile.read() 这里Github上,你会看到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 文件由一个头部和一系列的块组成。 有不同类型的块。 例如,一个可以携带有关数据格式的信息,另一个是采样率,然后是包含数据的信息。 在这种情况下,Scipy 的read newer 似乎遇到了这个data ,所以很可能是 wav 文件有问题,或者它可能是某种较新的格式,Scipy 的实现尚不支持。

可能是因为你需要 sox 包。 如果是这样,请尝试安装 sox。 apt install sox另外,检查音频文件的标题,

soxi file_1.wav

apt install libav-tools
apt install ffmpeg

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM