Можно также комбинировать эти два
Можно также комбинировать эти два способа, получая разнообразные звуковые эффекты.
Для проигрывания мелодии в фоновом режиме можно предложить следующий способ, основанный на использовании периодического прерывания от канала 0 таймера.
Основная идея заключается в использовании прерывания 1Ch, которое вырабатывается таймером с частотой примерно 18,2 Гц. Ваш обработчик этого прерывания осуществляет контроль за выборкой нот из массива, содержащего мелодию, и программирование микросхемы 8254. Например, один раз в полсекунды обработчик проверяет, не пора ли прекратить звучание одной ноты и начать проигрывание следующей ноты. Если пора, он выключает громкоговоритель и перепрограммирует канал 8254 на новую частоту, соответствующую следующей ноте.
Основное преимущество использования таймера для проигрывания мелодии - независимость констант, используемых для программирования канала таймера от производительности системы. Ваша мелодия будет звучать одинаково и на медленной IBM XT и на Super-AT с процессором 80486, но при условии, что вы будете использовать таймер и для организации задержек при исполнении мелодии.
Для определения значения, которое должно быть записано в регистр счетчика канала 2 таймера, надо разделить 1193180 на требуемую частоту в герцах.
Мы подготовили функцию, предназначенную для генерации на громкоговорителе тона заданной частоты и длительности:
/** *.Name tm_sound *.Title Формирование тона заданной длительности * *.Descr Эта функция предназначена для генерации * на громкоговорителе тона заданной * длительности и частоты. * *.Proto void tm_sound(int freq, int time); * *.Params int freq - частота в герцах; * int time - длительность в тиках * таймера (за одну секунду таймер * тикает 18.2 раза). * *.Return Ничего * *.Sample play.c **/
#include <stdio.h> #include <conio.h> #include "sysp.h"
void tm_sound(int freq, int time) {
int cnt, i;
// Задаем режим канала 2 таймера
outp(0x43, 0xb6);
// Вычисляем задержку для загрузки в // регистр счетчика таймера
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий