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

試著忘記壹切 提交于 2019-12-18 09:42:00

问题


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'

回答1:


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.




回答2:


That error suggests librosa is unable to find FFMPEG executables, of which avconv is an example.

When not converting different samplerates, FFMPEG is often not needed. You can try to specify the sample size to be the original of the audio file during load()




回答3:


Upgrading audioread to 2.1.8 fixed this issue for me. The bugfix can be inspected here: https://github.com/beetbox/audioread/commit/8c4e236fda38ce1d1f6dafc4715074a790e62849



来源:https://stackoverflow.com/questions/56246836/librosa-load-file-not-found-error-on-loading-a-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!