Faultless
#03
31 декабря 1995 |
|
Пользователям - программирование звуковых эффектов.
╔══════════════════════════════════════╗ ║Раздел: Пользователям; ║ ║Статья: Создание звуковых эффектов; ║ ║Текст : Ворожкин Александр. ║ ╚══════════════════════════════════════╝ Различные звуковые и шумовые эффекты, которыми изобилуют компьютерные игры, достигаются через изменение по тому или иному закону частоты выводимого звука. Техника вывода звука вам уже известна, поэтому без лишних слов сразу перейдем к делу и продемонстрируем несколько наибо- лее часто употребляемых в играх эффек- тов.Первый из них больше всего напоми- нает щебет птиц, особенно если его вызы- вать с небольшими и неравными промежут- ками времени: 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 однако это только один из многих возмож- ных вариантов.Попробуйте поэксперименти- ровать и подобрать наиболее интересные варианты звучания, которые впоследствии сможете использовать в своих собственных разработках.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября