Проблема с установкой Librosa должным образом (sndfile.dll не имеет атрибута с именем sf_wchar_open)

Я пытаюсь установить librosa в среде Anaconda, я создал совершенно новую и установленную librosa, однако у меня все еще возникает эта проблема, даже когда я повторно устанавливаю пакет cffi, audioread и другие. Я не знаю, как решить эту проблему.

AttributeError                            Traceback (most recent call last)
<ipython-input-4-d10be33b41bf> in <module>
      1 # load files with librosa as a series of floating points
----> 2 debussy, sr = librosa.load(debussy_file)

~\.conda\envs\librosa\lib\site-packages\librosa\core\audio.py in load(path, sr, mono, offset, duration, dtype, res_type)
    144 
    145     try:
--> 146         with sf.SoundFile(path) as sf_desc:
    147             sr_native = sf_desc.samplerate
    148             if offset:

~\.conda\envs\librosa\lib\site-packages\soundfile.py in __init__(self, file, mode, samplerate, channels, subtype, endian, format, closefd)
    625         self._info = _create_info_struct(file, mode, samplerate, channels,
    626                                          format, subtype, endian)
--> 627         self._file = self._open(file, mode_int, closefd)
    628         if set(mode).issuperset('r+') and self.seekable():
    629             # Move write position to 0 (like in Python file objects)

~\.conda\envs\librosa\lib\site-packages\soundfile.py in _open(self, file, mode_int, closefd)
   1168             if isinstance(file, _unicode):
   1169                 if _sys.platform == 'win32':
-> 1170                     openfunction = _snd.sf_wchar_open
   1171                 else:
   1172                     file = file.encode(_sys.getfilesystemencoding())

AttributeError: cffi library 'C:\Users\User\.conda\envs\librosa\Library\bin\sndfile.dll' has no function, constant or global variable named 'sf_wchar_open'

2 ответа

Решение

Я не знаю, как это исправить, но удаляю этот код из soundfile.py решил это за меня.

Просто удалите if в строке 1170 и измените его на:

if isinstance(file, _unicode):
   file = file.encode(_sys.getfilesystemencoding())

Ошибка больше не возникает. Я ищу кого-нибудь, кто объяснит, почему и как, но пока это работает, приятель!

Похоже, libsndfile 1.0.29 для conda-forge не работает по состоянию на 5 ноября 2020 года. Пока он не будет исправлен, "решения", опубликованные на GitHub, должны либо 1) использовать pip для установки librosa, либо 2) в conda, удалите libsndfile и установите звуковой файл из pip.

https://github.com/bastibe/SoundFile/issues/278

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