Управление динамиком
1. Процедура Sound (f:word) - генерирует звук указанной частоты в Гц. Для справки, основной гамме соответствуют следующие частоты: нота «до» основной октавы - 330 Гц, далее - 349 Гц, 370 Гц, 392 Гц, 415 Гц, 440 Гц, 466 Гц, 494 Гц, 523 Гц, 554 Гц, 588 Гц, 622 Гц и, наконец, нота «до» следующей октавы - 660 Гц.
Частоты нот других октав кратны частотам основной.2. Процедура NoSound - выключает динамик.
3. Процедура Delay (t:word) - обеспечивает задержку на заданный интервал времени, мс.
Поскольку к настоящему моменту времени быстродействие компьютеров существенно возросло и изменились некоторые принципы их построения, процедура Delay не всегда обеспечивает корректную задержку, как видно из последующей программы. В этих случаях для организации задержки целесообразно использовать процедуру, которая читает реальное время.
4. Процедура GetTime (VarHour, Minute, Second, SeclOO'.word) - возвращает текущее время суток.
Определена в модуле Dos.Пример 8.3. Разработать программу проигрывания основной октавы.
Проигрывание гаммы осуществляется включением и выключением динамика с разными частотами.
Program ex;
Uses Crt;
Const f: array[1..13] of word = (330, 349, 370, 392, 415, 440,
466, 494, 523, 554, 588, 622, 660);
Var kbyte;
Begin for i:=l to 13 do begin
Sound(f[iJ);
for j:-l to 5000 do Delay(lOOO); {задержка ?!} NoSound;
end;
End.
Чтобы не подбирать время задержки для конкретного компьютера, построим свою процедуру обеспечения требуемой задержки, использующую процедуру GetTime:
Program ex;
Uses Crt, Dos;
Procedure NewDelay(dTime:word);
Var key:boolean;
Hour, Min, Sec, SeclOO, MyHour, MyMin, MySec, MySeclOO: Word; Begin
GetTime(Hour, Min, Sec, SeclOO); {узнаем текущее время} {определяем время завершения задержки}
Му Seel 00: =Secl 00+dTime; MySec:=Sec+MySeclOO div 100;
My Seel 00:=MySecl 00 mod 100;
MyMin: =Min +MySec div 60; MySec:=MySec mod 60;
My Ho ur: =Ho ur+MyMin div 60; MyMin: =MyMin mod 60; key:=false;
while not key do {цикл задержки} begin
GetTime(Hour, Min, Sec, SeclOO); {узнаем текущее время} {проверяем, наступил ли заданный момент} if (Hour>MyHour) or ((Hour=MyHour) and ((Min>MyMin) or ((Min=MyMin) and ((SeoMySec) or ((Sec=MySec) and ((SeclOO>=MySeclOO))))))) then key:=true;
end
End;
Const f: array[1..13] of word = (330, 349, 370, 392, 415, 440,
466, 494, 523, 554, 588, 622, 660);
Var kbyte; j.integer;
{описываем массив окон пунктов меню}
Const menu:array[1..4] of win=
((хl:5;yl: 4;х2:15;у2:4;text: ’new ),
(xl: 5 ;yl: 5 ;х2:15 ;у2:5 ;text: ’open ’),
(x 1:5;vl:6;x2:15;y2:6;text: ’save ’),
(xl:5;yl:7;x2:15;y2:7¡text: ’exit’));
{процедура рисования пункта меню}
Procedure Draw Win (w: win;attr:byte);
Begin with w do begin
TextAttr:=attr; {устанавливаем атрибут окна пункта}
Window (xl,у 1,х2,у2); {устанавливаем окно пункта}
Clrscr; {высвечиваем окно пункта}
GotoXY(2,l); {устанавливаем курсор}
Write(text); {выводим название пункта}
end;
End;
{процедура рисования меню с выделенным пунктом npos}
Procedure DrawMenu(npos:integer);
Begin
Clrscr;
for i:=l to 4 do
if i=npos then DrawWin(menu[i],94) {выводим выделенный пункт} else DrawWin(menu[i],30); {выводим невыделенный пункт} End;
{основная программа}
Begin
npos:=l; {выделенный пункт меню}
DrawMenu(npos); {выводим меню} repeat
chl:=ReadKey; if chl=#0 then ch2:-ReadKey;
case chi of #0: case ch2 of
#72: begin {стрелка вверх}
ifnpos>lthen {если не верхний пункт} begin
DrawWin(menu[npos],30); {убираем выделение текущего пункта меню}
npos:=npos-l; {переходим к предыдущему пункту} DrawWin(menu[nposJ,94); {выделяем новый пункт} end;
end;
Begin for i:=l to 13 do begin
Sound(f[i]);
NewDelay(50);
NoSound;
end;
8.3.
Еще по теме Управление динамиком:
- Статья 1040. Обращение взыскания на имущество, переданное в управление, по требованию кредитора установщика управления
- Символическая динамика городской среды
- Глава 7. Модели волновой динамики
- Глава 8. Волны социокультурной динамики
- Глава 12. Анализ динамики систем
- § 3. Право управления предприятием как особый вид абсолютных прав. Право полного и ограниченного управления (п. 1774-1776)
- УПРАВЛЕНИЕ ВРЕМЕНЕМ VERSUS УПРАВЛЕНИЕ СОБОЙ
- РАЗДЕЛ 2. Содержательные модели социальной динамики
- Глава 11. Современные теории структурной динамики
- Раздел 2. Содержательные модели социальной динамики
- ДИНАМИКА ГРУППОВАЯ
- 12.6. Системная динамика Форрестера
- Тема 7. Модели волновой динамики
- 7.2. Волны, экономической динамики
- Динамика организационных отношений.
- Результаты исследований в динамике
- Собственная динамика прогнозов
- Динамика организационных отношений
- Результаты исследований в динамике
- § 4. Динамика и разрешение юридического конфликта