Здравствуйте! Пишу программу, адаптирующую игру на пианино под клавиатуру ПК. Программа питается MIDI - файлами. Она переводит их в собственную нотацию, похожую на стандартную музыкальную. Вот пример
Как видно из примера, есть всего четыре линии. Туда помещаются всего семь нот. Октава ноты помечается ее цветом. Плюс такой нотации в том, что для клавиатуры ПК не надо привязывать все 88 нот. Только по 7 (плюс 1 динамическая если аккорд) для каждой руки. Пользователь нажимает на клавишу закрепленную под одну ноту, а машина определяет по контексту произведения октаву, и проигрывает нужный звук.
У меня нету музыкального образования и до вчерашнего дня не знал про тональности) Пришлось узнать, но до этого, потратил пару дней на решение задачи по коллизии черных и белых клавиш.
Конкретнее: в некоторых произведениях поочередно нажимаются стоящие рядом белые и черные клавиши. В программе, я все черные клавиши помечал как диезные. Поэтому, иногда черные клавиши становились в один ряд с белыми(которые ниже на пол тона), а иногда нет.
Это меня не устраивало, нужно было определять, когда их делать бемольными, а когда оставлять диезными. Эту задачу пытался решить в лоб. Получился запутанный и тяжелый алгоритм, похожий на "костыли". Решил один день потратить на изучение сольфеджио и не зря. Оказывается не надо городить никаких костылей, все давно заложено в теории музыки. В стандарте MIDI нашел мета-событие Key Signature она указывает на тональность. И зная эту тональность можно легко выстроить по нужным знакам. НО, не во всех МИДИ-файлах есть это мета-событие. И у меня на этот счет появились несколько предположений, прошу Вас подтвердить или подсказать как правильней.
1. Если знать только знаки при ключе(диез/бемоль), не зная тональности. Можно ли предполагать что любая встреченная черная клавиша имеет этот знак, не считая некоторых локальных исключительных случаев?
2. Развитие первого вопроса. Если, например, в произведении встречаются много до и до# или ля ля#, можно ли сказать что знаки при ключе бемольные? А если , к примеру ре и ре бемоль то знаки при ключе диезные?