scikits.audiolab в Ubuntu Oneiric - ImportError: Нет модуля с именем _sndfile

Итак, я хотел сделать некоторую базовую обработку сигналов в Python и нашел эту замечательную библиотеку под названием scikits.audiolab,

Никакого PPA нигде не найти. Ну что ж. Я думал, что смогу установить его на свой сервер Ubuntu Oneiric, просто

sudo aptitude install libsndfile-dev

а потом

sudo easy_install scikits.audiolab

Это, однако, не удалось с

error: sndfile (http://www.mega-nerd.com/libsndfile/) library not found.
Directories to search for the libraries can be specified in the
site.cfg file, in section [sndfile].

WTF? Ладно, расспросил libsndfile1-dev список файлов:

japsu@helios ~ $ apt-file list libsndfile1-dev
libsndfile1-dev: /usr/include/sndfile.h
libsndfile1-dev: /usr/include/sndfile.hh
libsndfile1-dev: /usr/lib/x86_64-linux-gnu/libsndfile.a
libsndfile1-dev: /usr/lib/x86_64-linux-gnu/libsndfile.la
libsndfile1-dev: /usr/lib/x86_64-linux-gnu/libsndfile.so
libsndfile1-dev: /usr/lib/x86_64-linux-gnu/pkgconfig/sndfile.pc
[...]

Странно, библиотеки собираются в нестандартный каталог библиотек? Глупый упаковщик.

Ну что ж. Скачал источник для scikits.audiolabнаписал site.cfg как это:

[sndfile]
include_dirs = /usr/include
library_dirs = /usr/lib/x86_64-linux-gnu/
sndfile_libs = sndfile

Сейчас python setup.py build а также sudo setup.py install успешно завершено.

Далее запустил оболочку Python, попытался from scikits.audiolab import sndfile:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "scikits/audiolab/__init__.py", line 25, in <module>
    from pysndfile import formatinfo, sndfile
  File "scikits/audiolab/pysndfile/__init__.py", line 1, in <module>
    from _sndfile import Sndfile, Format, available_file_formats, \
ImportError: No module named _sndfile

Но:

>> sys.path
['',
 '/usr/bin',
 '/usr/lib/pymodules/python2.7',
 '/usr/local/lib/python2.7/dist-packages/scikits.audiolab-0.11.0-py2.7-linux-x86_64.egg',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/IPython/Extensions',
 u'/home/japsu/.ipython']

А также _sndfile.so найден в /usr/local/lib/python2.7/dist-packages/scikits.audiolab-0.11.0-py2.7-linux-x86_64.egg/scikits/audiolab/pysndfile/_sndfile.so,

Итак, мой вопрос,

  1. Wtf происходит? Почему Python не находит _sndfile.so?
  2. Кто-нибудь успешно использовал scikits.audiolab в 2011 году на дистрибутиве Linux 2011 года? Как ты сделал это?
  3. Есть ли какие-нибудь хорошие альтернативные библиотеки для чтения ОГРОМНЫХ (например, 10 ГБ / 8 часов) WAV-файлов, попадающих в NumPy?

3 ответа

Решение

Кто-то предложил мне проверить ldd _sndfile.so, Сделал именно это и получил

    linux-vdso.so.1 =>  (0x00007fffd3dea000)
    libsndfile.so.1 => /usr/lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007f2bfbb5b000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2bfb93e000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2bfb59e000)
    libFLAC.so.8 => /usr/lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007f2bfb354000)
    libvorbisenc.so.2 => /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007f2bfae85000)
    libvorbis.so.0 => /usr/lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007f2bfac58000)
    libogg.so.0 => /usr/lib/x86_64-linux-gnu/libogg.so.0 (0x00007f2bfaa51000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2bfa7cd000)

Интересно! Также есть ссылки на библиотеки форматов файлов, которые я, вероятно, не установил.

Сделал sudo aptitude install flac vorbis-tools и вуаля!

In [1]: from scikits.audiolab import sndfile
/usr/local/lib/python2.7/dist-packages/scikits.audiolab-0.11.0-py2.7-linux-x86_6                                     
4.egg/scikits/audiolab/soundio/play.py:48: UserWarning: Could not import alsa ba                                     
ckend; most probably, you did not have alsa headers when building audiolab
warnings.warn("Could not import alsa backend; most probably, "

Вероятно, я могу пока игнорировать это предупреждение об отсутствии поддержки ALSA, так как оно, вероятно, используется для локальной записи и воспроизведения - и в любом случае это сервер.

Было бы намного проще, если бы отсутствие libFLAC, libvorbis а также libvorbisenc вызвал сбой во время сборки в сценариях сборки scikits.audiolab... В конце концов, в последнем сообщении об ошибке ничего не говорится об этих библиотеках.

Если вы не хотите получать предупреждение о заголовках alsa, просто установите lib.

sudo apt-get установить libasound2-dev

Это сработало для меня..

Edit: я только что понял, что это не тот случай, так как pysndfile, кажется, в комплекте... Я не должен отвечать на вещи первым делом утром;)

Ответ на вопрос 1: Sndfile - это библиотека ac, вам, скорее всего, нужно установить оболочку Python: http://code.google.com/p/libsndfile-python/

Другие вопросы по тегам