Faultless #03
31 декабря 1995

Пользователям - программирование звуковых эффектов.

<b>Пользователям</b> - программирование звуковых эффектов.
  ╔══════════════════════════════════════╗
  ║Раздел: Пользователям;                ║
  ║Статья: Создание звуковых эффектов;   ║
  ║Текст : Ворожкин Александр.           ║
  ╚══════════════════════════════════════╝

   Различные звуковые и  шумовые  эффекты,
  которыми   изобилуют  компьютерные игры,
  достигаются  через изменение по тому или
  иному закону   частоты выводимого звука.
   Техника вывода звука вам уже  известна,
  поэтому без лишних слов сразу перейдем к
  делу и продемонстрируем несколько наибо-
  лее часто употребляемых  в играх  эффек-
  тов.Первый из них  больше  всего напоми-
  нает щебет птиц, особенно если его вызы-
  вать с небольшими  и неравными промежут-
  ками времени:

   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

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



Другие статьи номера:

Дискуссия - новости: Demobit 96 перенесли на осень, ответы на письма, письмо от Doctor Max, письмо от Девушки спектрумистки.

Дискуссия - интервью с автором аппаратных доработок из Харькова - Гетманцом Владимиром Михайловичем.

На досуге - По щучьему веленью.

Открытие - Возможности КР1818ВГ93 контроллера НГМД "Beta disk".

Открытие - Последний "динозавр CRAY холодной войны" уходит со сцены.

Открытие - Програмирование музыкального процессора AY 3-8910.

Новости - новинки игр: Mortal Kombat, Ice Climber, Streat Fighter, CJ Elephant Fujitive, NB JAM. Новости от известных спектрумовских комманд.

Сделай сам - Применение микросхем серии К155.

Сделай сам - схема многоголосового имитатора звуков.

Описания игр - DALLAS QUEST.

Описания игр - HORROR SHOW.

Описания игр - SIR FRED.

Описания игр - FIGHTER PILOT.

Пользователям - программирование звуковых эффектов.

Приложения - Сегодня в приложении нашего журнала вы найдете следующие программы...

CPU для Вас - Работа с TR-DOS на уровне машинных кодов.

Напутствие - Наверняка любой уважающий себя программист задумывался над написанием DEMO...

Интервью с нашим гостем - Итак, сегодня у нас в гостях PatSoft of Reflection group.

Реклама - Для приобретения новейшего SOFT'а со всего мира можно звонить в Харьков...


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Инструкция - Для матерых "чайников" :-)
Лаборатория - Как подружить ALASM v4.1 и STS v6.2.
Авторы - над выпуском работали.
Открытые письма Nemo №2.5
Интервью - интервью с Дмитрием Григорьевым (Oldman).

В этот день...   20 апреля