Здравствуйте!
Заранее прошу прощения, за возможные неправильные употребления терминов =) Я делаю ритм игру типа Guitar Hero, питающуюся MIDI-файлами. Программа отображает играемые в файле ноты на 4, 6 или 8 (в зависимости от установленной сложности) клавиши клавиатуры ПК. Я долго пытался сам разобраться, но чем глубже лезу в муз. теорию, тем больше у меня все путается. Перед тем, как задать вопрос, поясню что я делаю на картинках, так как я плохо владею терминологией и вы можете не так меня понять.
Задача
Упаковать все используемые ноты в песне на на 4,6 или 8 (в зависимости от установленной сложности) клавиши клавиатуры ПК, при этом сохранив иллюзию игры на пианино благодаря схожему перебиранию нот.
рис. 1. Скрин части песни на программе Synthesia
рис. 2. Скрин той же части песни из моей программы
Как видно из картинок, играемые ноты "сжимаются" до четырех клавиш, сохраняя при этом последовательность нажатий.
Алгоритм упаковки нот таков. Вся песня делится на временнЫе отрезки, при которых диапазон играемых нот не превышает количество установленных клавиш клавиатуры ПК. При игре, на конкретных отрезках времени, каждая клавиша соответствует определенной ноте. Наглядно на картинках:
Рис. 3. Исходные данные
Рис. 4 После разделения на отрезки программа получит такие данные.
Проблема
А как быть с аккордами?! Конечно, можно и их упаковать по описанному выше алгоритму, но при заданном количестве клавиш равному четырем — это будут просто тупые нажатия на одни и те же клавиши. Я хочу сделать возможность задания сложности игры. Чем меньше будет заданных клавиш клавиатуры ПК, тем легче играть. Это относится и к количеству одновременно играемых нот. Чем их меньше, тем легче игра. Более опытные игроки смогут поставить себе бОльшее количество клавиш для игры, и играть все ноты аккордов. Для достижения такой цели, нужно привести исходные данные с аккордами к виду как на рисунке 3.
Я попробовал на слух упростить показанную ниже мелодию, оставив только по одной ноте из аккордов, так чтобы она осталась прежней.
Рис. 5 часть той же мелодии, что и на предыдущих картинках
Рис. 6. После самостоятельного ручного упрощения.
При упрощении, так получилось, что приходилось убирать только нижние ноты. Я не уверен, можно ли принимать это за закономерность.
Вопросы:
1. Достаточно ли оставить в аккордах самые высокие ноты для упрощения?
1.1 Как алгоритмически упростить мелодию?
Из самостоятельных попыток изучения сольфеджио я запомнил, что аккорды имеют главный звук, но я так и не смог понять как его найти. Вроде бы при одних интервалах он сверху, а при других снизу, но в аккордах несколько интервалов! Про какой идет речь?!
2. Достаточно ли оставить главные звуки аккордов для упрощения? Если да, то:
2.1 Как найти главные звуки аккордов? Есть ли закономерность в их нахождении?
2.2 Если есть закономерность, есть ли таблица? Или можете ли вы, пожалуйста, описать, где будут главные звуки при 2, 3, 4, 5, 6 одновременных нотах?
2.3 Есть ли понятие "второй по главности звук", как его найти?