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.
... ячейка, а имя переменной превращается в адрес ячейки. Появление этого адреса происходит в результате работы специального оператора языка (NEW), однако его значение в большинстве случаев не используется при программировании на алгоритмических языках типа Паскаль. Условимся считать, что адрес ячейки, которая будет хранить переменную А, есть А. Или, другими словами, А - это общее имя переменной и ...
... на условном языке, каждое, из слов которого заменяет десятки, а то и сотни команд процессора. Таким образом, программа становится еще нагляднее и короче. Существует множество условных языков высокого уровня, для каждого из них написано немало вариантов программы, переводящей условный код в последовательность машинных команд. Один из таких языков – Паскаль, который из наиболее известных языков ...
... , тем не менее, использование программ с перекрытиями снимает это ограничение. Два библиотечных модуля TURBO3 и GRAPH3 введены для совместимости с ранней версией 3.0 системы Турбо Паскаль. 2 Объекты Базовым в объектно-ориентированном программировании является понятие объекта. Объект имеет определённые свойства. ...
... выбрать режим Quit <Alt>-<X>, после чего нажать либо <Enter>, либо комбинацию <Alt>-<X>. ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ Функциональные клавиши используются для управления средой Турбо Паскаля. Они обозначаются F1, F2,..., F12 и располагаются в самом верхнем ряду клавиатуры. С каждой из этих клавиш связывается некоторая команда меню. Действие почти всех функциональных ...
0 комментариев