М-да, ну если Вы действительно сами сумели создать ТАКОЕ, то, полагаю, наша помощь Вам не требуется. Единственное... у Вас практически в каждой подпрограмме в качестве входного параметра фигурирует конструкция типа
a:array[1..n] of note
Не знаю, как Ваш транслятор, а мой такого не понимает, ему можно только
a:array of note
Ну или предварительно ввести
TYPE AR=array[1..n] of note и уже в параметрах подпрограммы указывать тип AR. Но не думаю, что в этом Ваши сложности (слишком просто). А в остальном - ну кто же, кроме Вас, сумеет правильно протестировать созданного Вами же монстра?