С для профессиональных программистов




Имитация звука сирены и взврыва. - часть 2


Для имитации звука взрыва, который используется во многих видеоиграх, можно модифицировать функцию siren() таким образом, чтобы она позволяла генерировать звук лишь нисходящей частоты. Функция laser(), представленная ниже, позволяет получить этот эффект.

#define DELAY 10000

/* получение эффекта взрыва */

void laser()

unsigned i,freq;

union

long divisor;

unsigned char c[2];

 count;

unsigned char p;

p = inportb(97); /* чтение существующего шаблона бит */

outportb(97,p|3); /* установка бит 0 и 1 */

/* взрыв */

for (;freq>1000;freq-=RATE)

count.divisor = 1193280 / freq; /* вычисление нужного

значения счетчика */

outportb(67,182); /* обращение к таймеру 8253 после

определения значения счетчика */ outportb(66,count.c[0]); /* пересылка младшего байта */ outportb(66,count.c[1]); /* пересылка старшего байта */

for (i = 0;i<DELAY;++i);

outportb(97,p); /* восстановление начального вида шаблона

бит для отключения динамика */

 

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




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