Мастерская
Здесь разрабатываются инструменты для домашних занятий — те, которых не хватает ученику музыкальной школы. Идея в одной строчке:
Измерять то, что раньше оценивалось только на слух, — и показывать ребёнку, что он движется вперёд.
Педагог говорит «низковато» — но насколько? На сколько центов? В каком месте пассажа? Стало ли лучше за месяц? Ухо это чувствует, но не считает. Программа — считает.
Вторая половина фразы важнее первой. Измерять умеют многие; трудность в том, чтобы ребёнок открыл программу и довёл занятие до конца.
Какую задачу решаем
Для кого это вообще делается
Все программы, которые мы нашли, написаны для взрослого любителя. Это видно по первой же фразе на сайте 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 для материалов. Если вы преподаёте или занимаетесь обработкой звука и видите, что здесь сделано неправильно, — замечания приветствуются.