Иллюстрированный самоучитель по Turbo Pascal

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

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

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

Процедура Sound

Заставляет динамик звучать с нужной частотой. Заголовок процедуры:

Procedure Sound(F: Word);

Здесь F – выражение типа Word, определяющее частоту звука в герцах.

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

Процедура No Sound

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

Процедура Delay

Обеспечивает задержку работы программы на заданный интервал времени. Заголовок процедуры:

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.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.