Как написать игру для ZX Spectrum на ассемблере


         

СОЗДАНИЕ ЗВУКОВЫХ ЭФФЕКТОВ - часть 2


VIBR LD A,(23624) AND #38 RRA RRA RRA LD C,A DI VIBR1 LD D,E ;продолжительность цикла спада (подъема) VIBR2 LD A,C XOR 16 LD C,A OUT (254),A LD A,H ;изменение частоты звука ADD A,L LD H,A VIBR3 DEC A ;цикл задержки JR NZ,VIBR3 DEC D JR NZ,VIBR2 LD A,L ;смена направления изменения частоты NEG LD L,A DJNZ VIBR1 EI RET

В регистр H нужно занести начальную частоту звука (имеется в виду, конечно, частота не в герцах, а в относительных единицах). Содержимое регистра E влияет на частоту вибрации: чем меньше его значение, тем быстрее спад будет сменяться подъемом и наоборот. В регистре B задается количество циклов вибрации, то есть в конечном счете - длительность звука, а в L заносится величина, определяющая глубину вибрации, или иначе, скорость изменения высоты звука. Мы предлагаем такие значения регистров:

LD H,100 LD E,120 LD B,4 LD L,1 CALL VIBR RET

однако это только один из многих возможных вариантов. Попробуйте поэкспериментировать и подобрать наиболее интересные варианты звучания, которые впоследствии сможете использовать в своих собственных разработках.

Приведем еще одну подпрограмму, создающую другой тип вибрации, при котором частота звука, достигнув наивысшей (или же низшей) точки, возвращается к начальной своей величине. Тем самым частотная характеристика имеет внешний вид, схожий с зубьями пилы. Подпрограмма, создающая похожий звук, имеется в известном пакете Suprcode и значится там под именем «Laser». Вот как примерно она может выглядеть:

LASER LD A,(23624) AND #38 RRA RRA RRA DI LASER1 PUSH BC LD L,H LASER2 XOR 16 OUT (254),A LD B,H DJNZ $ INC H ;другой вариант - DEC H DEC C JR NZ,LASER2 LD H,L POP BC DJNZ LASER1 EI RET

Прежде чем обратиться к данной процедуре, необходимо в регистр B загрузить количество «зубчиков пилы», в C - продолжительность каждого «зубца», а в регистре H задать исходную высоту звука. Например:

LD B,5 LD C,200 LD H,50 CALL LASER RET

Если вы работали с музыкальным редактором Wham, то, вероятно, задавались вопросом, как в одном звуковом канале удается получить сразу два тона различной высоты. Во многих играх, особенно последних лет, музыкальное сопровождение выполнено в аранжировке той или иной степени сложности. Иногда можно слышать не два, а три и более голосов (например, в DEFLEKTOR или MIG-29). Конечно, написание музыки на два голоса - дело вовсе непростое, но принцип получения подобных звуков знать все же стоит. Тем более, что таким способом можно создать ряд весьма недурных эффектов. Двуголосие достигается наложением двух различных частот, поэтому программа, генерирующая одновременно два тона, может выглядеть примерно так:




Содержание  Назад  Вперед