Почему Scipy's wavefile.py из scipy.io не открывает файл wave? - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь создать преобразователь частоты звуковой частоты в видимую форму сигнала а-ля синестезия, но получаю прекрасную небольшую ошибку:

/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

Действительно приятно.Я немного покопался в документации ntype для dtype и обнаружил, что блок данных, который wavfile.py с трудом пережевывает, представляет собой целое число с прямым порядком байтов, предположительно длиной 3 байта, идущее от @Комментарий mgilson этот вопрос .

Кажется, что numpy не хочет играть с 3-байтовым целым числом с прямым порядком байтов по любой причине.Я думал использовать исправление, упомянутое здесь , но я даже не могу загрузить файл.Имеет ли смысл попытаться взломать модифицированную версию wavefile.py?Кто-нибудь имеет представление о том, как я могу обойти это?Моя реализация, заимствованная из этого , такова:

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')
...