Композиция музыкальных партий

Описание

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

Основными сущностями этого языка являются:

  • нота (C, D, E, F, G, A, B и альтерации: \(\sharp\), \(\flat\) и \(\natural\));
  • пауза;
  • интервал (диатонический и хроматический);
  • длительность (целая, половинная, четверная и т.д);
  • лад (последовательность нот в рамках одной октавы);
  • гармония (аккорды, сопровождающие мелодию).

Библиотека должна предоставлять возможности для создания мелодий, заготовок партий и средства объединения этих базовых кусочков в более сложные партии, партитуры и композиции.

../_images/greensleeves.gif

Английская народная песня «Зелёные рукава».

Минимальные требования (базовая часть)

Базовая реализация проекта, в которой должны разбираться все участники, должна:

  • предоставлять возможность задания одноголосых мелодий (с паузами);
  • транспонирование (перемещение всех нот на заданный интервал);
  • последовательное склеивание нескольких мелодий;
  • наложение мелодий (создание многоголосной партии).

Расширенная библиотека (дополнительная часть)

Библиотека для композиции музыкальных партий должна быть расширена как минимум двумя различными возможностями:

  • поддержка триолей, квартолей и пр.
  • поддержка различных размеров;
  • сжатие/растяжение мелодии;
  • гармония, генерация нот по аккордам, угадывание гармонии;
  • поддержка текста песен;
  • и т.д.

Генерация композиции (дополнительная часть)

Возможна генерации композиции в любом из следующих форматов:

Графический интерфейс (дополнительная часть)

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

Графический интерфейс должен реализовывать как минимум ввод отдельных нот/пауз с разными длительностями, а также выделение и удаление нот/пауз. Дополнительно должна быть реализована как минимум одна возможность:

  • выбор/смена размера композиции;
  • выделение/копирование/вставка/удаление отрезка партии;
  • транспонирование выделенного участка на заданный интервал (хроматический/диатонический);
  • поддержка триолей, квартолей и пр.
  • визуализация и редактирование гармонии;
  • визуализация и редактирование знаков артикуляции и динамики;
  • визуализация и редактирование текста;
  • и т.д.