В главе, посвященной нотной грамоте мы выяснили, что для нашего проекта нам потребуется 24 разных звука - две октавы. Для кодирования каждой ноты можно предложить разные системы, например нота до - 01, до-диез - 02, ре - 03 и т.д. до ноты си второй октавы, которая получит код 24 .

В данной системе принципиальным является кодирование каждой ноты двумя цифрами. Нота до именно 01, а не 0. Если не следовать этому правилу, мы не сможем правильно интерпретировать код 111. Толи это три раза нажата первая клавиша, толи нажата первая и одиннадцатая клавиша.

К сожалению, данный код будет трудно писать и еще труднее править. Догадайтесь, что за мелодия закодирована в следующем фрагменте: 051013121013101210060805? В данном проекте я использовал другую, более наглядную систему.

Каждая нота в моем коде состоит из трех символов. Первый символ - это буква с, d, e, f, g, a, h, смысл данных символов смотрите в главе про нотную грамоту. Он кодирует основной тон. Если нужная нота именно нота ля, то второй символ - это символ подчеркивания _. Если же кодируемая нота - диез, то второй символ принимает значение d. Третий символ принимает два значения, 1 и 2, в зависимости от того, какой октаве принадлежит данная нота первой или второй. Приведенный выше фрагмент в данной системе примет вид: e_1a_1c_2h_1a_1c_2a_1h_1a_1f_1g_1e_1 . Мне кажется, что он достаточно наглядный. (Это код музыкальной темы в фильме «Крестный отец».)

Длительность каждой ноты принимает шесть различных значений. Для кодирования, я использовал следующую систему:

целая нота - 01,
1/2 нота - 02,
1/4 нота - 04,
1/8 нота - 08,
1/16 нота - 16,
1/32 нота - 32.

Я думаю, закономерность понятна. Для приведенного выше примера набор длительностей примет вид: 080808080808080808080802.

Итак, для каждого музыкального фрагмента в памяти компьютера будет храниться две строки, два кода - «мелодический» и «временной». При работе над проектом был соблазн объединить оба кода в один и кодировать каждую ноту пятью символами, например a_108. Но я от этого отказался. Во-первых, такой код значительно менее нагляден, а во-вторых, и это главное, такой код музыканту будет трудно повторить. Дело в том, что код образца в дальнейшем будет сравниваться с кодом, который будет формироваться игрой музыканта.

Давайте именно так «музыкант» называть в дальнейшем нашего будущего пользователя программой. Это поможет нам избежать всяческих тавтологий, например, «игра игрока».

И если научиться выбирать нужную клавишу рояля человеку вполне под силу, соблюдать правильно длительности совсем не просто - управление роялем происходит нажатием клавиши мышки, а мышь на клавишу еще нужно навести, а лишь потом щелкнуть. Поэтому «правильной» будут считаться мелодия, у которой только «мелодический» код совпадает с кодом образца.