# Майкл Кэтберт рассказал студентам MIT о цифровом представлении нот

Источник: https://www.youtube.com/watch?v=JneQrFoLq18
Канал: MIT OpenCourseWare
Опубликовано: 15.10.2025

---

На занятии по вычислительному музыковедению в Массачусетском технологическом институте (MIT) профессор Майкл Скотт Асато Кэтберт предложил студентам временно отказаться от слайдов и заглянуть в саму суть музыкальных понятий. Разбирая базовые элементы, такие как нота, длительность и темп, участники дискуссии попытались понять, как перевести интуитивное человеческое восприятие искусства на строгий язык программирования. Этот интерактивный урок обнажил глубокие противоречия между традиционной нотной записью, физикой звука и цифровыми архитектурами данных.

## 🧠 Компьютеры, ноты и когнитивные ловушки
[[JUMP:0:00]]

Профессор курса «21M.383: Вычислительная теория и анализ музыки» Майкл Кэтберт начал лекцию с неожиданного признания: в его личных записях было четко помечено «Майк, без паники, слайдов PowerPoint сегодня не будет». Прошлый урок был перегружен визуальной информацией, поэтому текущее занятие лектор решил сделать наименее технологичным в семестре, чтобы детально обсудить, что именно люди подразумевают под музыкой.

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

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

* **Первая фраза:** вся аудитория единогласно насчитала три ноты.
* **Вторая фраза:** студенты услышали одну ноту, однако Кэтберт заявил, что с точки зрения нотации исполнил четыре ноты — целую, связанную лигой с четвертной, шестнадцатой и шестьдесят четвертой. Профессор пояснил, что рассуждал исключительно в рамках графической нотной системы.
* **Третья фраза (глиссандо):** студент Джонатан предположил, что прозвучали две ноты (две разные высоты). Другой студент, Адам, насчитал 14 или 15 хроматических нот, исполненных на приеме слур (легато). Сам Кэтберт признался, что закладывал в этот пример концепцию бесконечного количества нот из-за непрерывности скольжения звука.
* **Четвертая фраза (резкий хлопок в ладони):** мнения разделились от нуля и единицы до бесконечности. Лектор присудил этому звуку значение «0», аргументировав это тем, что в его понимании нота обязательно должна обладать поддающейся спецификации высотой звука.

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

## 🎼 Что такое нота: от физики воздуха до кода music21
[[JUMP:12:35]]

Объединив студентов в рабочие группы, Кэтберт поручил им вывести универсальное определение ноты, которое подходило бы для объяснения компьютеру. В процессе обсуждения профессор выделил ключевое слово, звучавшее почти за каждым столом, — «представление» (representation). 

Студентка Карима сформулировала базовое определение: нота — это репрезентация чего-либо, обладающего высотой звука (pitch) и длительностью (duration). Профессор в шутку заметил, что под такое описание подходит и траектория летящего самолета, у которого тоже есть тангаж (в английском языке обозначаемый тем же словом *pitch*) и продолжительность полета.

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

В дискуссию вступили другие участники курса, попытавшиеся применить «перкуссионную» логику к остальным инструментам:

* **Струнные (скрипка):** студентка Ванесса указала, что скрипачу не нужно бить по инструменту для извлечения звука, достаточно вести смычок по струне. Однако она добавила, что при расширенном толковании движение смычка тоже можно интерпретировать как своеобразный «удар».
* **Физика звука:** студенты вспомнили базовый курс механики MIT, отметив, что любой звук рождается из вибраций воздуха. Кэтберт развил эту мысль: физически звук становится доступен для восприятия только тогда, когда колеблющийся воздух ударяет в барабанную перепонку человека. Таким образом, даже в пении или игре на духовых присутствует физический акт «удара».

Помимо проблемы единичных звуков, Кэтберт заставил аудиторию задуматься о природе музыкальных аккордов. Является ли аккорд одной комплексной нотой, набором из нескольких нот или принципиально иной сущностью?. 

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

## ⏳ Время в музыке и его цифровое измерение
[[JUMP:22:51]]

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

Студенты предложили использовать для секунд тип данных `float` (число с плавающей точкой). Мэтью возразил, что для секунд или долей лучше использовать класс `Fraction` (дроби), чтобы избежать накопления аппаратных ошибок округления, свойственных типу `float`. Другой участник предложил измерять длительность как дробную часть конкретного музыкального такта (например, в размере 3/4 половинная нота займет ровно 2/3 такта).

Кэтберт одобрил идею с дробями, напомнив, что в музыкальной реальности длительность долей может динамически меняться в пределах одного такта. В качестве примера он привел сложный размер 5/8, где доли могут группироваться как «2+3» или «3+2», из-за чего фактическая временная протяженность долей внутри такта становится неодинаковой.

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

* **Точки (dots):** увеличивают длительность ноты. Их удобнее хранить в виде строки (`string`), так как обозначение двойной точки вроде `8..` вызовет синтаксическую ошибку при попытке записать его числом.
* **Вложенные туплеты (nested tuplets):** триоли внутри квинтолей. Профессор упомянул, что видел не менее 20 программных реализаций нотации, где разработчики сначала создавали туплет как простой атрибут ноты, а затем были вынуждены переписывать код на массивы и списки кортежей, чтобы учесть бесконечную вложенность ритмических делений.
* **Исполнительские маркеры:** стаккато, легато и ферматы, которые напрямую влияют на реальную продолжительность звучания.

Кэтберт отметил, что глубина проработки этих атрибутов зависит от индустрии. Звукорежиссеру или создателю стримингового сервиса важна абсолютная точность в секундах, чтобы аккуратно вырезать кашель из аудиозаписи на интервале от 22.046 до 22.048 секунды. В то же время нотному граверу (издателю партитур) секунды не нужны вовсе — его интересует лишь взаимное расположение долей и графические модификаторы на бумаге.

## 🛠️ От нотного стана к секундам: темп, тики и парное программирование
[[JUMP:32:11]]

Чтобы преобразовать относительную нотную длительность в физические секунды, программе необходимы два внешних параметра: темп (BPM — количество ударов в минуту) и музыкальный размер (time signature).

Проблема усложняется, если вместо точных цифр BPM в старинных партитурах указаны размытые итальянские термины. По словам Кэтберта, композиторы прошлого порой оставляли парадоксальные указания: например, у Георга Фридриха Генделя встречается маркировка *allegro adagio*, звучащая как явное смысловое противоречие. Профессор поделился личным лайфхаком: при написании кода для дефолтных таблиц подстановок (lookup tables) он использует значение 118 или 126 BPM для термина *allegro*, если в метаданных не задан точный темп.

В качестве альтернативы абсолютным секундам Кэтберт упомянул «тики» (ticks) — дискретные единицы времени, используемые в аппаратных интерфейсах и файлах формата MIDI. В MIDI-среде время измеряется количеством тиков на одну четвертную ноту.

Профессор рассказал, что при проектировании библиотеки *music21* он принял волевое решение сделать четвертную ноту фундаментальной единицей измерения всего музыкального процесса. Любые длительности в коде рассчитываются через так называемую «четвертную длину» (quarter length). Профессор самокритично признал, что термин получился неуклюжим для постоянного ввода в среде разработки, и в шутку пожалел, что во время создания библиотеки еще не существовало умных ИИ-помощников вроде GitHub Copilot.

В рамках практической части студенты разбились на пары для написания функции конвертации `ql_to_seconds`, принимающей на вход четвертную длину ноты, темп и размер, и возвращающей значение типа `float`. 

Перед началом кодинга Кэтберт спросил, кто написал хотя бы несколько тест-кейсов для проверки пограничных условий. Выяснилось, что большинство студентов сразу принялись писать логику без тестов. Профессор призвал будущих инженеров MIT искоренять эту привычку, напомнив, что вычислительное музыковедение — молодая и не до конца стандартизированная область, где проверка «крайних случаев» критически важна. Базовым тестом для функции должна была стать проверка эталона: при темпе 60 BPM в размере 4/4 одна четвертная нота должна длиться ровно 1.0 секунду.

## 🧮 Математика ритма: алгоритмы размера и формула точек
[[JUMP:55:32]]

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

Аудитория легко справилась с размером 4/4 (1 доля на четверть), но споткнулась на алла бреве (размер 2/2). Студенты начали выкрикивать неверные ответы, пока кто-то не произнес шепотом правильный вариант: в размере 2/2 четвертная нота занимает 0.5 доли. 

Разбирая архитектуру функции, студенты пришли к выводу, что для стандартных размеров числитель такта вообще не нужен — достаточно знать знаменатель. Но Мэтью вовремя напомнил про сложные трехдольные размеры (6/8, 9/8, 12/8). Кэтберт подтвердил, что для них числитель становится критически важным: код должен содержать операцию взятия остатка от деления (modulo), чтобы определять сложные метры по условию `numerator % 3 == 0` при условии, что сам числитель не равен 3. Так, размер 3/4 содержит три доли, а 6/8 — всего две, хотя математически эти дроби эквивалентны.

В самом конце занятия Кэтберт представил математическую формулу для вычисления длительности ноты с произвольным количеством точек ($n$). При добавлении каждой последующей точки к ноте прибавляется половина от предыдущего прибавленного значения (1.5 для одной точки, 1.75 для двух, 1.875 для трех). Общая формула для коэффициента длительности ноты с $n$ точками выглядит следующим образом:

$$1 + \frac{2^n - 1}{2^n} = 2 - \frac{1}{2^n}$$

Профессор предложил протестировать формулу на экстремальных значениях. Для ноты без точек ($n = 0$) формула дает корректную единицу. Если же передать гипотетическое значение $n = -1$, то итоговый коэффициент превратится в ноль. 

«Каждый раз, когда в вашей программе наступает абсолютная тишина, знайте: вы просто слышите великую симфонию из минус одной точки», — этой ироничной ремаркой Майкл Кэтберт завершил занятие.