11.3. Программирование звукового генератора

Звуковые возможности пк основаны на одноканальном управляемом звуковом генераторе, вырабатывающем электромагнитные колебания звуковой частоты. Колебания подаются на встроенный в пк динамик и заставляют его звучать.

В модуль CRT включены три процедуры, с помощью которых вы сможете запрограммировать произвольную последовательность звуков.

Процедура Sound заставляет динамик звучать с нужной частотой. заголовок процедуры Procedure Sound (F: Word); здесь F – выражение типа Word, определяющее частоту звука в герцах. После обращения к процедуре включается динамик, и управление немедленно возвращается в основную программу, в то время как динамик будет звучать впредь до вызова процедуры NoSound.

Процедура NoSound выключает динамик. Если он к этому моменту не был включен, вызов процедуры игнорируется.

Процедура Delay oбеспечивает задержку работы программы на заданный интервал времени. Заголовок процедуры: Procedure Delay (T: Word);

Здесь Т — выражение типа Word, определяющее интервал времени (в миллисекундах), в течение которого задерживается выполнение следующего оператора программы.

Для генерации звукового сигнала обычно используется вызов описанных процедур по схеме Sound—Delay—NoSound. следующая программа заставит пк воспроизвести простую музыкальную гамму. Используемый в ней массив F содержит частоты всех полутонов в первой октаве от «до» о «си». При переходе от одной октавы к соседней, частоты изменяются в два раза.

Uses CRT;

const

F: array [1..12] of Real =

(130.8, 138.6, 146.8, 155.6, 164.8, 174.6, 185.0, 196.0, 207.7,

220.0, 233.1, 246.9); {массив частот 1-й октавы}

Temp = 100; {темп исполнения}

var

k, n: integer;

begin

{восходящая гамма}

for k:=0 to 3 do

for n:=1 to 12 do

Begin

Sound (Round (F[n]*(1 shl k)));

Delay (Temp);

NoSound

end;

{нисходящая гамма}

for k:=3 downto 0 do

for n:=12 downto 1 do

begin

Sound (Round (F[n]*(1 shl k)));

Delay (Temp);

NoSound

end

end.

В следующей программе перемножается матрица на вектор, основу которой составляет ранее рассмотренные Program Prim 29 i Prim 29а. Здесь максимальные размеры матрицы – 10*10 элементов типа byte. Ввод информации производится в окне светло-бирюзового цвета, вывод результатов – в окне малинового цвета, цвет букв – желтый.

Программа в начале работы издает звуки частотой от 130 до 2130 Гц, затем при вводе величины a – частотой 2000 Гц, b – 1500 Гц длительностью n=100 мс. В конце работы программа издает звуки от 2130 до 130 Гц. Программа использует подпрограмму Wind, написанную на основе Prim 52.

Program Prim53; Uses CRT; var i,j,n,m,k,l:integer; a:array[1..50,1..70] of byte; b:array[1..10] of byte;

c:array[1..10] of longint;

cv:byte;

{$i C:\TURBO\ wind.pas}

 BEGIN

Clrscr; {очистить экран }

cv:=11; {цвет 11, светло-бирюзовый}

 wind(1,1,50,7); { открыть окно, обращения к процедуре}

Sound(330); { включить звук, частотой 330 гц } Delay(1000); { задержать на 1000 миллисекунд } NoSound; { выключить звук }

writeln ('ввести количество строк и столбцов');

GotoXY(2,3); l:=4; {l устанавливает курсор по y}

readln(n,m);

for i:=1 to n do

for j:=1 to m do

begin GotoXY(2,l);

writeln(' введите a[',i,',',j,'] элемент матрицы а ');

GotoXY(34,l); { перевести курсор в конец текста:}

{ввести a[i,j] – элемент матрицы'}

ClrEol; { удалить конец строки до границы окна}

readln(a[i,j]); { ввести очередное а в конце текста }

end;

L:=L+1;{}

for j:=1 to m do

begin GotoXY(2,l);

writeln(ввести b[',j,'] элемент вектора  b');

GotoXY(33,l);

ClrEol;

readln(b[j]); end;

cv:=5; { фиолетовый цвет для нового окна }

wind(20,2,80,18); GotoXY(2,2); l:=3;

for i:=1 to n do { начало перемножения матрицы на векторы }

begin c[i]:=0;

for j:=1 to m do

c[i]:=c[i]+ a[i,j]*b[j]; end;

{ конец перемножения матрицы на вектор }

writeln(' распечатка массива а ');

for i:=1 to n do

begin GotoXY(2,l); l:=l+1; { начать новую строку }

for j:=1 to m do

write(a[i,j]:5); end;

GotoXY(2,l); l:=l+1; writeln('распечатка массива  b');

GotoXY(2,l);

for j:=1 to m do

write(' ',b[j]); L:=L+1;

GotoXY(2,L); L:=L+1; writeln('результирующий массив с');

GotoXY(2,L);

for i:=1 to n do

write(' ',c[i]);

readln; END.


12. Графика в Паскале

 


Информация о работе «Основы программирования на языке Паскаль»
Раздел: Информатика, программирование
Количество знаков с пробелами: 168304
Количество таблиц: 7
Количество изображений: 26

Похожие работы

Скачать
274963
85
0

... ячейка, а имя переменной превращается в адрес ячейки. Появление этого адреса происходит в результате работы специального оператора языка (NEW), однако его значение в большинстве случаев не используется при программировании на алгоритмических языках типа Паскаль. Условимся считать, что адрес ячейки, которая будет хранить переменную А, есть А. Или, другими словами, А - это общее имя переменной и ...

Скачать
11632
0
1

... на условном языке, каждое, из слов которого заменяет десятки, а то и сотни команд процессора. Таким образом, программа становится еще нагляднее и короче. Существует множество условных языков высокого уровня, для каждого из них написано немало вариантов программы, переводящей условный код в последовательность машинных команд. Один из таких языков – Паскаль, который из наиболее известных языков ...

Скачать
47594
1
0

... , тем не менее, использование программ с перекрытиями снимает это ограничение. Два библиотечных модуля TURBO3 и GRAPH3 введены для совместимости с ранней версией 3.0 системы Турбо Паскаль. 2 Объекты Базовым в объектно-ориентированном программировании является понятие объекта. Объект имеет определённые свойства. ...

Скачать
17572
2
0

... выбрать режим Quit <Alt>-<X>, после чего нажать либо <Enter>, либо комбинацию <Alt>-<X>. ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ Функциональные клавиши используются для управления средой Турбо Паскаля. Они обозначаются F1, F2,..., F12 и располагаются в самом верхнем ряду клавиатуры. С каждой из этих клавиш связывается некоторая команда меню. Действие почти всех функциональных ...

0 комментариев


Наверх