Теоретична частина

Будь-який гучномовець працює за рахунок отримання послідовності електричних імпульсів, які викликають відхилення діафрагми динаміка. Це призводить до виникнення коливань повітря, що утворюють звук.

У звичайному динаміці імпульси, що надходять, мають різну потужність (гучність) і тривалість (частоту або висоту тону). Простий динамік IBC/PC не дозволяє регулювати гучність, і звук утворюється простою послідовністю електричних імпульсів. Струм до динаміка подається і відключається в режимі простого двійкового управління. Частота імпульсів струму визначає звукову частоту, що виробляється динаміком.

Наявність програмованого таймера дозволяє отримувати будь-яку частоту імпульсів.

При формуванні звуку за допомогою таймера він буде звучати до тих пір, поки не буде відключений тією ж програмою, яка його запустила.

Сигнал для управління динаміком формується в результаті спільної роботи мікросхем (рис. 4.1):

- програмованого периферійного інтерфейсу і8255 (для ХТ) та і8242 (для АТ);

- таймера і8253.

Основна генерація звуку проводиться мікросхемою таймера, що має три канали з однаковою структурою та принципом роботи. На канали таймера подаються імпульси від мікросхеми системного годинника з частотою 1193181 Гц. Кожен канал має два входи і один вихід. Канал 0 замкнутий на контролер переривань і є джерелом апаратного переривання від таймера, що виникає 18,2 рази в секунду. Канал 1 пов'язаний з мікросхемою прямого доступу до пам'яті. Канал 2 виходить на динамік комп'ютера. До складу кожного каналу входять:

- регістр введення-виведення розрядністю 8 біт;

- регістр-засувка (16 біт);

- регістр-лічильник (16 біт).

Кожен регістр введення-виведення має адресу в адресному просторі введення-виведення (номер порту вводу-виводу). Регістр введення-виведення каналу 2 має номер порту вводу-виводу 42h. Розміщені в нього значення негайно потрапляють в регістр-засувку, де значення зберігається, поки в регістр введення-виведення не буде записано нове значення.

Вибір каналу здійснюється зверненням до регістру управління (порту 43h), що входить до складу таймера і містить слово стану наступної структури:

- Біт 0 – тип константи перерахунку (0 – двійкове число, 1 – двійково-десяткове);

- Біти 1-3 – режим роботи таймера (в даній роботі використовувати режим 3);

- Біти 4-5 – 00 – передати значення лічильника в регістр-засувку; 01 – записати в регістр-засувку молодший байт; 10 – записати в регістр-засувку старший байт; 11 – записати в регістр-засувку спочатку старший байт, а потім – молодший (у даній роботі використовувати значення 11);

- Біти 6-7 визначають номер каналу (в даній роботі використовувати значення 10).

 

Рис. 4.1. Схема звукового каналу

Подачею струму на динамік управляє біт 1 порту 61h. Біт 0 порту 61h відкриває або закриває вихід каналу.

Для генерації (другий канал таймера) прямокутних імпульсів, що завантажуються в порт 42, значення (value) повинні бути парними:

Value = 1193181 / f (f – частота звукового сигналу).

Таким чином, для програмування звукового каналу таймера необхідно:

- за допомогою порту 43h вибрати канал, задати режим роботи і тип операції передачі значення в канал;

- подати струм на динамік, встановивши в 1 біт 1 порту 61h;

- помістити в порт 42h значення, що відповідає висоті тону.

1. Скласти дві функції: виду void ідентифікатор (unsignedintTn), де Tn - тривалість звучання (або паузи) представлена рядом (табл. 4.1):

Таблиця 4.1

Tn=T0=4сек Tn=T8T=0,75 сек
Tn=T0T=6 сек Tn=T16=0,25 сек
Tn=T2=2 сек Tn=T16T=0,375 сек
Tn=T2T=3 сек Tn=T32=0,125 сек
Tn=T4=1 сек Tn=T32T=0,187 сек
Tn=T4T=1,5 сек Tn=T64=0,062 сек
Tn=T8=0,5 сек Tn=T128=0,031 сек

для генерації звуку з заданими значеннями частот, що визначаються ідентифікаторами (табл. 4.2):

Таблиця 4.2

С0=65 Гц, D0=74 Гц FD=184 Гц, GD=208 Гц
E0=82 Гц, F0=87 Гц C2=520 Гц, D2=592 Гц
G0=98 Гц, A0=110 Гц E2= 656 Гц, F2=696 Гц
В0=116 Гц, Н0=124 Гц G2=784 Гц, A2=880 Гц
С=130Гц, D=148 Гц B2=928 Гц, H2=992 Гц
E=164 Гц, F=174 Гц C1D=276 Гц, D1D=312 Гц
G=196 Гц, A=220 Гц F1D=368 Гц, G1D=416 Гц
B=232 Гц, H=248 Гц C2D=552 Гц, D2D=624 Гц
C1=260 Гц, D1=296 Гц F2D=736 Гц, G2D=832 Гц
E1=328 Гц, F1=348 Гц C3=1040 Гц, D3=1184 Гц
G1=392 Гц, A1=440 Гц E3=1312 Гц, F3=1392 Гц
B1=464 Гц, H1=496 Гц G3=1568 Гц, A3=1760 Гц
C0D=69 Гц, D0D=78 Гц      
F0D=92 Гц, G0D=104 Гц      
CD=138 Гц, D0=156 Гц      

і функцію паузи виду void P (unsignedintTn).

Для програмування звукового каналу таймера можна використовувати також функцію Windows API Beep, яка призначена для відтворення простих однотонних звуків через вбудований динамік із заданою частотою і тривалістю. Існує в операційних системах сімейства Microsoft Windows і ReactOS.

Функція Beep виконується синхронно, тобто повертає керування лише після завершення відтворення звуку.

Вона має два параметри:

- dwFrec – частота звуку в герцах, допустимий діапазон – від 37 до 32767 Гц;

- dwDuration – тривалість звуку в мілісекундах;

і повертає значення типу BOOL (ненульове при успішному виконанні).

Величина паузи задається командою sleep, яка уповільнює виконання.

Її опис – void sleep (int seconds).

Функція sleep затримує виконання програми на дану кількість секунд seconds.

Частота нот хроматичної гами (табл. 4.3) і ноти хроматичної гами (рис. 4.2) дають можливість відтворити будь-яку просту мелодію.

Таблиця 4.3

До До# Ре Ре# Ми Фа Фа# Соль Соль# Ля Ля# Си Октава
контроктава
велика
мала
перша
друга
третя
четверта

 

 

Рис. 4.2. Ноти хроматичної гами

Точка поряд з нотою збільшує її тривалість наполовину.

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