Перейти к содержимому
Мастерская

Мастерская

Здесь разрабатываются инструменты для домашних занятий — те, которых не хватает ученику музыкальной школы. Идея в одной строчке:

Измерять то, что раньше оценивалось только на слух, — и показывать ребёнку, что он движется вперёд.

Педагог говорит «низковато» — но насколько? На сколько центов? В каком месте пассажа? Стало ли лучше за месяц? Ухо это чувствует, но не считает. Программа — считает.

Вторая половина фразы важнее первой. Измерять умеют многие; трудность в том, чтобы ребёнок открыл программу и довёл занятие до конца.

Какую задачу решаем

Для кого это вообще делается

Все программы, которые мы нашли, написаны для взрослого любителя. Это видно по первой же фразе на сайте Tonai: «сыграйте что-нибудь минуты две — мелодию, пассаж, что угодно». Так занимается взрослый: сам решает, над чем работать, сам себя мотивирует, сам понимает слово «регистр».

Ученик музыкальной школы занимается иначе. У него есть задание на неделю — вот эти такты, вот эта гамма. Есть педагог, который спросит. Есть родитель, чаще всего не музыкант. И нет ни малейшего желания открывать приложение, которое ставит ему оценку.

Этот проект — для него.

Настоящая боль: ребёнок не садится заниматься

Про интонацию говорить легко, но она вторична. Первично то, что инструмент вообще не берут в руки.

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

Соревноваться за внимание ребёнка приходится не с другими тюнерами. С играми.

Отсюда три задачи, которых нет ни у одной найденной программы:

Показывать не ошибки, а движение. Программа, честно сообщившая о 47 фальшивых нотах, ускоряет уход из школы. Ребёнок и так знает, что не получается. Ему нужно обратное: «на прошлой неделе было 20 центов, сегодня 12» — то, чего он сам почувствовать не может, потому что прогресс идёт медленнее, чем работает память об ощущении.

Встраиваться в задание, а не заменять его. Не «сыграй что хочешь», а «сегодня третья строчка, четыре такта, которые задал педагог». Ребёнку не нужен ещё один повод для выбора — ему нужно понятное короткое дело с видимым концом.

Дать родителю роль. Он сидит рядом на домашних занятиях, но помочь не может: «позанимайся» — весь доступный инструмент. Если программа покажет ему, что именно сегодня не выходит и чем помочь, — работать будет не программа, а взрослый рядом. Это сильнее любого интерфейса.

Чего мы обещать не будем

Геймификация — очевидный ответ на «скучно», и он работает хуже, чем кажется. Исследования показывают рост вовлечённости на коротком промежутке, но по долгой дистанции эффект мягче и достигает примерно трети детей. Значки и серии дней не удержат того, кто не хочет заниматься.

Поэтому обещание здесь скромное: не «ребёнок полюбит заниматься», а «ребёнок увидит, что старания дают результат». Это меньше, но это правда, и это проверяется числами.

Что уже есть у других

Честный обзор — чтобы не изобретать сделанное. Проверено в августе 2026:

ПрограммаЧто заявленоЧего нетЗрелость
IntoniaГрафик интонации; темперации равномерная, чистая, пифагороваНе копит историю по дням и неделямС 2008 года, отзывы музыкантов есть
TunableОценка занятия, 18 темпераций, история сессийСтатистика по занятию, а не по конкретной нотеИзвестна, широко используется
Music WrenchРасшифровка игры в реальном времени, импорт MusicXMLПоказывает ошибки, но не копит статистикуНишевая, но живая
TonaiОтчёт по нотам в центах, ИИ-разбор, тепловая карта за 30 днейТолько равномерная темперация; не связано с нотным текстомМай 2026, один разработчик, отзывов нет вовсе

Про последнюю строку стоит сказать отдельно, потому что первое впечатление обманывает. Tonai по описанию делает ровно то, что было главным замыслом этого проекта. Но:

  • вышел в мае 2026, за три месяца дошёл до версии 2.4 — и ни одной оценки в App Store;
  • сделан одним человеком, до этого назывался ScoreHabit (старый адрес до сих пор перенаправляет, а имя пакета осталось com.scorehabit.app);
  • не упоминается ни на форумах скрипачей, ни в подборках приложений — то есть живые музыканты о нём не знают.

Вывод осторожный. Функции заявлены, но проверить их качество нельзя: пользователей, которые бы сказали «работает» или «врёт», просто нет. Заявленная функция и работающая функция — разные вещи. Мы это проверили на себе: у нас тоже был «работающий тюнер» ровно до того момента, как взяли смычок и обнаружили, что в атаке он ошибается на октаву.

Так что повторять карту интонации незачем — но и считать направление закрытым рано.

Что остаётся незанятым

Главный зазор — не технический.

Никто не делает это для ребёнка в музыкальной школе. Все найденные программы предполагают взрослого, который сам выбирает материал, сам разбирает отчёт и сам себя заставляет. Ученик, у которого есть заданные такты, педагог и родитель без музыкального образования, в эту картину не помещается. Английский интерфейс и слова вроде «регистр» отсекают его окончательно.

Отсюда следуют два технических зазора — они нужны именно для того, чтобы программа годилась ребёнку.

Темперация для струнника. Все перечисленные программы, кроме Intonia и Tunable, равняются на равномерный строй — тот, по которому настроено фортепиано. Для струнника это методически неверно: мелодически ведущий тон берётся выше, в двойных нотах строится чистый интервал. Программа, показывающая «на 12 центов выше» там, где ученик сыграл правильно, не помогает, а мешает — и особенно вредна ребёнку, который ещё не научился не доверять прибору.

Intonia и Tunable темперации переключать умеют — но переключать вручную, для всей пьесы сразу. Никто не решает главный вопрос: как понять, что вот здесь ведущий тон и его надо брать выше, а вот здесь двойная нота и нужен чистый интервал. Это требует разбора нотного текста, а не только звука.

Связь с нотным текстом. Ни одна из программ не говорит «в такте 12 на второй доле». Они говорят «фа-диез в верхнем регистре» — а ученик играет не абстрактные ноты, а конкретную пьесу, и педагог задаёт ему такты, а не регистры.

Соединение этих двух зазоров и есть то, чего нет: разобрать нотный текст, понять из него, какая интонация здесь правильная, и показать отклонение в привязке к такту — на языке, которым говорит педагог.

Это может сделать музыкант, а не программист. Знание о том, как интонирует струнник и как устроены занятия ребёнка, — редкая часть задачи. Код тут проще, и написать его сегодня может кто угодно.

Оговорка

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

Но и обратное неверно. Про Tonai легко было бы написать «всё уже сделано, расходимся» — по описанию на сайте так и выглядит. Проверка показала другое: приложение без единого отзыва, о котором не знают музыканты. Судить о продукте по его же рекламному тексту — та же ошибка, что судить о своей программе по зелёным тестам.

И главное: написать код сегодня может кто угодно. Тот же Tonai сделан одним человеком за три месяца. Отличает проекты не код, а понимание, для кого он. У нас есть то, чего нельзя нагуглить: ребёнок в музыкальной школе, педагог рядом и вечера домашних занятий, которые видно своими глазами.

Проект остаётся осмысленным как учебный и открытый: код на русском, разбирается школьником, каждое утверждение проверяется расчётом или измерением. А узкие зазоры — нормальное место для школьного проекта: там, где большие продукты не окупают разработку, а знание предметной области решает больше, чем размер команды.

Что уже работает

Первая половина задачи — проверка нотного текста — решена и используется в проекте. Начата вторая половина — работа с живым звуком.

Валидатор нашёл то, что при чтении глазами пропускалось: разрывы на октаву в трёх гаммах, подтекстовки, съехавшие относительно нот, ноты ниже открытой струны. Это работающая идея — её и надо развивать дальше, на живой звук.

План разработки

Этапы идут по возрастанию сложности; каждый следующий опирается на предыдущий.

Этап 1. Тюнер и дрон

Определение высоты звука с микрофона в реальном времени и бурдонная нота для отработки интонации.

  • Захват звука через getUserMediaстраница тюнера
  • Детектор основного тона: автокорреляция с нормировкой (YIN) — 14 тестов на синтезированных сигналах
  • Отображение отклонения в центах, а не «стрелочкой» — цифра информативнее
  • Проверка точности на эталонных сигналах и на записях живой виолончели — ноль ошибок на всех четырёх открытых струнах
  • Отсечение атаки смычка: тюнер молчит первую треть секунды ноты, пока звук не установился
  • Дрон: непрерывная нота выбранной высоты для проверки интонации относительно тоники
  • Перенести обработку в AudioWorklet (сейчас ScriptProcessor — работает везде, но формально устарел)

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

Инженерная сложность. Виолончель — не синус: богатый спектр, сильные обертоны, вибрато. Сигнал совпадает сам с собой и через период основного тона, и через два таких периода, — если выбирать совпадение по глубине, можно ошибиться на октаву. Поэтому YIN берёт не самое глубокое совпадение, а первое: настоящий период всегда идёт раньше своих кратных.

Как это выглядит на деле: воспроизвести ошибку на синтезированных сигналах не удалось ни одним из восьми способов, а первая же запись живой виолончели показала её за минуту. Причина оказалась не в алгоритме, а в звуке: в момент атаки смычка основной тон в 30–50 раз слабее второй гармоники, и тюнер честно показывает то, что звучит, — октавой выше. Подробности на странице тюнера.

Этап 2. Занятие, которое ребёнок доведёт до конца

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

  • Задание вместо свободной игры: «четыре такта, которые задал педагог» — короткое дело с видимым концом
  • Итог занятия как движение, а не список ошибок: «было 20 центов, стало 12», без слова «неправильно»
  • Экран для родителя: что сегодня не выходит и чем помочь, языком человека без музыкального образования
  • Никаких оценок и баллов: ребёнок и так знает, что не получается

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

Чего мы не делаем. Значков, серий дней и соревнований. Исследования показывают, что геймификация даёт всплеск вовлечённости, но по долгой дистанции работает примерно у трети детей. Обещание здесь скромнее и честнее: не «полюбит заниматься», а «увидит, что старания дают результат».

Этап 3. Правильный эталон вместо темперированного

Первый из двух технических зазоров, не закрытых ни одной готовой программой. Нужен, чтобы итог занятия из этапа 2 был правдой, а не придиркой прибора.

  • Разбор нотного текста: определить тональность и функцию каждой ступени (ведущий тон, терция аккорда, основной тон)
  • Правило интонирования: насколько ведущий тон берётся выше темперированного, насколько ниже — терция в чистом трезвучии
  • Показ отклонения от музыкально верной высоты, а не от строя фортепиано
  • Режим сравнения: «по темперации» и «как играет струнник» — чтобы разница была видна

Почему это главное. Все готовые программы меряют от равномерного строя. Для струнника это неверно: сыграв ведущий тон «на 12 центов выше», ученик сыграл правильно, а программа показывает ошибку. Никто не решает вопрос, как понять из нот, какая интонация здесь уместна.

Инженерная сложность. Требуется не звук, а анализ нотного текста: тональность, функция ступени, есть ли двойная нота. Тут пригодится pitch.js, который уже умеет строить и определять интервалы.

Этап 4. Привязка к нотному тексту

Второй технический зазор. Готовые программы говорят «фа-диез в верхнем регистре» — а ученик играет конкретную пьесу и думает тактами, потому что педагог задаёт ему такты.

  • Загрузка MusicXML, рендеринг через OpenSheetMusicDisplay
  • Сопоставление сыгранного с нотным текстом
  • Подсветка проблемных тактов прямо в партитуре

Что это даёт. Не «фа-диез уезжает», а «в такте 12 на второй доле». С этим ученик может работать сам, без расшифровки.

Тудушка

Задачи, которые в готовых программах уже решены или не окупают усилий. Делать, если останется время после этапов 2–4.

Локальный дневник занятий. Запись через MediaRecorder, хранение в OPFS, метаданные в IndexedDB, экспорт и удаление одной кнопкой. Приватность здесь архитектурная: сервера у проекта нет, отправлять данные некуда. Но сама по себе фича есть у всех.

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

Перенос обработки в AudioWorklet. Сейчас ScriptProcessor: формально устарел, но работает везде. Менять, когда понадобится писать и анализировать одновременно.

Синхронизация с педагогом. Передача записей внутри частной сети, комментарии к тактам. Требует, чтобы программой пользовался кто-то кроме автора, — до этого далеко.

Score following (аккомпанемент, следящий за солистом). Закрыто коммерческими продуктами и десятилетиями исследований. Браться не стоит.

Открытые вопросы

Честно о том, что пока не решено:

Точность определения высоты на низких нотах. Компромисс придётся искать экспериментально. Измерено. Струна До — 65 Гц, период 15 мс. Перебор длины окна на синтезированном сигнале дал границу:

ОкноРезультат на струне До
20 мстон не определяется вовсе
30 мсошибка 35 центов — больше той, что тюнер должен показывать
40 мсточно

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

Темперация. Из открытого вопроса это стало главной задачей проекта — см. этап 3 выше. Тюнер пока показывает отклонение от равномерной темперации, и это честно помечено на его странице как недостаток. Нерешённым остаётся конкретное: насколько именно выше берётся ведущий тон (в источниках называют от 8 до 20 центов) и как определить из нотного текста, что здесь двойная нота, а не мелодия.

Проверка на живом звуке. Пока не проверено на записях виолончели. Проверено. Записи открытых струн разобраны покадрово: детектор узнаёт ноту верно в 88–92% случаев (у струны Ля 70%, но там четверть записи — тишина до начала игры).

Главное, что дала эта проверка: синтетика не показывала проблемы, которая есть на инструменте. Восемь попыток воспроизвести прыжок на октаву на сгенерированных сигналах дали «ошибки нет» — идеально периодический сигнал не может воспроизвести то, что рождается из неидеальности. Причина нашлась только на записи: в момент атаки смычка основной тон в 30–50 раз слабее второй гармоники.

Вывод на будущее: проверка на синтетике доказывает, что верна арифметика, и ничего не говорит о том, работает ли программа на инструменте. Это разные вопросы.

Score following (аккомпанемент, следящий за солистом) — самая амбициозная идея. Прежде чем браться, надо попробовать существующие решения: возможно, задача уже решена лучше, чем осилит школьный проект.

Технические принципы

Без сервера. Всё считается в браузере. Это ограничение, но оно же — главная гарантия приватности.

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

Код как учебный материал. Комментарии на русском в узловых местах, понятные имена, никаких трюков там, где можно написать явно. Проект делается школьником и должен быть ему понятен — иначе он не сможет объяснить его на защите.

Участие

Проект открыт: исходный код, лицензия MIT для кода и CC BY-SA для материалов. Если вы преподаёте или занимаетесь обработкой звука и видите, что здесь сделано неправильно, — замечания приветствуются.