LibROSA - библиотека обработки аудио

LibROSA - библиотека обработки аудио

Категория статьи: Нейронные сети

Проект: Shazam своими руками

Обработка аудио файлов. Mel-спектрограмма.

Всем привет!

Сегодня хочу поговорить о библиотеке LibROSA, с помощью которой мы будем работать с нашими аудио файлами.

На официальной странице LibROSA есть вся необходимая информация по установке, а так же API документация с открытым исходным кодом.

Давайте запустим ноутбук в Colab и подключим библиотеку LibROSA. Выведем версию предустановленной библиотеки.

import librosa
print(librosa.__version__)

Скорее всего версия предустановленной библиотеки отличается от последней стабильной версии (можно посмотреть на официальном сайте).

У меня для сайта https://evgenykondratev.ru установлена версия 0.8.0

Если установлена более ранняя версия, лучше установить последнюю, т.к. некоторые функции которые нам понадобятся, могут не работать.

Удаляем библиотеку librosa. Для этого в новой ячейке выполним код:

!pip uninstall librosa

и устанавливаем последнюю. В новой ячейки выполним код:

!pip install librosa

После установки необходимо перезапустить "Среду выполнения" ("Среда выполнения" -> "Перезапустить среду выполнения") (Runtime -> Restart runtime...)

Можно проверить какая версия установлена сейчас

Теперь давайте загрузим 2х секундный кусочек одной из музыкальных композиций и отобразим график амплитуды сигнала

import matplotlib.pyplot as plt
X, sr = librosa.load(mp3_dir + "/0000.mp3", duration=2.0)
fig = plt.figure(figsize=(20, 4))
plt.plot(X)
plt.show()

Вот, что должно получиться:

Обычно в чистом виде с такими данными не работают, а переводят данные в другое представление использую mel-шкалу

mel_spec = librosa.feature.melspectrogram(y=X,
                                          sr=sr,
                                          n_mels=512)
mel_log = librosa.power_to_db(mel_spec)
plt.figure(figsize=(20, 4))
plt.imshow(mel_log.T)
plt.show()

Здесь используются два метода melspectrogram, который возвращает mel-спектрограмму и power_to_db - преобразует энергию сигнала в децибелы.

Для удобства отображения графика я транспонировал получившийся массив данных mel_log.

На данном графике шкала x - это частота по шкале mel, шкала y - это время (начало композиции сверху), а яркость пикселя отражает уровень сигнала в децибелах

С такими данными уже можно работать.