Перевод авторского описания PROXIMA ORFEUS The Music Assembler Пара вводных слов ----------------- Пользователи Спектрума (и его клонов), активно занимающиеся программированием, могут столкнуться с ситуацией, когда им хотелось бы украсить свою программу какой-нибудь музыкой. Но если покопаться в доступных музыкальных программах,то окажется, что существует только одна, реально на что-то годная, а именно WHAM. WHAM позволяет собрать программу в машинном коде,играющую двухголосную мелодию с шумами, которые можно при некотором воображении назвать ударниками.В написании музыки есть ощутимые проблемы. Можно лишь с трудом добиться приемлемого результата - имеются только восьмые ноты, и все прочие складываются из них, причём при проигрывании слышно пульсации. О разных тональностях автор WHAM'а, видимо, не слышал, и бемоли могут превращаться в диезы. Нельзя одновременно с "ударными" играть тон. При вводе мелодию нельзя сдвигать и раздвигать, при ошибке придётся набирать с начала. Недавно появилась программа MUSIC STUDIO, при близком рассмотрении напоминающая WHAM: два канала - в каждом может быть нота или ударник (лучше, чем в WHAM), ноты опять восьмые, но проигрыватель звучит иначе - получается полное подобие WHAM с другим проигрывателем, а редактирование нот такое же "приятное", как в WHAM. В играх (как зарубежных, так и отечественных) бывают сильно отличающиеся друг от друга и по-разному звучащие проигрыватели, и потому может показаться, что существует некая новая музыкаль- ная программа - как бы новый WHAM. Но нам никаких других программ не попадалось (не берём во внимание те, что не умеют выгружать проигрыватель для использования во внешних програм- мах) - либо они не существуют, либо до нас не добрались (думаю, что первое вернее, иначе не понимаю, почему ни одной такой мне не попалось). Из вышеизложенного следует, что если мы хотим чего-то лучшего, чем WHAM, то это что-то надо написать! ORFEUS играет двухголосные мелодии в сопровождении ударных, причем, в отличие от WHAM, ударные звучат третьим голосом и не мешают музыке. У нот можно ставить любую длительность (целая, половинная, ... шестнадцатая), то же справедливо для пауз. На каждом такте можно независимо установить скорость и тональность (бемоли и диезы в начале каждой строчки), а также длительность затухания (на каждом такте можно указать, с какой скоростью падает громкость ноты). Такты можно вставлять и удалять свобод- но, ноты в такте также легко менять. Если есть какая-нибудь мелодия, написанная в WHAM, её можно загрузить в ORFEUS и проигрывать в нём. Вся программа управлется пятью назначаемыми клавишами (джойстиком). Выгружаемый проигрыватель, в отличие от WHAM, является перемещаемым (можно загрузить и запустить с любого адреса - за небольшим исключением - см. compile). EDITOR ------ Вообще говоря, редактор не является отдельной частью, поэтому здесь будет описан процесс редактирования. Экран делится на три области: два знакоместа снизу - надписи и стрелки (команды); столбик слева шириной в 5 знакомест - ряд чисел и скрипичные ключи, справа от этой области показывается линия начала зацикливания; оставшаяся область содержит запись нот и ударных. По экрану двигается курсор. В первых двух областях он имеет вид стрелки. В последней - если он среди нот, то в виде ноты либо паузы, на которую указывает, со вспомога- тельными линии над и под нотным станом, а если среди ударных - то в виде стрелки. В первых двух областях курсор перемешается плавно, а в третьей - перескакивает с ноты (ударника) на ноту. Вид экрана можете видеть на рисунке, но курсор на том месте, где он изображён, реально показывается иначе.
Желтая область - первый, более громкий тональный канал. Голу- бая - второй, более тихий канал. Зелёная - канал ударных. В первую очередь командная область, слева направо. (укажите курсором на нужную клетку и нажмите "огонь") Стрелка ВЛЕВО - служит для перехода на предыдущий такт (bar). Если дальше двигаться нельзя,будет слышно предупреждающий звук, это происходит на такте номер 001 (номер такта указан над стрелкой). PLAY (Play bar, играть такт) - циклически играет полный такт до нажатия на "влево" или "вправо". PLAY ALL (играть всё) - играет всю мелодию от начала до конца. Если указано начало зацикливания, то мелодия продолжает играть с этого места,а если не указано, то она останавливается, когда дойдёт до конца. Такт начала зацикливания обозначен линией, отстоящей на несколько знакомест от левого края экрана. Эта линия устанавливается и снимается нажатием кнопки "огонь" на номере такта. play all можно прервать так же, как и play bar. DELETE (удалить такт) - полностью удаляет текущий такт и пере- ходит к следующему такту. Если это последний такт, то происхо- дит переход на предыдущий. Если это единственный такт, то он не удаляется, а очищается (в партитуре должен быть как минимум один такт). NEW (новый такт) - если хотите вставить между написанными тактами ещё один такт, то перейдите на такт, перед которым хотите произвести вставку, переведите курсор на клетку new и нажмите "огонь". COPY (копировать такт) - копирует текущий такт в конец мелодии. Используется, если при наборе мелодии вы дошли до такта, который набирали раньше. В этом случае перейдите к такому такту и нажмите copy. При этом происходит переход к следующему такту, так что можно копировать несколько тактов подряд, нажимая только "огонь". LOAD (загрузить мелодию с магнитофона) - см. далее. SAVE (записать мелодию на магнитофон) - см. далее. COMPILE (компилировать) - см. далее. Стрелка ВПРАВО - переходит на следующий такт. Если его не суще- ствует, то он создаётся (слышен другой звук). Последний такт можно увидеть по тому, что черта справа (разделитель тактов) имеет двойную толщину. Но черты не будет, если такт не дописан. Если вы дошли до конца и добавился лишний такт (слышен звуковой сигнал), его можно удалить (delete). Левый столбец (сверху вниз, укажите курсором на нужное место, нажмите "огонь" и направление) Число (скорость текущего такта) - по умолчанию 04. Это ско- рость, с которой будет играться текущий такт (от 1 до 20). Ско- рость можно установить нажатием "огня" и направления: вправо, влево - изменить скорость текущего такта; вверх, вниз - изме- нить скорость всех тактов Скрипичный ключ - нажатием "огня" и одновременно "вниз" или "вверх" можно транспонировать весь такт на полтона вверх или вниз. Нотные строчки возле скрипичного ключа (знаки альтерации для текущей тональности в канале) - нажатием "огня" и одновременно "вправо" или "влево" можно увеличить или уменьшить число диезов (бемолей). "Огонь" + "вниз" или "вверх" меняет диезы на бемоли и обратно. Цифра под нотными строчками слева от косой черты (написано число долей в такте) - числитель тактового размера. Нажатие "огня" переключает цифру. Перед уменьшением длины такта уберите лишние ноты. Цифра под нотными строчками справа от косой черты (написан размер доли в такте) - знаменатель тактового размера. Нажатие "огня" переключает цифру. Действует совместно с предыдущим пунктом, определяет размер такта. Лучше устанавливать размер перед тем, как начать набирать музыку. В добавляемых паттернах будет стоять тот же размер, что и в текущем. Число под скрипичным ключом (затухание для первого или для второго канала) - время угасания каждой ноты. Регулируется так же, как скорость (но в пределах 0 - 99) нажатием "огня" с направлением - можно для текущего такта, можно для всей композиции. Чтобы подобрать нужное число,поставьте в такте одну целую ноту и пробуйте её проигрывать с разными настройками. Граница между первым и вторым каналами - нажатие "огня" меняет местами ноты в первом и втором каналах. В WHAM оба канала звучали одинаково громко, и нельзя было дать разные громкости теме и сопровождению, а здесь можно. Номер такта - нажатие "огня" ставит (убирает) признак начала зацикливания (см. PLAY ALL и COMPILE).Зацикливание обозначается линией (линия начала зацикливания на рисунке). Такт, в котором стоит эта линия, будет тем, на который во время проигрывания происходит переход после окончания композиции. Если вы хотите, чтобы композиция повторялась с самого начала, поставьте эту линию на первом такте. Главная часть - ввод нот. Вправо - переместить курсор на следующую ноту. Если такой нет, ничего не произойдёт. Влево - переместить курсор на предыдущую ноту. С первой ноты переходит на левый слолбец. Вверх - увеличить высоту ноты. Если дошли до самого верха, переходит на предыдущий канал (если такой есть), а нота возвращается в то положение, в котором была при последнем нажатии "огня" или перемещении курсора. Вниз - аналогично кнопке "вверх", но уменьшает высоту ноты. Огонь - подтверждает текущую высоту ноты. После выхода через верх или низ нота будет на указанной высоте. Огонь + влево - уменьшение длительности ноты / паузы. Происхо- дит циклически, переключает режим нота / пауза. Огонь + вправо - как огонь + влево, но наоборот. Огонь + вниз + влево - смена знака альтерации перед текущей нотой: диез (#), дубль диез (X), бекар, бемоль (b), дубль бемоль (bb) или ничего. Огонь + вниз + вправо - ставит точку после ноты - нота будет иметь длительность в полтора раза больше. Огонь + вверх + влево - стирает ноту под курсором и переводит курсор на следующую ноту, пока не дойдёт до последней ноты в данном канале. Если в канале осталась только одна нота, то ничего не делает. Огонь + вверх + вправо (добавить ноту) - ставит после текущей ноты ноту такой же высоты и переводит курсор на неё. Если в такте нет места для ноты, то ничего не делает. Для ударных аналогично (добавление, стирание, смена типа). Ударные инструменты обозначены цифрами от 0 до 9, пауза обозна- чается точкой. Если знаменатель тактового размера равен 4, то имеется 8 мест для ударных (на каждой восьмой доле). Если 8, то имеется 16 мест (на каждой шестнадцатой). Когда такт заполнен, справа от него рисуется черта - раздели- тель тактов. Если такт последний, то черта жирная. Магнитофонные операции ---------------------- LOAD - загрузить мелодию в программу. Запрашивает имя (можно просто нажать ENTER,чтобы загрузить первую попавшуюся мелодию). Если при загрузке произойдёт ошибка, в памяти останется старая мелодия. SAVE - выгрузить мелодию на кассету. Если хотите проверить качество записи, нажмите потом load (при ошибке чтения мелодия останется в памяти). Мелодии из WHAM --------------- Командой LOAD можно загружать в ORFEUS музыку из программы WHAM. Программа сама опознает мелодию из WHAM и перекодирует её в свой формат. Поскольку оба канала в WHAM имеют одинаковую громкость, можно в случае необходимости в некоторых тактах (можно во всех) обменять местами каналы и транспонировать мелодию на октаву вниз, чтобы звучало лучше. Скорость устана- вливается на обычном уровне, её можно сменить. Также можете у некоторых нот увеличить длительность. Компиляция в машинный код ------------------------- Когда мелодия будет доведена до удовлетворительного состояния, можно превратить её в машиннокодовую процедуру и использовать в своих программах. Выберите опцию COMPILE, программа произведёт компрессию данных (повторяющиеся такты и т.п.) и выгрузит готовую процедуру. Напоследок вы можете прослушать своё творение, потом (по нажатию любой клавиши) программа запросит у вас имя и выгрузит мелодию на кассету. Готовую мелодию вы можете загрузить практически по любому адресу и с него запустить. Единственное исключение - мелодию нельзя запускать с адресов от 35000-длина до 35000+длина, где длина - длина готовой мелодии, которую можно узнать с помощью копировщика. Мелодия при запуске перемещает себя на место, где она может играть, а по окончании проигрывания возвращает себя обратно на адрес загрузки и восстанавливает оригинальное содержимое памяти - то есть после проигрывания память компью- тера будет в том же состоянии, что и до проигрывания. Исключе- ние нужно для того, чтобы процедура не обменялась с собственным куском, результат чего непредсказуем. Впрочем, можно загружать процедуру на адрес 35000, где она и будет играть (этот адрес стоит в заголовке). Последняя часть предназначена для тех, кто хотя бы частично разбирается в машинных кодах Z80. Опишем способ, как соединить несколько мелодий в одну так, чтобы они не занимали больше места, чем требуется, то есть несколько блоков данных с одним проигрывателем. Конкретно описываем слияние двух мелодий, слияние большего числа происходит аналогично. 1. Выберите самую длинную мелодию (наибольшую из всех) и загрузите её в произвольное место памяти - начальный адрес назовём ADR1. 2. С помощью монитора (VAST, DEVAST, ...) исправьте значения в трёх командах, работающих с регистром SP - замените число 36081 на 36073. 3. Загрузите вторую мелодию в память непосредственно после первой - по адресу, который назовём ADR2. 4. В начале мелодии есть две команды LD BC,число - исправьте их на LD BC,число-1011. Значение число-1011 назовём LENGTH. 5. В команде LD DE,35072 замените значение 35072 на ADR1+1083 6. Все команды, работающие с регистром SP, исправьте так, чтобы они указывали на нужное место. 7. В инструкции CALL 35072 исправьте адрес на ADR1. 8. Переместите блок длиной LENGTH с адреса ADR2+1083 на адрес ADR2+72. После успешного завершения этих действий можете запускать мелодию с адреса ADR1 или с адреса ADR2, полная длина будет на 1011 байта меньше, чем суммарная длина двух исходных мелодий. Таким образом можно склеить сколь угодно много мелодий. Перевод с чешского - Alone Coder (это вовсе не значит, что я знаю этот язык :))