Кажется, в моём музыкальном тренажёре появился преподаватель

Вчера перед сном долго думал над одной довольно простой проблемой. Допустим, с технической частью тренажёра всё получится: программа покажет ноты, аппликатуру, будет получать данные с MIDI-инструмента или слушать обычную блокфлейту через микрофон, сравнивать исполнение с оригиналом и находить ошибки.
Но дальше-то что?
Ну покажет она мне: «точность 87%, шесть ошибок, ритм 74%». И что мне, человеку, который только учится играть, делать с этими цифрами?
Преподаватель ведь нужен не для того, чтобы сообщить ученику количество ошибок. Он должен услышать или увидеть, что именно человек делает неправильно, объяснить причину и подсказать, как это исправить.
И тут я лежу перед сном и думаю: стоп. А искусственный интеллект мне тогда зачем?
Кажется, я нашёл ему в этом проекте вполне нормальную работу.
Пусть компьютер считает, а ИИ думает, что с этим делать
Сначала возникла очевидная идея: дать нейросети запись моей игры и попросить её разобраться, где я ошибся. Но практически сразу я от этой мысли отказался.
Это получается какой-то странный путь. Мы опять заставляем нейросеть угадывать то, что компьютер способен определить значительно точнее обычными алгоритмами.
Особенно если речь идёт об электронном инструменте с MIDI. Там вообще гадать не надо. Тренажёр знает, какая нота должна прозвучать, а инструмент сообщает, какая прозвучала на самом деле, когда она началась, сколько длилась и какие дополнительные параметры исполнения были переданы.
С обычной блокфлейтой будет сложнее — там действительно придётся анализировать звук с микрофона. Но конечный результат всё равно можно привести примерно к одному виду.
Например, после упражнения программа получила такие результаты:
точность нот — 91%, ритм — 74%, шесть ранних вступлений, три слишком короткие ноты, одна пропущенная, а больше всего ошибок почему-то возникает при переходе с Соль на Ля.
Вот здесь ИИ уже действительно может пригодиться.
Ему не нужно слушать пять минут моего художественного свиста и пытаться понять, что там произошло. Обычная программа уже всё посчитала и положила перед ним результаты.
А его задача — посмотреть на них примерно так, как посмотрел бы преподаватель.
Не просто сказать:
«Вы совершили шесть ошибок».
Спасибо, я уже и сам расстроился.
А, например:
«С нотами в целом всё хорошо, но во второй половине упражнения ты начинаешь спешить. Большая часть ошибок возникает на переходе Соль–Ля. Не нужно сейчас снова играть произведение целиком. Давай возьмём четыре проблемных такта и снизим темп до 65%. Когда два раза подряд сыграешь их без ошибок, увеличим скорость».
Вот это уже совсем другое дело.
А если он ещё и будет помнить, как я учился вчера?
И тут идея стала ещё интереснее.
Зачем анализировать только последнее исполнение? Тренажёр всё равно будет хранить историю занятий. Значит, искусственному преподавателю можно показывать не только результат сегодняшней попытки, но и то, что происходило неделю или месяц назад.
Допустим, неделю назад я постоянно ошибался на одном переходе. Сначала правильно получалось пять раз из десяти, потом семь, а сегодня уже девять. Значит, проблема практически решена и мучить человека этим упражнением дальше особого смысла нет.
Зато программа замечает другую закономерность: уже несколько занятий подряд я начинаю спешить во второй половине длинных музыкальных фраз.
И тогда вместо очередного бессмысленного повторения одного и того же произведения виртуальный преподаватель может сказать примерно следующее:
«С переходом Соль–Ля стало намного лучше, к нему пока возвращаться не будем. А вот с ритмом появилась устойчивая проблема. Сегодня давай поработаем с метрономом и возьмём несколько более простых упражнений на удержание темпа».
То есть программа постепенно начинает анализировать уже не отдельные ошибки, а сам процесс обучения.
А это именно то, чего мне не хватало в первоначальной идее тренажёра.
И с ним можно будет разговаривать
Представил ещё одну ситуацию. Я играю мелодию и вижу, что в одном месте раз за разом возникает одна и та же ошибка.
Почему?
Сейчас я полез бы в интернет, начал читать статьи, смотреть видео и пытаться понять, что именно делаю неправильно.
А здесь можно просто спросить:
«Почему я постоянно ошибаюсь в этом месте?»
И самое интересное, что ИИ не придётся отвечать наугад. Тренажёр может дать ему весь контекст: какой у меня инструмент, какое произведение я играю, какой сейчас такт, какая нота должна быть, что сыграл я и как проходили предыдущие попытки.
Допустим, выясняется, что Соль сама по себе у меня получается нормально во всём произведении. Но именно после определённой ноты я три раза подряд вместо Соль сыграл Ля.
Тогда уже можно предположить, что проблема не в чтении нот и не в самой Соль, а именно в переходе между двумя аппликатурами.
И вместо общего совета «больше занимайтесь» получить вполне конкретное упражнение на две-три ноты.
Вот это уже начинает напоминать преподавателя.
Не настоящего, конечно. Человека с опытом, слухом и способностью видеть ученика никакая красивая надпись «AI» автоматически не заменяет. Но для самостоятельных занятий такая обратная связь может оказаться очень полезной.
Самое смешное — ИИ здесь вообще не главный
Чем дольше я об этом думаю, тем больше мне нравится именно такая архитектура.
Я совершенно не хочу делать очередной проект, где на всё подряд наклеена модная надпись «искусственный интеллект».
Основную работу должен выполнять обычный код. MIDI принимаем обычным кодом. Частоту звука определяем обычным кодом. Ритм, длительность, попадание в ноты, отклонения от темпа — всё это тоже считаем обычными алгоритмами.
Получается примерно такая цепочка:
инструмент → MIDI или микрофон → анализ исполнения → найденные ошибки → история занятий → ИИ-преподаватель.
И только последний этап отдаётся нейросети.
Она не решает, была ли сыграна нота Соль. Это уже известно точно. Она пытается решить гораздо более интересную задачу:
почему у ученика возникает такая ошибка и что ему лучше сделать дальше?
Мне кажется, именно здесь искусственный интеллект действительно находится на своём месте.
Причём интернет может вообще не понадобиться
И тут всё неожиданно хорошо состыковалось с моей идеей бесплатного тренажёра для Linux.
Я не хочу, чтобы программа однажды сказала человеку:
«Извините, ваша подписка закончилась. Чтобы узнать, почему вы опять неправильно сыграли Соль, внесите 599 рублей». 😄
Базовый тренажёр должен работать сам по себе. Показ нот, MIDI, микрофон, проверка исполнения, статистика, упражнения — всё это совершенно реально сделать локально.
А ИИ-преподаватель станет дополнительным уровнем.
Причём необязательно облачным. Сейчас существуют небольшие языковые модели, которые можно запускать прямо на компьютере. Возможно, для такой задачи огромная нейросеть вообще не понадобится. Ей ведь не требуется знать всё человечество от рецепта борща до устройства ядерного реактора. Она получает довольно узкий набор данных и должна помочь ученику разобраться с занятиями.
Получится довольно забавная штука: установил программу на Linux, подключил MIDI-инструмент — и можешь заниматься вообще без интернета.
А если компьютер слабый или хочется более серьёзную модель, можно оставить возможность подключения облачного ИИ.
Это уже технические детали. До них ещё надо дожить.
В общем, я опять просто хотел научиться играть на блокфлейте
Иногда полезно вспомнить, с чего вообще началась эта история.
Я хотел научиться играть на музыкальном инструменте.
Потом решил написать небольшой веб-тренажёр.
Потом захотел научить его слушать микрофон.
Потом обнаружил MIDI-духовые инструменты.
Потом выбрал Roland AE-01 для экспериментов.
А вчера перед сном лежал и размышлял уже над архитектурой виртуального преподавателя с искусственным интеллектом.
Кажется, где-то между блокфлейтой и нейросетью я немного увлёкся.
Но что интересно — всё это постепенно складывается в довольно понятную систему.
Программа знает, что нужно сыграть. Инструмент или микрофон сообщает, что человек сыграл на самом деле. Алгоритмы находят, где именно он ошибся. История занятий показывает, какие ошибки случайны, а какие повторяются постоянно.
А искусственному интеллекту остаётся самый человеческий вопрос:
«Хорошо. Я понял, что сыграл неправильно. А что мне теперь делать, чтобы в следующий раз получилось лучше?»
Если удастся нормально ответить именно на него, тогда это будет уже не просто программа, которая подсвечивает ноты.
Получится что-то гораздо интереснее.
А пока мне вообще-то пора собирать вещи и готовиться к переезду — машина заказана уже на 15:00.
Но, судя по всему, вчера перед сном мой мозг решил, что разработка виртуального преподавателя — задача куда более срочная.
Tux Linux
Поддержать автора
- номер счёта/карты
- 2204 3201 5444 9864
- получатель
- Боев Федор
Комментарии 5
Войдите, чтобы оставить комментарий.