# Майкл Катберт и Майкл Гуд: «Как программировать музыку?»

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

---

## Инструменты анализа музыки: кодирование и голосоведение
[[JUMP:00:00]]

На 15-м занятии курса MIT OpenCourseWare Майкл Катберт подводит итоги работы с классами эквивалентности и обсуждает новые концепции: от программной обработки музыкальных данных до принципов голосоведения. В дискуссии также принял участие приглашенный эксперт Майкл Гуд, создатель стандарта MusicXML, который поделился опытом разработки музыкальных стандартов и карьеры на стыке музыки и технологий.

### 🧩 Итоги по классам эквивалентности
[[JUMP:00:27]]

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

*   Октавная эквивалентность.
*   Транспозиция.
*   Инверсия.
*   Эквивалентность энгармонического написания (Spelling).
*   Инструментальная эквивалентность.
*   Длительность ноты.

Профессор обратил внимание на частую ошибку в программах студентов: неправильную обработку граничных нот, таких как «си-диез» (B#), которые звучат как «до» (C), но требуют корректного учета октав при вычислении интервалов.

### 🎼 Корпуса данных и роль MusicXML
[[JUMP:08:35]]

Студенты представили найденные ими музыкальные электронные базы данных:

*   **Musipedia** — база данных с функцией поиска по музыкальным фрагментам.
*   **Ultimate Guitar** — ресурс, эволюционировавший от простых ASCII-табулатур до продвинутых форматов.
*   **Video Game Music Database** — обширный репозиторий MIDI-файлов, популярных из-за малого веса и стандарта.
*   **Jazzomat** — база джазовых соло с транскрипциями и CSV-файлами.

Приглашенный гость **Майкл Гуд** отметил, что для создания жизнеспособного стандарта представления музыки (каким стал MusicXML) необходимо наличие сообщества пользователей и поддержка со стороны ключевых приложений (например, Finale или Sibelius). По мнению Гуда, сейчас для разработчиков важнее «решать крутые задачи» на базе существующих инструментов, а не изобретать новые форматы с нуля.

### 🎶 Голосоведение и алгоритмы
[[JUMP:34:38]]

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

В качестве примера он приводит «строгий контрапункт» (species counterpoint):

*   Используются правила, ограничивающие как горизонтальные (мелодические) интервалы, так и вертикальные (гармонические).
*   Запрещенные приемы включают параллельные квинты и неконсонансные интервалы (например, септимы).
*   Задача для компьютера — «дописать» второй голос (контрапункт) к заданному *cantus firmus* (фиксированной мелодии).

### 💻 Технический практикум: библиотека music21
[[JUMP:41:46]]

Вторая часть занятия посвящена работе с модулем `interval` в библиотеке **music21**. Основные команды и подходы:

1.  **Создание интервалов:**
    *   Создание через строку: `interval.Interval('P5')`.
    *   Создание из двух нот: `interval.Interval(pitch1, pitch2)`.
2.  **Свойства интервалов:**
    *   `.name` — имя.
    *   `.semitones` — количество полутонов.
    *   `.simpleName` — упрощенное имя для составных интервалов.
3.  **Транспозиция:**
    *   Метод `transposePitch(interval, inPlace=True)` позволяет изменять высоту ноты.
    *   Важно помнить, что транспозиция «на месте» меняет объект.
4.  **Специфика music21:**
    *   Библиотека учитывает музыкальную теорию: например, уменьшенная септима считается диссонансом, несмотря на то, что звучит как большая секста.
    *   Использование целых чисел (например, `4`) для создания интервалов позволяет программе «догадываться» о диатонике, если контекст не задан жестко.