Описание
компьютера Радио-86РК
|
Журнал
РАДИО
|
МУЗЫКАЛЬНЫЙ РЕДАКТОР.
Музыкальный редактор - программа, которая позволяет значительно расширить возможности компьютера. Предлагаемый музыкальный редактор реализует экранный режим работы. С его помощью можно сочинять музыку, проигрывать произведения и автоматически обрабатывать их до получения независимого модуля, написанного как на языке BASIC, так и в машинных кодах. Этот модуль можно использовать затем в любых программах на компьютере "Радио-86РК". Кроме этого, музыкальный редактор может быть использован как одноголосый клавишный музыкальный инструмент.
Для работы редактора необходим таймер К580ИВ53, подключенный по схеме, опубликованной в журнале "Радио"*. При этом в начале программы переменным А0, А1, А2, A3 нужно присвоить адреса портов таймера, все остальные операции по адаптации выполнит сама программа.
Набрав текст программы музыкального редактора (табл.1), запустим ее по директиве RUN. На экране с левой стороны появится изображение нотного стана, а справа - подсказки для работы. Далее отобразится вертикальная полоса из символов и сообщение "NEW?". Ответом на это сообщение будут "Y" и "N". Ответ "Y" вызовет переход программы в режим записи нот. Поступив иначе, программа будет искать конец нотной записи, которая расположена в памяти, и далее произойдет запрос параметров воспроизведения и исполнение нотной записи.
РЕЖИМ ЗАПИСИ НОТ
После ответа на вопрос "NEW?" - "Y" на экране появится указатель ноты " " и вверху надпись "Нота-1 ". Указатель определяет ту ноту, которая будет исполнена или записана. Указатель перемещают клавишами перемещения курсора вверх и вниз. Нажатие на одну из этих клавиш приводит к появлению звука выбранной ноты. Название нот записано в крайней левой колонке. Перемещать указатель ноты можно, нажав на клавишу, напротив которой находится нужная нота (колонка символов справа от нотного стана). После того, как выбрана нужная нота, нажатием на одну из цифровых клавиш "1 - 9" задают длительность. В ответ на ввод длительности компьютер увеличит цифру в указателе номера нот - "Нота - ...", что приведет к записи ноты в память и переход к вводу следующей ноты. Указатель "Нота -..." показывает порядковый номер вводимой ноты. Если произошла ошибка, то ее можно исправить нажатием на клавишу " " - переход к предыдущей ноте, а затем вернуться, нажав клавишу "® ".
Диезы выбирают нажатием на клавишу "АР2", после чего вводят длительность. Паузы задают нажатием на клавишу пробела и также вводят ее длительность нажатием на одну из цифровых клавиш. При этом указатель ноты исчезает.
Если нужно установить конец нотной записи, то нажимают клавишу "F1". Выходят из режима записи нот нажатием на клавишу "F3". В этом случае конец нотной записи устанавливается по максимальному значению указателя "Нота -...".
Таким способом сочинять музыку или "переводить" ее, для проигрывания на компьютере, может совершенно несведущий в нотной грамоте человек. Для перевода музыки на компьютер достаточно указатель ноты поставить в позицию на нотном стане, соответствующей позиции вводимой ноты. Длительность (табл.2) ноты выбирают следующим способом: просматривают весь текст нот для ввода и выбирают ноту с самой маленькой длительностью. Эта нота будет иметь длительность 1, все отличные ноты будут иметь длительность большую, т. е. 2, 3, 4... с паузами поступают аналогично.
РЕЖИМ ВВОДА ДИРЕКТИВ.
После нажатия на клавишу "F3" компьютер запрашивает параметры для воспроизведения. Возникает слово "Темп?", ответом на запрос должно быть число, равное темпу (темп в ударах в минуту), в котором исполнится запись нот (табл.3).
Выбирают директиву нажатием на клавишу с цифрой, соответствующей данной директиве.
ОПИСАНИЕ ДИРЕКТИВ
1 - ПОВТОРИТЬ
Эта директива приводит к воспроизведению записи нот с новой настройкой параметров.
2 - ДОПИСАТЬ
По этой директиве указатель номера ноты устанавливается на последнюю ноту, а программа переходит в режим записи нот. Указатель ноты установится в позицию, на нотном стане, предыдущей ноты.
3 - ИСПРАВИТЬ
Этой директивой корректируют нотную запись. По ней программа выводит сообщение "С ноты (всего...)?", ответом на него служит номер ноты, которую нужно исправить. Компьютер устанавливает указатель номера ноты на корректируемую ноту, а указатель ноты показывает ее расположение на нотном стане.
4 - РАСПЕЧАТАТЬ
По ней распечатывается нотная запись а виде коэффициентов пересчета и длительности для создания независимого музыкального модуля на языке BASIC. На экране отображается информация:
Распечатанные данные заносят в операторы DATA такого модуля в следующей последовательности: МЛ. БАЙТ, СТ. БАЙТ, ДЛИТ. Нулевые коэффициенты отображают паузу. Музыкальный модуль может выглядеть так:
ПРИМЕР 2где А0, A2 - адреса портов таймера, а N - коэффициент, задающий темп. Перед созданием модуля смотрите текст музыкального редактора директивой NEW, предварительно записав информацию для DATA, а потом наберите данную программу. (Подробнее в "Радио"†.). ^
Нотную запись можно распечатать в виде частот и длительностей. Для этого режим 4 переделывают так:
ПРИМЕР 3Это может понадобиться, если необходимо, воспроизвести музыкальный фрагмент, который задается в частотах. Например: музыкальный звонок или часы.
5 - ОТТРАНСЛИРОВАТЬ
С помощью этой директивы музыкальный модуль в машинных кодах создается программой автоматически. Его можно вызвать из BASIC функцией USR, а из программы на ассемблере командой CALL. Естественно, что перед первым обращением к музыкальному модулю из программы на ассемблере порты таймера должны быть настроены соответствующим образом. Для создания музыкального модуля компьютер запрашивает дополнительную информацию сообщением:Адрес конца текста программы не точный, но не превышает этого (зависит от плотности текста). Если запись нот не умещается в памяти, то нужно распечатать память в символьном виде в МОНИТОРЕ и изменить адрес не оттранслированной нотной записи в начале программы (переменная - BS).
Через некоторый промежуток времени (в зависимости от длины нотной записи) экран очистится, появится сообщение:
и компьютер перейдет в режим МОНИТОРа.
6-NEW
По этой директиве из памяти стирается старая нотная запись, и музыкальный редактор переводится в режим ввода нот.
Если нажата любая другая клавиша, то управление передается монитору, а на экране возникнет сообщение:Нетранслированная нотная запись - запись, которую можно редактировать музыкальным редактором. Ее можно записать по директиве "О" МОНИТОРа, а потом считать с магнитофона директивой "I".
После проигрывания нотной записи ее можно отредактировать. Так как коды музыки не находятся в массивах, то если случайно вышли в МОНИТОР из программы, можно восстановить нотную запись (в отличие, если коды находились в массивах), воспользовавшись пунктами 3, 4 вышеизложенного.
ОПИСАНИЕ ТЕКСТА ПРОГРАММЫ
Программа начинается с присвоения переменным А0, А1, А2, A3 адресов портов таймера К580ИВ53. Если таймер включен по схеме, публиковавшейся в журнале, то адреса будут соответственно А000Н, А001Н, А002Н, А003Н. Далее переменной BS присваивается адрес начала текста нотной записи, с которого он расположен в памяти (4200Н). Затем в строке 640 происходит загрузка таймера управляющими словами. В 670, 680-й строках программы описываются функции FNS (X) и FNM (X). Так как в BASIC числа находятся в десятичной системе, то для записи в память его нужно разбить на два байта, что и делают функции FNM (X)-младший байт от X, FNS (X)- старший байт от X. Описание массивов данных - в 720-й строке. Эти массивы:
Строки с 740-й по 980-ю отображают на экране нотный стан и поясняющие записи. Далее, в 1000-1030-й строках происходит заполнение массивов. При заполнении массивов коэффициенты деления берутся из DATA в порядке повышения тона и с помощью ранее описанных функций заносятся в массивы. Массив кодов клавиш заносится из DATA, расположенным в строках 1910, 1920. Если расположение клавиш для перемещения указателя нот не устраивает, то изменив коды клавишв DATA, вы сможете расположить управляющие клавиши по своему вкусу. В строках 130-190 происходит поиск конечного адреса нетранслированный текст нот, содержащегося в ОЗУ. В случае если текста там нет, переменной конца текста - КХ присвоится адрес начала текста и компьютер перейдет в режим записи нот. Если текст есть (ответ на вопрос "NEW?" - "N") - в строках 160, 170 происходит поиск конца текста по маркеру конца - 0FFH. Если же маркер не найден (просматривается область от 4200Н до 6200Н), то компьютер запросит длину, и по этой длине установит маркер конца. Далее происходит проигрывание записи нот.
Режим записи нот реализуется в программе - строками 240-380, в которых находится основной цикл записи нот. В цикле происходит: ввод кода нажатой клавиши - строка 240, корректировка ординаты - Y указателя записи с нот - строка 250, переход к подпрограмме возврата к предыдущей ноте - строка 260, установка конца записи по "F1"-строка 270, переход по коду к предыдущей ноте - строка 280, установка указателя записи по нажатой клавише с использованием подпрограммы выбора положения курсора по клавишам и перевод вверх или вниз указателя ноты по нотному стану - строки 300, 310, выход в режим ввода директив при нажатии на "F3", воспроизведение ноты - строка 360, определение коэффициента деления по ноте - строки 90, 100, 110, запись ноты и паузы в память - строки 370, 350. А теперь рассмотрим описание цикла более подробно.
Подпрограмма возврата к предыдущей ноте, как и программа перехода к следующей ноте, предотвращает выход за пределы нотного текста и воспроизводит ноту, на которую перешли. Подпрограмма выбора положения указателя нот по клавишам, которая используется в цикле, описана в строках 1060-1080. Подпрограмма в цикле сравнивает код введенной клавиши с кодами из массива К. В случае совпадения значение переменной цикла - I и будет ординатой указателя нот. Воспроизведение ноты реализуется загрузкой коэффициентов деления в таймер. Коэффициенты деления по ноте извлекаются из массивов S, М или DS, DM через аргумент Y. Запись ноты и паузы осуществляется в подпрограммах, которые используют один формат записи ноты: младший коэффициент деления; старший коэффициент деления, длительность, координаты курсора. Таким образом, каждая нота описывается четырьмя байтами. При записи паузы коэффициентам деления присваивается нулевое значение.
Ввод параметров воспроизведения и цикл воспроизведения описаны в строках 400-530. В строке 410 вводится темп - Z, а переменной R=28/Z корректируется для исполнения в ударах в минуту. Характер воспроизведения задается в строках 420-460. Он включает:
Так как интерпретатор для выполнения каждой команды затрачивает определенную долю времени, то темп игры будет незначительно отличаться от заданного, особенно при быстром темпе воспроизведения, однако в оттранслированном модуле темп игры не отличается от заданного. Сам цикл воспроизведения расположен в строках 490-530. Его аналог, за исключением отображения указателя нот, - программа, исходный текст, который приведен в табл.4.
Вывод директив редактора осуществляется в строках 560-580, а ввод и адресация по директивам - в строках 590-620.
В заключение остановимся на описании некоторых директив:
2-ДОПИСАТЬ. Реализуется в строках 1380, 1390, в которых указатель устанавливается на последнюю ноту в записи.
3 - ИСПРАВИТЬ. Аналогична директиве дописать, однако номер нотной записи вводит пользователь - строки 1410, 1450.
4 - РАСПЕЧАТАТЬ. Реализуется в строках 1470-1510 с помощью цикла, в котором функцией PEEK отображается информация из памяти, в соответствии с форматом записи.
5 - ОТТРАНСЛИРОВАТЬ. Эта директива описана в строках 1530-1840 и использует программу воспроизведения оттранслированной нотной записи, исходный текст которой приведен в табл.4.
А. СОРОКИН
г. Москва
* "Радио", N9 11, 1987 г.
Описание
компьютера Радио-86РК
|
Журнал
РАДИО
|