【问题标题】:Why won't Scipy's wavefile.py from scipy.io open a wave file?为什么来自 scipy.io 的 Scipy 的 wavefile.py 不会打开波形文件?
【发布时间】:2019-07-24 03:29:33
【问题描述】:

我正在尝试构建一个音频到可见波形转换器a la联觉,但我遇到了一个可爱的小错误:

/Users/nathanielastudillo/anaconda/lib/python3.6/site-packages/scipy/io/wavfile.py:172: WavFileWarning: Chunk (non-data) not understood, skipping it.
  WavFileWarning)
Traceback (most recent call last):

  File "<ipython-input-8-c1948c42b069>", line 5, in <module>
    rate, audio = wavfile.read('3 - Headache.wav')

  File "/Users/nathanielastudillo/anaconda/lib/python3.6/site-packages/scipy/io/wavfile.py", line 166, in read
    data = _read_data_chunk(fid, comp, noc, bits, mmap=mmap)

  File "/Users/nathanielastudillo/anaconda/lib/python3.6/site-packages/scipy/io/wavfile.py", line 71, in _read_data_chunk
    data = numpy.fromstring(fid.read(size), dtype=dtype)

TypeError: data type "<i3" not understood

真的很愉快。我对 numpy 的 dtype documentation 进行了一些挖掘,发现 wavfile.py 难以咀嚼的非数据块是一个 little-endian 有符号整数,大概是 3 个字节长,由 @mgilson 对 @ 的评论987654322@。

无论出于何种原因,numpy 似乎都不想使用 3 字节 little-endian 有符号整数。我想使用提到的修复程序here,但我什至无法加载文件。尝试将修改后的 wavefile.py 版本一起破解是否有意义?有谁知道我该如何解决这个问题?我的实现,借用this,是:

from scipy import signal
from scipy.io import wavfile
import scipy.io.wavfile

M=1024
rate, audio = wavfile.read('3 - Headache.wav')

freqs, times, spect = signal.spectrogram(audio, fs=rate, window='hanning',
                                  nperseg=1024, noverlap=M - 100,
                                  detrend=False, scaling='spectrum')

【问题讨论】:

  • 您使用的是哪个版本的 scipy?您可以通过import scipy; print(scipy.__version__) 查询
  • 如果 WAV 文件使用 24 位数据,scipy can not read it。你可以试试wavio,这是我写的一个小型 Python 库。它是 Python 标准 wave 库的包装器,可将数据作为 numpy 数组返回。
  • 如何使用例如librosa 还是其他十几个专业音频库之一?如果你知道 scipy 这种数据类型存在固有的问题......
  • 我会试试 wavio 和 librosa。当我找到解决方案时会报告。

标签: python numpy audio scipy signal-processing


【解决方案1】:

Scipy 根本无法读取我尝试使用的 24 位 WAV。感谢@WarrenWeckesser 的评论。

【讨论】:

    猜你喜欢
    • 2020-10-20
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多