2011-12-11 10 views
9

Bien, así que quería hacer un procesamiento de señal básico en Python y encontré esta gran biblioteca llamada scikits.audiolab.scikits.audiolab en Ubuntu Oneiric - ImportError: Ningún módulo llamado _sndfile

No hay PPA en ningún lado. Oh bien. Pensé que podría instalarlo en mi servidor de Ubuntu onírico simplemente

sudo aptitude install libsndfile-dev 

y luego

sudo easy_install scikits.audiolab 

Esto, sin embargo, no pudo con

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? De acuerdo, consultada la lista libsndfile1-dev archivo:

[email protected] ~ $ 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 
[...] 

extraños, bibliotecas de entrar en directorio de la biblioteca no estándar? Estúpido empaquetador.

Oh bien. Descargado la fuente de scikits.audiolab, escribió un site.cfg así:

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

Ahora python setup.py build y sudo setup.py install completado con éxito.

A continuación, puso en marcha un terminal de Python, trató de 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 

Pero:

>> 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'] 

Y _sndfile.so encontrar en /usr/local/lib/python2.7/dist-packages/scikits.audiolab-0.11.0-py2.7-linux-x86_64.egg/scikits/audiolab/pysndfile/_sndfile.so.

lo tanto, mi pregunta es,

  1. wtf está pasando? ¿Por qué python no encuentra _sndfile.so?
  2. ¿Alguien ha utilizado con éxito scikits.audiolab en 2011 en una 2011 Linux distro? ¿Cómo lo hiciste?
  3. ¿Hay alguna biblioteca alternativa buena para leer archivos WAV ENORMES (como, 10 GB/8 horas) divididos por partes en NumPy?

Respuesta

4

Alguien me sugirió que verifique ldd _sndfile.so. Hizo eso y obtuvo

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) 

¡Interesante! También se hace referencia a un grupo de bibliotecas de formato de archivo, que probablemente no tenga instaladas.

Hizo sudo aptitude install flac vorbis-tools y listo!

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, " 

Es probable que pueda ignorar esa advertencia sobre la falta de soporte ALSA por el momento ya que es probable que utiliza para la grabación y reproducción local - y esto es un servidor de todos modos.

Hubiera sido mucho más fácil si la falta de libFLAC, libvorbis y libvorbisenc había provocado un fallo en tiempo de compilación en los scripts de creación de scikits.audiolab ... Después de todo, el mensaje de error final no menciona nada de esas bibliotecas.

0

Editar: Me di cuenta de que esto no es el caso ya que pysndfile parece estar liado ... No debería estar respondiendo a las cosas la primera hora de la mañana;)

respuesta a 1: sndfile es biblioteca de CA, lo más probable es que necesite instalar el contenedor de Python para él: http://code.google.com/p/libsndfile-python/

0

I no desea tener la advertencia sobre alsa encabezados, simplemente instale la lib.

sudo apt-get install libasound2-dev

que trabajó para mí ..

Cuestiones relacionadas