Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль (ст 33).doc
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
821.76 Кб
Скачать

Центр Компьютерного Обучения

Учебное пособие

«Информатика-Программирование, 2 год обучения (расширенная)»

И-22, II семестр

Литература. 1. В. Б. Попов. Turbo Pascal для школьников.

2. В. П. Леонтьев. Новейшая энциклопедия ПК 2003 г. «ОЛМА ПРЕСС», 2003 г.

3. О. Ефимов, В Морозов, Ю. Шафрин. Курс компьютерной технологии (уч. пособие для старших классов). «Финансы и статистика», 2002 г.

Модуль Graph

Генерация звука в модуле Crt

1. Общие сведения. Для создания звуковых эффектов в Паскале используются стандартные процедуры Sound, NoSound и Delay модуля Crt.

Sound(I:word) – активизирует звуковые средства персонального компьютера. Целочисленное значение I указывает частоту звучания звука в герцах. Звук указанной частоты будет генерироваться до тех пор, пока на будет отменен процедурой NoSound.

NoSound - отмена звука. Отменяет звуковой режим, заданный процедурой Sound.

Для указания времени, в течение которого будет продолжаться звучание, используется процедура Delay.

Пример. Звуковой сигнал с частотой 500 Гц будет звучать в течение 2 с (2000 мс).

Program Primer;

Uses Crt;

Begin

Sound(500);

Delay(2000);

NoSound;

End.

С помощью указанных трёх процедур и операторов цикла можно создать самые разнообразные звуковые эффекты: звучание сирены, метронома, будильника, пение птиц, фрагменты музыкальных произведений и т. д. Звуковым сигналом можно сопровождать вывод информации, например, заставок, подсказок, сообщений об ошибках. Звук можно использовать в качестве дополнительного средства контроля решения задачи на персональном компьютере (сопровождение этапов выполнения программы).

Для создания разнообразных звуковых эффектов используется набор частот или элементы массива, соответствующие нотам различных октав (см. табл.).

Нота

Большая октава

Малая октава

Первая октава

Вторая октава

До

130,81

261,63

523,25

1046,50

Ре

146,83

293,66

587,33

1174,07

Ми

164,81

329,63

659,26

1318,05

Фа

174,61

349,23

698,46

1396,09

Соль

196,00

392,00

784,99

1568,00

Ля

220,00

440,00

880,00

1760,00

Си

246,94

493,88

987,77

1975,00

Для использования в процедуре Sound все указанные в таблице значения частот округляются.

2. Генерация мелодий. Одним из способов построения мелодичных звуковых рядов является использование частот, соответствующих нотам. Частоты загружаются в один массив, продолжительность звучания каждой ноты – в соответствующие элементы другого массива.

Пример

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

Program Gamma; {заголовок программы}

Uses Crt; {подключение модуля Crt}

Const {объявление констант – массивов}

M : Array[1..7] of Integer = (262, 294, 330, 349, 392, 440, 494); {массив нот}

T : Array[1..7] of Integer = (100, 110, 120, 130, 140, 150, 160); {массив длительностей}

Var i:Integer; {объявление переменной}

Begin

While not KeyPressed {пока не нажата любая клавиша,}

Do Begin

For i:=1 to 7 {воспроизводим гамму из семи нот,}

Do Begin {каждая из которых имеет свою}

Sound(M[i]); {длительность}

Delay(T[i]);

NoSound;

End;

End;

End. {конец программы}

Меняя значения элементов массивов М и Т, можно добиться довольно хорошей имитации музыкальных произведений.

Пример

Воспроизведение музыкальной гаммы с полутонами на 4 октавы.

Program Gamma;

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); {массив полутонов для одной октавы}

Temp = 150; {длительность каждой ноты}

Var

i, j : Integer; {объявление переменных – параметров циклов}

Begin {вывод гаммы с нарастающей частотой}

For i:=0 to 3 {i – счетчик октав}

Do For j:=1 to 12 {j – счетчик нот-полутонов}

Do Begin {при переходе от одной октавы к соседней}

Sound(Round(F(j)*(1 shl i))); {частоты изменяются в два раза,}

Delay(Temp); {поэтому исходные частоты самой низкой}

NoSound; {октавы надо умножать на 2 j, а степени}

End; {числа 2 получаются сдвигом 1 влево на j разрядов}

For i:=3 downto 0 {вывод гаммы с убывающей частотой звука}

Do For j:=12 downto 1

Do Begin

Sound(Round(F(j)*(1 shl i)));

Delay(Temp);

NoSound;

End;

End.

Пример

Требуется вывести в центр экрана элемент заставки «Добрый день!» в сопровождении звукового сигнала.

Program ZvukOut;

Uses Crt;

Var St : string[40];

I : Byte;

Begin

Clrscr;

St:=’Д О Б Р Ы Й Д Е Н Ь ! ! !’;

GotoXY(18,12);

For I:=1 to Length(St)

Do Begin

Write(St[I]);

Sound(5000);

Delay(70);

NoSound;

End;

End.

{заголовок программы}

{подключение модуля Crt}

{объявление переменных – строки вывода и} {параметра цикла}

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

{вывод сообщения “Добрый день!”}

{вывод каждого символа строки}

{сопровождается звуковым сигналом}

{конец программы}