pythonpython-3.xavconvlibrosa

librosa.load: file not found error on loading a file


I am trying to use librosa to analyze .wav files. I started with creating a list which stores the names of all the .wav files it detected.

data_dir = '/Users/raghav/Desktop/FSU/summer research'
audio_file = glob(data_dir + '/*.wav')

I can see the names of all the files in the list 'audio_file'. But when I load any of the audio file, it gives me file not found error.

audio, sfreq = lr.load(audio_file[0])

error output:

Traceback (most recent call last):
  File "read_audio.py", line 10, in <module>
    audio, sfreq = lr.load(audio_file[1])
  File "/usr/local/lib/python3.7/site-packages/librosa/core/audio.py", line 119, in load
    with audioread.audio_open(os.path.realpath(path)) as input_file:    
  File "/usr/local/lib/python3.7/site-packages/audioread/__init__.py", line 107, in audio_open
    backends = available_backends()
  File "/usr/local/lib/python3.7/site-packages/audioread/__init__.py", line 86, in available_backends
    if ffdec.available():
  File "/usr/local/lib/python3.7/site-packages/audioread/ffdec.py", line 108, in available
    creationflags=PROC_FLAGS,
  File "/usr/local/lib/python3.7/site-packages/audioread/ffdec.py", line 94, in popen_multiple
    return subprocess.Popen(cmd, *args, **kwargs)
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 775, in __init__
    restore_signals, start_new_session)
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/subprocess.py", line 1522, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)

FileNotFoundError: [Errno 2] No such file or directory: 'avconv': 'avconv'

Solution

  • Two things:

    1. It looks like you are using Homebrew
    2. avconv is not in your path

    Assuming, you have never installed it, you should be able to solve this simply by installing it. I.e. run:

    $ brew install libav
    

    (see here)

    If avconv is already installed, you probably need to look into your PATH environment and check whether it is in the path.

    That said, using a system-wide Python as installed by Homebrew is a bad idea, because it does not quickly let you change Python versions and dependency sets. It all becomes one big mess within weeks.

    One (among multiple) solutions for this is to use miniconda. It quickly lets you activate Python interpreters with defined dependency sets.

    So to really solve the issue, I'd recommend to install miniconda and create a plain Python 3.6 environment:

    $ conda create -n librosa_env python=3.6
    

    Activate the environment:

    $ source activate librosa_env
    

    Then add the conda-forge channel (a repository that contains many libraries like librosa):

    $ conda config --add channels conda-forge
    

    Then install librosa:

    $ conda install librosa
    

    By installing librosa this way, conda should take care of all dependencies, incl. libav.