librosa.load () слишком долго загружает (пробует) файлы mp3 - PullRequest
2 голосов
/ 22 января 2020

Я пытаюсь сэмплировать (преобразовать аналоговые в цифровые) mp3-файлы с помощью следующего кода Python с использованием библиотеки librosa, но это занимает слишком много времени (около 4 секунд для одного файла). Я подозреваю, что это потому, что librosa не поддерживает mp3 и, следовательно, использует более медленный audioread для выборки mp3

Код:

import time
import librosa

s = time.time()
for i in mp3_list[:10]: # list of mp3 file paths, doing for 10 files
    y, sr = librosa.load(i)

print('time taken =', time.time() - s)

time taken = 36.55561399459839

Я также получаю это предупреждение:

UserWarning: "PySoundFile failed. Trying audioread instead."

Очевидно, что это слишком много времени для любого практического применения. Я хочу знать, есть ли лучшие альтернативы этому?

Для сравнения, это заняло всего 1.2 секунд общего времени, чтобы отобрать 10 одинаковых wav преобразований

1 Ответ

1 голос
/ 23 января 2020

Так что предупреждение как бы намекает на это. Разработчики Librosa ответили на аналогичный вопрос в этом вопросе GitHub :

Это предупреждение всегда будет появляться при загрузке mp3, поскольку libsndfile не поддерживает (пока / в настоящее время) формат mp3. Librosa сначала пытается использовать libsndfile, и если это не удается, она прибегнет к пакету audioread, который немного медленнее и более хрупок, но поддерживает больше форматов.

Это подтверждается в Librosa-код : try ... except RuntimeError ...

Так что в этом случае вы можете либо реализовать свой собственный load(), который напрямую использует audioread, чтобы избежать потери времени в первом блоке librosa.load(), или вы можете использовать другую библиотеку, такую ​​как pydub . Кроме того, вы можете использовать ffmpeg в , чтобы конвертировать ваши mp3 в wave перед их загрузкой.

...