Категория статьи: Нейронные сети
Проект: 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 - это время (начало композиции сверху), а яркость пикселя отражает уровень сигнала в децибелах
С такими данными уже можно работать.