logo

Виртуальный барабанщик: K-NN метод против ML-модели

Создали и протестировали два варианта реализации алгоритма виртуального барабанщика.
8782390.jpg
2 (16).png
ИндустрияВнутренний проект
Тип бизнесаIT
РегионРоссия
ИндустрияВнутренний проект
Тип бизнесаIT
РегионРоссия

Клиент

Талантливые программисты талантливы во всем. В нашем офисе есть сцена с музыкальным оборудованием, где мы частенько организовываем выступления и джем-сейшены. В 2022 году наша коллекция инструментов пополнилась барабанной установкой.

Дальше возник вопрос: что делать, если установка есть, а барабанщика нет? «Создать виртуального помощника», – решили мы и помчались в наш Data Science-отдел.

Вызовы

В Data Science-отделе нам предложили два подхода для реализации: метод k-ближайших соседей (K-NN) и обучение нейросети. Но что если не выбирать между двумя вариантами, а сделать оба? Сравнить результаты, выбрать лучший, постепенно дорабатывать… Возможности были, разработчики с энтузиазмом поддержали идею такого батла.

Инвестировать в собственные эксперименты – наша практика. Так мы получаем опыт, чтобы затем переносить его в коммерческие проекты.
1 (15).png

Команда #1: Метод K-NN

Из мелодии синтезатора извлекаются темп, сетка и рисунок. Сравниваются с заранее посчитанными признаками барабанных паттернов из библиотеки. Найденный ритм автоматически подстраивается под текущий темп игры.

drummer-using-drum-sticks-hitting-snare-drum-with-splashing-water-black-background-studio-lighting-close-up (1) (1).jpg

Команда #2: Метод машинного обучения

Вариант с AI-барабанщиком займет дольше времени. Нужно подготовить датасеты из музыкальных последовательностей и отдать ИИ.

После обучения он будет генерировать MIDI-события ударных по входной мелодии и дополнять мелодию синтезатора партией барабанов.

Два разных подхода к одной задаче:

Метод k-ближайших соседей

Как обучали:
Загрузили партии с барабанами из открытой библиотеки Groove MIDI Dataset. Во всех содержались бас-бочка, томы, снейр и хэт. Сами сыграли мелодические фрагменты на синтезаторе. Извлекли те же признаки, соотнесли паттерны друг с другом. Теперь это компактные наборы данных, сгруппированные по признакам, – темпу, рисунку ударов, сетке. Сохранили в библиотеке.

Как работает:
Алгоритм ищет наиболее подходящую барабанную партию по набору признаков из предподготовленной библиотеки. Отслеживает биты и подстраивает найденный паттерн под текущий темп.

ML-метод

Как обучали:
Для варианта с музыкальной нейросетью использовали MIDI-клавиатуру. Получили данные о силе и длительности нажатия для каждой ноты на синтезаторе. Добавили базу MIDI-нот в разных темпах и жанрах: рок, поп, фанк. Всего обработали двадцать один трек с содержанием самых популярных тактовых размеров (4/4, 3/4, 6/8), по семь примеров на каждый. Загрузили и разбили соответствующие друг другу записи на синтезаторе и барабанах – датасет готов. Разделение на определенные интервалы мы использовали, чтобы сделать алгоритм более адаптивным.

Как работает:
Модель принимает ритм и в реальном времени предсказывает MIDI-последовательность. Дополняет мелодию синтезатора партией на ударных, сохраняя при этом общие ключевые свойства: темп, ритм, сетку такта.

Результат

Мы хотели проверить, как разные алгоритмы справятся с одинаковой задачей – генерацией ударных партий в реальном времени. Эксперимент превратился в соревнование команд и дал нам новый опыт.

Оба варианта оказались жизнеспособными и имели как преимущества, так и недостатки.

Команда #1: Метод K-NN

  • Выводит точную и правильную ритм-секцию, но использует только предзаполненные библиотеки.
  • Быстрый в расчетах, меньше вариативности – не сможет создать уникальное звучание.
  • На больших наборах данных «проседает» в скорости предсказаний. Чтобы K-NN корректно работал с большими объемами, нужно структурировать данные с помощью индексов. Решение есть – использовать библиотеку FAISS, она поможет ускорить поиск в десятки раз.

Команда #2: Метод машинного обучения

  • Нейронная сеть оказалась менее точной, менее стабильной по синхронности звука, но более «творческой».
  • Может создавать уникальные ударные партии.
  • Алгоритм отслеживания битов автоматически определяет темп: барабанная партия синхронизируется с синтезатором, даже если ее нет в библиотеке.
  • ML чувствительна к качеству материалов, а само обучение сложно контролировать.
  • Датасет нужен и в первом, и во втором случае, однако способ подготовки и объемы отличаются. ML требует бо́льшего числа и разнообразия данных. В нашем примере был двадцать один трек, что ограничивает выборку. На расширение датасета собственными силами уйдет много времени, даже если задачу частично автоматизировать.

Мы так и не смогли выбрать победителя – каждый жизнеспособен, хоть и подходит под разные цели. Поэтому обернули их в простой дизайн и решили заняться развитием обеих.

K-NN –

стабильнее и быстрее.

grade
ML –

креативнее, умеет генерировать новые варианты.

grade

Напишите нам

/ 5000

Что происходит дальше:

  • Мы получаем запрос, обрабатываем его в течение 24 часов и связываемся по указанным вами e‑mail или телефону для уточнения деталей.

  • Подключаем аналитиков и разработчиков. Совместно они составляют проектное предложение с указанием объемов работ, сроков, стоимости и размера команды.

  • Договариваемся с вами о следующей встрече, чтобы согласовать предложение.

  • Когда все детали улажены, мы подписываем договор и сразу же приступаем к работе.