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

MIT OpenCourseWare 1,1 тыс. 1 ч 2 мин 8 мин 15.10.2025
Главное

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

🛠️ От нотного стана к секундам: темп, тики и парное программирование 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 секунду.

🧮 Математика ритма: алгоритмы размера и формула точек 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$, то итоговый коэффициент превратится в ноль.

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

💬 Цитаты

«Компьютеры действительно очень, очень глупы, пока мы не сделаем их умными.»

Майкл Скотт Асато Кэтберт 01:31

«Любое определение, которое вы собираетесь закодировать в компьютер, в какой-то момент полностью все испортит.»

Майкл Скотт Асато Кэтберт 20:18

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

Майкл Скотт Асато Кэтберт 01:02:31
👥 Спикер
📖 Термины
music21
Специализированная библиотека с открытым исходным кодом на языке Python, предназначенная для компьютерного анализа музыкального текста и теории.
Глиссандо
Музыкальный прием, заключающийся в плавном, непрерывном скольжении от одного звука к другому.
Тремоло
Прием исполнения, представляющий собой быстрое многократное повторение одного звука либо чередование двух несоседних звуков.
Туплет (особые виды ритмического деления)
Ритмические группы (триоли, квинтоли и т.д.), которые временно делят базовую длительность на иное количество долей, чем предусмотрено текущим размером.
MIDI
Цифровой стандарт и формат файлов, кодирующий музыкальные события (нажатие клавиш, длительность, громкость) в виде дискретных числовых команд.
📊 Цифры
⚖️ Другая сторона
Технологии и IT MIT OpenCourseWare music21 Python вычислительное музыковедение