Создание "космической музыки".
Соединив воедино произвольное количество стандартных функций Си rend() и sound(), вы создадите "космическую" музыку. Звук, получаемый при выполнении программы, представленной ниже, напоминает "музыку звезд" в старых научно-фантастических фильмах. Несмотря на то, что все звуки генерируются произвольным образом, ритм и рисунок мелодии, возникающие время от времени, действительно оставляют впечатление "небесной музыки".
/* Космическая музыка звезд */
#define DELAY 64000
#include "dos.h"
void sound();
main()
int freq;
do
do
freq = rand();
while (freq>5000); /* после персонального
прослушивания */ sound(freq);
while (!kbhit());
/* звучание динамика на специфицированной частоте */
void sound(freq)
int freq;
unsigned i;
union
long divisor;
unsigned char c[2];
count;
unsigned char p;
count.divisor = 1193280 / freq; /* вычисление нужного
значения счетчика */ outportb(67,182); /* обращение к таймеру 8253 после
определения значения счетчика */ outportb(66,count.c[0]); /* пересылка младшего байта */ outportb(66,count.c[1]); /* пересылка старшего байта */
p = inportb(97); /* чтение существующего шаблона бит */
outportb(97,p|3); /* установка бит 0 и 1 */
for (i = 0;i<DELAY;++i); /* задержка 64000 для 10+ Мгц
компьютеров
32000 для 6 МГц PC/AT
20000 для стандарта PC и XT */
outportb(97,p); /* восстановление начального вида
шаблона бит для отключения динамика */
Эта программа генерирует звуки частотой менее 5000 Гц, так как звуки именно в пределах этой частоты наиболее мягко воспринимаются слухом и не выходят за границы, воспринимаемые ухом человека.
Рекомендуем вам поэкспериментировать с этой программой, установив произвольную длину интервала времени между звуками или фильтруя значения, передаваемые в sound(). Возможны и другие варианты развития вашего творчества.