2011-12-11 13 views
9

Ok, quindi volevo fare qualche elaborazione di base del segnale in Python e ho trovato questa fantastica libreria chiamata scikits.audiolab.scikits.audiolab su Ubuntu Oneiric - ImportError: nessun modulo chiamato _sndfile

Nessun PPA da nessuna parte. Oh bene. Pensavo di poter installare sul mio server Ubuntu Oneiric semplicemente

sudo aptitude install libsndfile-dev 

e poi

sudo easy_install scikits.audiolab 

Questo, tuttavia, non è riuscita 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? Va bene, interrogato l'elenco di file libsndfile1-dev:

[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 
[...] 

strano, librerie di andare in directory di libreria non standard? Stupido packager.

Oh bene. Scaricato la fonte per scikits.audiolab, ha scritto una site.cfg come questo:

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

Ora python setup.py build e sudo setup.py install completato con successo.

Avanti, sparato su una conchiglia Python, ha cercato di 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 

Ma:

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

E _sndfile.so trovato alla /usr/local/lib/python2.7/dist-packages/scikits.audiolab-0.11.0-py2.7-linux-x86_64.egg/scikits/audiolab/pysndfile/_sndfile.so.

Quindi, la mia domanda è,

  1. Wtf sta succedendo? Perché python non trova _sndfile.so?
  2. Qualcuno ha utilizzato con successo scikits.audiolab nel 2011 su una distribuzione Linux 2011? Come hai fatto?
  3. Esistono buone librerie alternative per la lettura di file WAV ENORME (tipo, 10 GB/8 ore) immessi da blocchi in NumPy?

risposta

4

Qualcuno ha suggerito di controllare ldd _sndfile.so. Fatto questo e ottenuto

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) 

Interessante! Viene anche fatto riferimento a un gruppo di librerie di file in formato, che probabilmente non ho installato.

sudo aptitude install flac vorbis-tools e voilà!

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

Probabilmente posso ignorare che l'avvertimento di perdere il supporto ALSA per ora come è probabilmente usato per la registrazione e la riproduzione locale - e questo è un server in ogni caso.

Sarebbe stato molto più semplice se la mancanza di libFLAC, libvorbis e libvorbisenc aveva innescato un errore di generazione in tempo negli script di build di scikits.audiolab ... Dopo tutto, il messaggio di errore finale menziona nulla di queste librerie.

0

Edit: Ho appena realizzato questo non è il caso, come pysndfile sembra essere in bundle ... non dovrei rispondendo roba la prima cosa al mattino;)

Risposta a 1: Sndfile è libreria AC, è probabilmente necessario installare il wrapper Python per questo: http://code.google.com/p/libsndfile-python/

0

Non si desidera avere l'avviso sulle intestazioni alsa, basta installare la lib.

sudo apt-get install libasound2-dev

che ha funzionato per me ..

Problemi correlati