GitHub Copilot для пианиста: AI автодополняет ноты прямо на смартфоне

Индепендент-разработчик опубликовал детальный разбор проекта RollTab — приложения для iPhone, которое слушает, как вы играете на MIDI-клавиатуре, и тут же продолжает мелодию силами нейросети. Никаких облаков, никаких серверов: всё происходит локально на устройстве. Под капотом — трансформер на 125 миллионов параметров, работающий в реальном времени со скоростью около 108 нот в секунду на iPhone 15.


Идея: «Copilot, но для фортепиано»

Почти год назад автор начал экспериментировать с идеей: подключить MIDI-пианино к телефону, сыграть что-нибудь — и позволить AI продолжить за тебя. По аналогии с GitHub Copilot, только для музыки.

Концепция проста: вместо того чтобы подсказывать следующую строку кода, модель «промптируется» несколькими нотами на MIDI-клавиатуре. Затем модель продолжает то, что вы сыграли — полностью на устройстве.

«Think GitHub Copilot, but for piano» — так автор описывает суть проекта в одной фразе.

Задача оказалась глубже, чем ожидалось: понадобилось четырнадцать экспериментов, прежде чем результат стал достаточно хорошим, чтобы о нём написать.


Как устроена модель

ℹ Что такое MIDI?
MIDI (Musical Instrument Digital Interface) — стандартный протокол передачи музыкальных данных между электронными инструментами и компьютерами. Он кодирует не звук, а «события»: какая нота нажата, с какой силой и на какое время.

Три ключевых фактора дали наибольший прирост качества: правильное представление MIDI-данных, агрессивная очистка обучающей выборки и применение DPO (Direct Preference Optimization) — дообучения на основе предпочтений — на финальном этапе.

Набор данных

Финальный датасет содержал несколько сотен тысяч MIDI-файлов — около 300 миллионов нотных событий.

Интересный вывод: попытка увеличить датасет в пять раз дала обратный эффект — модели получились хуже. Качество и отбор данных оказались важнее их объёма.

Структура обучения

На начальном этапе модель обучалась с помощью кросс-энтропийной функции потерь по пяти выходным головам: тип события, высота ноты, временной сдвиг, длительность и скорость нажатия (velocity). Это позволяло отслеживать точность каждого параметра отдельно.

Однако у этого подхода есть принципиальное ограничение: продолжение музыки не имеет единственно правильного ответа. Одна удержанная нота даёт модели лишь одно «верное» продолжение, хотя музыкально корректных вариантов может быть множество.

Именно поэтому DPO (Direct Preference Optimization — метод оптимизации прямых предпочтений) стал финальным шагом: он учит модель выбирать более «музыкально убедительные» варианты продолжения.


graph TD
 A[Обучающий датасет\n300M нотных событий] --> B[Предобработка\nи очистка данных]
 B --> C[Трансформер 125M параметров\nкросс-энтропия по 5 головам]
 C --> D[DPO дообучение\nна предпочтениях]
 D --> E[Квантизация\nдля iPhone]
 E --> F[RollTab App\n~108 нот/сек на iPhone 15]


Техническое представление MIDI

Автор разработал специальный токенизатор для MIDI-событий, в котором каждая нота представлена набором из пяти атрибутов:

АтрибутЗначенияОписание
event_typePAD, BOS, EOS, NOTE, MASKТип события
pitch0–128MIDI-высота ноты
delta0–48 шагов + 72, 96, 144, 192Временной сдвиг
duration1–96 шагов + 144, 192, 288, 384Длительность
velocity4, 12, 20, …, 124Сила нажатия

Временная сетка построена из расчёта 24 шага на одну четвертную ноту.

💡 Почему 5 голов, а не один токен?
Многолобая (multi-head) архитектура позволяет отдельно контролировать точность каждого музыкального параметра во время обучения — вместо того чтобы сваливать всё в единый токен. Это упрощает диагностику и улучшает сходимость.

RollTab: бесплатное приложение для iPhone

Приложение RollTab доступно бесплатно для всех, у кого есть MIDI-клавиатура и iPhone или iPad.

⚠ Требования
Для работы RollTab необходима физическая MIDI-клавиатура, подключённая к iPhone или iPad. Приложение не поддерживает виртуальный ввод.

Контекст: on-device AI для творчества

Проект RollTab вписывается в более широкий тренд: запуск мощных AI-моделей непосредственно на потребительских устройствах, без передачи данных в облако. Это особенно важно для музыкантов, которым критична минимальная задержка (latency): даже несколько десятков миллисекунд задержки облачного запроса делают реальное время игры невозможным.

В последние годы наблюдается рост числа нативных приложений для AI-генерации MIDI — рынок активно движется к нативным решениям. Но большинство из них работают через облако или требуют подписки. RollTab принципиально отличается: модель живёт прямо на чипе смартфона.

📝 Аналогия с разработкой
Если GitHub Copilot помогает разработчику дописывать код, то RollTab помогает пианисту дописывать мелодию. Оба инструмента не заменяют человека — они подхватывают его мысль и предлагают продолжение.

Автор открыто поделился всеми деталями обучения в своём блоге, что делает проект ценным ориентиром для тех, кто хочет обучать компактные специализированные модели под мобильные устройства. Главный урок, который можно вынести: качество данных бьёт их количество, а DPO способен существенно улучшить «музыкальность» выхода там, где метрики на основе кросс-энтропии уже не помогают.