╔══════════════════════════════════════╗
║Раздел: Пользователям; ║
║Статья: Создание звуковых эффектов; ║
║Текст : Ворожкин Александр. ║
╚══════════════════════════════════════╝
Различные звуковые и шумовые эффекты,
которыми изобилуют компьютерные игры,
достигаются через изменение по тому или
иному закону частоты выводимого звука.
Техника вывода звука вам уже известна,
поэтому без лишних слов сразу перейдем к
делу и продемонстрируем несколько наибо-
лее часто употребляемых в играх эффек-
тов.Первый из них больше всего напоми-
нает щебет птиц, особенно если его вызы-
вать с небольшими и неравными промежут-
ками времени:
TWEET LD A,(23624) ;Определение цвета
AND #38 бордюра
RRA
RRA
RRA
DI
TWEET1 XOR 16 ;Переключение 4-го
OUT (254),A бита
PUSH BC
DJNZ $ ;цикл задержки
POP BC
DJNZ TWEET1
EI
RET
Длительность эффекта перед обращением к
процедуре TWEET задается в регистре B,
например:
LD B,200
CALL TWEET
RET
Прежде чем привести следующий пример,
скажем несколько слов , относящихся не
только к этой подпрограмме, но и ко всем
остальным.Поскольку в реальных програм-
мах цвет бордюра обычно не изменяется и
определен заранее ,то он,как правило,не
вычисляется в программе , а задается в
явном виде загрузкой в аккумулятор кода
нужного цвета.Вы также можете вместо
первых строк от метки TWEET до команды
DI просто написать XOR A для получения
черного бордюра или , например,LD A,4 -
для зеленого.
Другой интересный момент касается уже
самой программы,а собственно ассемблера.
Вы,наверное,обратили внимание на запись
DJNZ $
Как известно,символ доллара при транс-
ляции принимает значение текущего адреса
размещения машинного кода, а точнее,ад-
рес начала строки ассемблерного текста.
Поэтому такая запись полностью равноцен-
на записи:
LOOP DJNZ LOOP
но позволяет обойтись без дополнительных
меток.
После такого небольшого лирического
отступления давайте продолжим <изобрете-
ние> звуковых эффектов.
Особо часто в игровых программах можно
услышать множество разновидностей виб-
рирующих звуков.Получить такой эффект
можно,периодически увеличивая и уменьшая
частоту (т.е. количество циклов задерж-
ки).Вибрация характеризуется двумя па-
раметрами:собственной частотой и глуби-
ной (амплитудой),поэтому для такой про-
цедуры потребуется , кроме длительности
звучания , задавать и некоторые другие
входные данные.Сначала приведен текст
подпрограммы для получения вибрирующего
звука,а затем объясним,какие значения в
каких регистрах следует заменить перед
обращением к ней.
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
однако это только один из многих возмож-
ных вариантов.Попробуйте поэксперименти-
ровать и подобрать наиболее интересные
варианты звучания, которые впоследствии
сможете использовать в своих собственных
разработках.
Other articles: