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

       

Простейший способ проверки слуха.


Вы обладаете возможностью сделать несколько грубый, но эффективный тест слуха, который в состоянии обнаружить некоторые типы дефекта слуха. Как вы ранее узнали, динамик большинства компьютеров серии PC не воспроизводит звуки выше 12000 Гц. Однако ряд людей, у которых отмечены некоторые отклонения слуха, не могут услышать звук даже такой частоты. Фактически, тестируя свой слух, вы будете несколько удивлены тем, насколько высоким окажется звук с частотой 12000 Гц. (Предупреждение: тестирование слуха с помощью этого теста можно производить лишь ради шутки. Он, естественно, не позволяет действительно оценить слух испытуемого. Поэтому, если вы заметили у себя дефекты слуха или хотите действительно проверить свой слух, обратитесь лучше к своему врачу).

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

/* Звучание динамика на заданной частоте */

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<64000;++i); /* цикл задержки */

outportb(97,p); /* восстановление первоначального значения



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

 

Заметим, что  частота  звучания  ноты  специфицирована   как

аргумент функции. Цикл задержки необходим, так как без него вы бы

услышали  только  мгновенный  "щелчок"  или  "писк".  Вы   можете

изменить  частоту  работы  системного  таймера  процессора вашего

компьютера.  При этом,  оформив  его  как  параметр  функции,  вы

добьетесь  определенной  эффективности  вашей программы.  Функция

sound()  может  использоваться   и   для   получения   банального

"пищания" компьютера.

Управляющая функция для программы теста слуха представлена ниже.

/* Простейший тест слуха */

#include "dos.h"

void sound();

main()

int freq;

do

printf(" Введите частоту ( 0 - выход ): ");

scanf("%d",&freq);

if ( freq ) sound(freq);

 while(freq);

 

При использовании теста, в возрастающем порядке указывайте частоту звука до тех пор, пока звук воспринимается на слух. Для выхода введите 0.



Содержание раздела