Я хочу использовать Python, чтобы получить доступ к wav-файлу и записать его содержание в форме, которая позволяет мне анализировать его (скажем, массивы).
Я установил более новую версию на numpy (1.4.0). Но затем я получил новый набор ошибок:
Traceback (новый вызов в последний раз): Файл "test.py", строка 7, в импорте scikits.audiolab Файл "/usr/lib/python2.5/site-packages/scikits/audiolab/init.py", строка 25, в от pysndfile импортирует formatinfo, sndfile Файл "/usr/lib/python2.5/site-packages/scikits/audiolab/pysndfile/init.py", строка 1, в от _sndfile импортируют Sndfile, Формат, available_file_formats, available_encodings Файл "numpy.pxd", строка 30, в scikits.audiolab.pysndfile. _ sndfile (scikits/audiolab/pysndfile / _ sndfile.c:9632) ValueError: numpy.dtype, кажется, не корректный текстовый объект
Я сдался для использования audiolab и думал, что могу использовать "волновой" пакет для чтения в wav-файле. Я задал вопрос об этом, но люди рекомендовали использовать scipy вместо этого. Хорошо, я решил сфокусироваться на scipy (я имею 0.6.0. версия).
Но когда я пытался сделать следующее:
от scipy.io импортируют wavfile
x = wavfile.read ('/usr/share/sounds/purple/receive.wav')
Я получаю следующее:
Traceback (most recent call last):
File "test3.py", line 4, in <module>
from scipy.io import wavfile
File "/usr/lib/python2.5/site-packages/scipy/io/__init__.py", line 23, in <module>
from numpy.testing import NumpyTest
ImportError: cannot import name NumpyTest
audiolab - лучший способ, но он работает не во всех средах, и разработчик не работает над этим. Я все еще использую Python 2.5, поэтому могу его использовать.
Вы установили libsndfile ?
А волновой модуль пробовали? У него меньше зависимостей:
http://docs.python.org/library/wave.html
def everyOther (v, offset=0):
return [v[i] for i in range(offset, len(v), 2)]
def wavLoad (fname):
wav = wave.open (fname, "r")
(nchannels, sampwidth, framerate, nframes, comptype, compname) = wav.getparams ()
frames = wav.readframes (nframes * nchannels)
out = struct.unpack_from ("%dh" % nframes * nchannels, frames)
# Convert 2 channles to numpy arrays
if nchannels == 2:
left = array (list (everyOther (out, 0)))
right = array (list (everyOther (out, 1)))
else:
left = array (out)
right = left