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

Команда #1: Метод K-NN
Из мелодии синтезатора извлекаются темп, сетка и рисунок. Сравниваются с заранее посчитанными признаками барабанных паттернов из библиотеки. Найденный ритм автоматически подстраивается под текущий темп игры.

Команда #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 требует бо́льшего числа и разнообразия данных. В нашем примере был двадцать один трек, что ограничивает выборку. На расширение датасета собственными силами уйдет много времени, даже если задачу частично автоматизировать.
Мы так и не смогли выбрать победителя – каждый жизнеспособен, хоть и подходит под разные цели. Поэтому обернули их в простой дизайн и решили заняться развитием обеих.
стабильнее и быстрее.
креативнее, умеет генерировать новые варианты.
Что происходит дальше:
Мы получаем запрос, обрабатываем его в течение 24 часов и связываемся по указанным вами e‑mail или телефону для уточнения деталей.
Подключаем аналитиков и разработчиков. Совместно они составляют проектное предложение с указанием объемов работ, сроков, стоимости и размера команды.
Договариваемся с вами о следующей встрече, чтобы согласовать предложение.
Когда все детали улажены, мы подписываем договор и сразу же приступаем к работе.