# Онтология музыки: как MusicXML и современные форматы меняют наше чтение партитур

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

---

На лекции курса MIT OpenCourseWare, посвященной музыкальным информационным технологиям, рассматриваются фундаментальные принципы представления музыкальных данных. Основное внимание уделяется переходу от отдельных нот и высот к сложным структурам — музыкальным партитурам. Профессор анализирует концепции онтологии в контексте программирования, разбирает успехи и типичные ошибки студентов в работе с музыкальным кодом и намечает вектор развития форматов записи музыки — от классического MusicXML до современных адаптивных стандартов.

## 🎵 Итоги первой практики: ошибки модуло и «грязные трюки»
[[JUMP:00:11]]

В начале занятия преподаватель подвел итоги выполнения первого практического задания (P set 1), отметив высокий уровень работ, особенно в части манипуляций с интервалами и инверсиями [01:32]. Однако были выявлены системные сложности, связанные с математическим представлением музыки.

**Типичные технические проблемы:**

*   **Modulo 12 и альтерации:** При расчете высотных классов (pitch classes) от 0 до 11 многие забывали применять оператор `mod 12` после добавления знаков альтерации [04:42]. Например, «Си-диез» (B#) — это не просто `11 + 1`, а `(11 + 1) % 12`, что возвращает нас к 0 (до).
*   **Энгармонизм:** Сложности возникали при кодировании редких нот, таких как «си-дубль-диез» [03:46]. Профессор отметил, что для упрощения алгоритмов часто создаются массивы соответствий, но они должны корректно обрабатывать энгармонически равные звуки (C# и Db).
*   **Сравнение множеств:** Одной из ловушек задания была проверка возможности трансформации одного набора звуков в другой через инверсию.
    *   Студенты часто забывали проверить количество нот: невозможно трансформировать трезвучие в септаккорд (из 3 нот в 4) с помощью изученных инструментов [08:04].
    *   «Грязный трюк» с пустым множеством: инверсия пустого множества дает пустое множество, что приводило к вылету некоторых алгоритмов, не учитывающих этот крайний случай [08:44].

## 👥 Стейкхолдеры и разница восприятия высоты звука
[[JUMP:10:31]]

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

**Основные категории и их потребности:**

1.  **Звукорежиссеры:** Для них приоритетны точные значения частот (в Гц). Музыканту цифра 440 Гц скажет меньше, чем название ноты «ля», но для анализа сигналов это критически важные данные [11:13].
2.  **Гитаристы:** Часто игнорируют энгармоническую запись и ноты, предпочитая табулатуры или позиции на грифе (fret positions) [13:51].
3.  **Теоретики и когнитивисты:** Исследуют «подразумеваемую теорию музыки» у исполнителей, не знающих нот, но обладающих интуитивным пониманием структуры (например, импровизации на балийских гамеланах) [15:40].
4.  **Компьютеры и DAW:** Для цифровых рабочих станций идеальным является отсутствие энгармонических сложностей и использование MIDI-номеров, что упрощает вычисления [17:24].

Интересное наблюдение было сделано в контексте «абсолютного слуха». По словам профессора, люди с абсолютным слухом иначе воспринимают музыкальную структуру: они могут не заметить повторения контура мелодии, если она транспонирована, так как воспринимают каждую ноту как уникальную фиксированную сущность [21:59].

## 🏗️ Онтология музыки: таксономия и меронимия
[[JUMP:23:04]]

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

### 1. Таксономия (отношение «is a» / «является»)
Это иерархия классов и подклассов [30:52].

*   **Пример:** «Менуэт — это танец», «Стаккато — это тип артикуляции», «Половинка — это нота».
*   В программировании это реализуется через наследование (subclassing). Например, все числа в Python являются подклассами `Number`, но `float` и `int` имеют свои особенности [36:16].

### 2. Меронимия (отношение «has a» / «обладает»)
Это отношение части и целого [38:04].

*   **Пример:** Нота *имеет* длительность, нота *имеет* флаг или штиль.
*   **Проблема дизайна:** Имеет ли «четвертная» нота потенциал для флага, который просто не активен, или флаг — это атрибут только восьмых и более мелких длительностей? [41:17]. От этого выбора зависит архитектура музыкального ПО.

## 📄 От «Розеттского камня» до будущего нотации
[[JUMP:46:11]]

Профессор представил инструмент Крейга Саппа (Craig Sapp) — «Розеттский камень цифровых музыкальных представлений» [46:39]. Это ресурс, где одна и та же мелодия закодирована в 32 различных форматах (MusicXML, Humdrum, ABC и др.).

**Эволюция форматов:**

*   **ABC:** Старый, но живучий формат благодаря своей исключительной простоте [48:12].
*   **Musedata:** Формат, где данные представляются в виде колонок и специфических сокращений (например, Q для четверти) [48:36].
*   **MusicXML:** Текущий индустриальный стандарт, созданный выпускником MIT Майклом Гудом (Michael Good) около 22 лет назад [49:04]. Он впервые успешно решил проблему энгармонизма в широком масштабе.

**Главный вызов современности:**
Около 10–15 лет назад возникла проблема «рефлоу» (reflowing) [49:44]. Музыку теперь читают на iPad, смартфонах и мониторах разного размера. Нотация не может быть статичной картинкой (как PDF); она должна адаптироваться под размер экрана, менять количество тактов в строке и размер шрифта. По мнению профессора, сейчас идет глобальная дискуссия о создании формата «следующего поколения», который окончательно решит вопрос адаптивной верстки партитур [50:38].

---
### 🛠 ТЕХНИЧЕСКИЙ ТУТОРИАЛ (Music 21 & Python)

В рамках курса начинается работа с библиотекой **music21**.

**Шаг 1: Импорт базовых компонентов**
Для работы с высотой звука необходимо импортировать класс `Pitch` из модуля `pitch`.
```python
from music21 import pitch
# Где pitch (строчными) — это модуль (папка)
# А Pitch (заглавными) — это класс внутри модуля
```

**Шаг 2: Использование классов**
В модуле `pitch` также содержатся полезные связанные классы, такие как `Accidental` (случайные знаки) [19:43].

**Ограничения программирования:**

*   **Запрещенные атрибуты:** В ближайших заданиях запрещено использовать встроенный метод `transpose`, так как студенты должны реализовать логику транспонирования самостоятельно [22:38].
*   **Обработка ошибок:** Профессор рекомендует всегда учитывать «крайние случаи» (corner cases), такие как пустые списки нот, чтобы избежать падения программы (crash) [09:22].