Иллюстрированный самоучитель по Delphi 7 для начинаюших

         

Компонент Animate



Компонент Animate, значок которого находится на вкладке Win32 (рис. 11.1), позволяет воспроизводить простую анимацию, кадры которой находятся в AVI-файле.

Рис. 11.1. Значок компонента Animate

Примечайте

Хотя анимация, находящаяся в AVI-файле может сопровождаться звуковыми эффектами (так ли это — можно проверить, например, при помощи стандартной программы Проигрыватель Windows Media), компонент Animate обеспечивает воспроизведение только изображения. Для полноценного воспроизведения сопровождаемой звуком анимации следует использовать компонент меdiaPlayer.

Компонент Animate добавляется к форме обычным образом. После добавления компонента к форме следует установить значения его свойств. Свойства компонента Animate перечислены в табл. 11.1.

Таблица 11.1. Свойства компонента Animate



Свойство

Определяет

Name

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

FileName

Имя AVI-файла в котором находится анимация, отображаемая при помощи компонента

StartFrame

Номер кадра, с которого начинается отображение анимации

stopFrame

Номер кадра, на котором заканчивается отображение анимации

Activate

Признак активизации процесса отображения кадров анимации

Color

Цвет фона компонента (цвет "экрана"), на котором воспроизводится анимация

Transparent

Режим использования "прозрачного" цвета при отображении анимации

Repetitions

Количество повторов отображения анимации

Следует еще раз обратить внимание, что компонент Animate предназначен для воспроизведения AVI-файлов, которые содержат только анимацию. При попытке присвоить записать в свойство FileName имя файла, который содержит звук, Delphi выводит сообщение о невозможности открытия указанного файла (Cannot open AVI). Чтобы увидеть, что находиться в AVI-файле: анимация и звук или только анимация, нужно из Windows раскрыть нужную папку, выделить AVI-файл и из контекстного меню выбрать команду Свойства. В результате этого откроется окно Свойства, на вкладке Сводка (рис. 11.2) которого будет выведена подробная информация о содержимом выбранного файла.

Следующая программа, текст которой приведен в листинге 11.1, демонстрирует использование компонента Animate для отображения в диалоговом окне программы анимации. Вид формы программы приведен на рис. 11.3, а значения свойств компонента Animatel — в таблице 11.2.

Рис. 11.2. На вкладке Сводка отражается информация об AVI-файле

Рис. 11.3. Форма программы Просмотр анимации

Таблица 11.2. Значения свойств компонента Animate1

Свойство

Значение

FileName

bart.avi

Active

False

Transparent

True

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

Кнопка Button1 используется как для инициализации процесса воспроизведения анимации, так и для его приостановки. Процесс непрерывного воспроизведения анимации инициирует процедура обработки события Onclick на кнопке Пуск, которая присваивает значение True свойству Active. Эта же процедура заменяет текст на кнопке Button1 с Пуск на Стоп. Режим воспроизведения анимации выбирается при помощи переключателей Ra-dioButton1 и RadioButton2. Процедуры обработки события Onclick на этих переключателях изменением значения свойства Enabled блокируют или, наоборот, делают доступными кнопки управления: активизации воспроизведения анимации (Buttoni), перехода к следующему (Button2) и предыдущему (Buttons) кадру. Во время непрерывного воспроизведения анимации процедура обработки события OnCkick на кнопке Стоп (Buttoni) присваивает значение False свойству Active и тем самым останавливает процесс воспроизведения анимации.

Листинг 11.1. Использование компонента Animate

unit ShowAVI_; interface

uses

Windows, Messages, SysUtils,

Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Animate1: TAnimate; // компонент Animate

Button1: TButton; // кнопка Пуск-Стоп

Button2: TButton; // следующий кадр

Button3: TButton; // предыдущий кадр

RadioButton1: TRadioButton; // просмотр всей анимации

RadioButton2: TRadioButton; // покадровый просмотр

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure RadioButton1Click(Sender: TObject);

procedure RadioButton2Click(Sender: TObject);

private

{ Private declarations } public

{ Public declarations ) end;

var

Form1: TForm1; // форма

CFrame: integer; // номер отображаемого кадра

// в режиме покадрового просмотра

implementation {$R *.DFM}

// к следующему кадру

procedure TForm1.Button2Click(Sender: TObject);

begin

if CFrame = 1 then Button2.Enabled := True;

if CFrame < Animate1.FrameCount then begin

CFrame := CFrame + 1;

// вывести кадр

Animate1.StartFrame := CFrame;

Animate1.StopFrame := CFrame;

Animate1.Active := True;

if CFrame = Animatel.FrameCount // текущий кадр — последний

then Button2.Enabled:=False;

end;

end;

// к предыдущему кадру

procedure TForm1.Button3Click(Sender: TObject);

begin

if CFrame = Animate1.FrameCount

then Button2.Enabled := True;

if CFrame > 1 then begin

CFrame := CFrame — 1;

// вывести кадр

Animate1.StartFrame := CFrame;

Animate1.StopFrame := CFrame;

Animate1.Active := True;

if CFrame = 1 // текущий кадр — первый

then Form1.Button3.Enabled := False;

end;

end;

// активизация режима просмотра всей анимации

procedure TForml.RadioButtonlClick(Sender: TObject);

begin

Buttonl.Enabled:=True; //доступна кнопка Пуск

// сделать недоступными кнопки покадрового просмотра

Form1.Button3.Enabled:=False ;

Form1.Button2.Enabled:=False;

end;

// активизация режима покадрового просмотра

procedure TForm1.RadioButton2Click(Sender: TObject);

begin

Button2.Enabled:=True; // кнопка Следующий кадр доступна

Buttons.Enabled:=False; // кнопка Предыдущий кадр недоступна

// сделать недоступной кнопку Пуск — вывод всей анимации

Buttonl.Enabled:=False; end;

// пуск и остановка просмотра анимации

procedure TForm1.ButtonlClick(Sender: TObject);

begin

if Animate1.Active = False // в данный момент анимация не выводится

then begin

Animate1.StartFrame:=l; // вывод с первого

Animate1.StopFrame:=Animate1.FrameCount; // по последний кадр

Animate1.Active:=True;

Button1.caption:='Стоп';

RadioButton2.Enabled:=False;

end

else // анимация отображается

begin

Animate1.Active:=False; // остановить отображение

Button1.caption:='Пуск';

RadioButton2.Enabled:=True;

end;

end;

end.

Компонент Animate позволяет программисту использовать в своих программах стандартные анимации Windows. Вид анимации определяется значением свойства СommonAVI. Значение свойства задается при помощи именованной константы. В табл. 11.3 приведены некоторые значения констант, вид анимации и описание процесса, для иллюстрации которого используется эти анимации.

Таблица 11.3. Значение свойства comonAVi определяет анимацию

Значение

Анимация

Процесс

aviCopyFiles
Копирование файлов
AviDeleteFile
Удаление файла
aviRecycleFile
Удаление файла в корзину


Компонент MediaPlayer



Компонент MediaPlayer, значок которого находится на вкладке System (рис. 11.4), позволяет воспроизводить видеоролики, звук и сопровождаемую звуком анимацию.

Рис. 11.4. Значок компонента MediaPlayer

В результате добавления к форме компонента MediaPlayer на форме появляется группа кнопок (рис. 11.5), подобных тем, которые можно видеть на обычном аудио- или видеоплеере. Назначение этих кнопок пояснено в табл. 11.4. Свойства компонента MediaPlayer приведены в табл. 11.5.

Рис. 11.5. Компонент MediaPlayer

Таблица 11.4. Кнопки компонента MediaPlayer

Кнопка

Обозначение

Действие

Воспроизведение

btPlay

Воспроизведение звука или видео

Пауза

btPause

Приостановка воспроизведения

Стоп

btStop

Остановка воспроизведения

Следующий

btNext

Переход к следующему кадру

Предыдущий

btPrev

Переход к предыдущему кадру

Шаг

btStep

Переход к следующему звуковому фрагменту, например, к следующей песне на CD

Назад

btBack

Переход к предыдущему звуковому фрагменту, например, к предыдущей песне на CD

Запись

btRecord

Запись

Открыть/Закрыть

btEject

Открытие или закрытие CD-дисковода компьютера

Таблица 11.5. Свойства компонента MediaPiayer

Свойство

Описание

Name DeviceType

FileName AutoOpen Display

VisibleButtons

Имя компонента. Используется для доступа к свойствам компонента и управлением работой плеера

Тип устройства. Определяет конкретное устройство, которое представляет собой компонент MediaPiayer. Тип устройства задается именованной константой: dtAutoSelect — тип устройства определяется автоматически; dtVaweAudio — проигрыватель звука; dtAVivideo — видеопроигрыватель; dtCDAudio — CD-проигрыватель

Имя файла, в котором находится воспроизводимый звуковой фрагмент или видеоролик

Признак автоматического открытия сразу после запуска программы, файла видеоролика или звукового фрагмента

Определяет компонент, на поверхности которого воспроизводится видеоролик (обычно в качестве экрана для отображения видео используют компонент Panel)

Составное свойство. Определяет видимые кнопки компонента. Позволяет сделать невидимыми некоторые кнопки



Просмотр видеороликов и анимации



Помимо воспроизведения звука, компонент MediaPiayer позволяет просматривать видеоролики и мультипликации, представленные как AVI-файлы (AVI — это сокращение от Audio Video Interleave, что переводится как чередование звука и видео, т. е. AVI-файл содержит как звуковую, так и видеоинформацию) .

Процесс использования компонента MediaPiaer для посмотра содержимого AVI-файла рассмотрим на примере программы, которая в результате щелчка на командной кнопке воспроизводит на поверхности формы простую сопровождаемую звуковым эффектом мультипликацию — вращающееся по часовой стрелке слово Delphi (файл delphi.avi, содержащий этот мультик, находится на прилагаемом к книге диске).

Вид диалогового окна программы приведен на рис. 11.12, а значения свойств компонента MediaPlayerl — В табл. 11.8.

Рис. 11.12. Форма и диалоговое окно программы Использование MediaPlayer

Таблица 11.8. Значения свойств компонента MediaPlayer1

Свойство

Значение

Name

MediaPlayer1

FileName

delphi.avi

DeviceType

dtAVIVideo

AutoOpen

True

Display

Panel1

Visible

False

Создается форма приложения обычным образом. Компонент Paneii используется в качестве экрана, на который осуществляется вывод анимации, и его имя принимается в качестве значения свойства Display компонента MediaPlayeri. Поэтому сначала к форме лучше добавить компонент Panel и затем — MediaPlayer. Такой порядок создания формы позволяет установить значение свойства Display путем выбора из списка.

Следует особо обратить внимание на то, что размер области вывода анимации на панели определяется не значениями свойств width и Height панели (хотя их значения должны быть как минимум такими же, как ширина и высота анимации). Размер области определяется значением свойства

DisplayRect компонента MediaPlayer. Свойство DisplayRect ВО время разработки программы недоступно (его значение не выводится в окне Object Inspector). Поэтому значение свойства DisplayRect устанавливается во время работы программы в результате выполнения инструкции

MediaPlayer1.DisplayReet:=Rect(0,0,60,60).

Замечание

Чтобы получить информацию о размере кадров AVI-файла, надо, используя возможности Windows, открыть папку, в которой находится этот файл, щелкнуть правой кнопкой мыши на имени файла, выбрать команду Свойства и в появившемся диалоговом окне — вкладку Сводка, в которой выводится подробная информация о файле, в том числе и размер кадров.

Текст программы приведен в листинге 11.4.

Листинг 11.4. Воспроизведение анимации, сопровождаемой звуком

uses

Windows, Messages, SysUtils,

Classes, Graphics, Controls,

Forms, Dialogs, MPlayer, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Label1: TLabel; // информационное сообщение

Panel1: TPanel; // панель, на которую выводится анимация

Button1: TButton; // кнопка OK

MediaPlayer1: TMediaPlayer; // универсальный проигрыватель

procedure ButtonlClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations ) public

{ Public declarations } end;

var

Form1: TForm1 ;

implementation

($R *.DFM}

procedure TForm1.ButtonlClick(Sender: TObject);

begin

MediaPlayer1.Play; // воспроизведение анимации

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

// зададим размер области вывода анимации

// на поверхности формы

MediaPlayer1.DisplayRect:=Rect(0,0,60,60);

end;

end.

Процесс воспроизведения анимации активизируется применением метода Play, что эквивалентно нажатию кнопки Play в случае, если кнопки компонента MediaPlayer доступны пользователю.



Создание анимации



Процесс создания файла анимации (AVI-файла) рассмотрим на примере. Пусть надо создать анимацию, которая воспроизводит процесс рисования эскиза Дельфийского храма (окончательный вид рисунка представлен на рис. 11.13, несколько кадров анимации — на рис. 11.14).

Рис. 11.13. Эскиз Дельфийского храма

1

2

3

4

5

6

7

...

37

Рис. 11.14. Кадры анимации процесса рисования Дельфийского храма

Для решения поставленной задачи можно воспользоваться популярной программой Macromedia Flash 5.

В Macromedia Flash анимация, которую так же довольно часто называют роликом (Movie), состоит из слоев. В простейшем случае ролик представляет собой один единственный слой (Layer). Слой — это последовательность кадров (Frame), которые в процессе воспроизведения анимации выводятся последовательно, один за другим. Если ролик состоит из нескольких слоев, то кадры анимации получаются путем наложения кадров одного слоя на кадры другого. Например, один слой может содержать изображение фона, на котором разворачивается действие, а другой — изображение персонажей. Возможность формирования изображения путем наложения слоев существенно облегчает процесс создания анимации. Таким образом, чтобы создать анимацию, нужно распределить изображение по слоям и для каждого слоя создать кадры.

После запуска Macromedia Flash на фоне главного окна программы появляется окно Move1 (рис. 11.15), которое используется для создания анимации. В верхней части окна, которая называется Timeline, отражена структура анимации, в нижней части, которая называется рабочей областью, находится изображение текущего кадра выбранного слоя. После запуска Macromedia Flash анимация состоит из одного слоя (Layer 1), который в свою очередь представляет один пустой (чистый) кадр.

Рис. 11.15. Окно Movie в начале работы над новой анимацией

Перед тем как приступить непосредственно к созданию кадров анимации, нужно задать общие характеристики анимации (ролика): размер кадров и скорость их воспроизведения. Характеристики вводятся в поля диалогового окна Movie Properties (рис. 11.16), которое появляется в результате выбора из меню Modify команды Movie. В поле Frame Rate нужно ввести скорость воспроизведения ролика, которая измеряется в кадрах в секунду (fps — frame per second, кадров в секунду), в поля Width и Height — ширину и высоту кадров. В этом же окне можно выбрать фон кадров (список Background Color).

Рис. 11.16. Характеристики ролика отображаются в окне Movie Properties

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

Первый кадр нужно просто нарисовать. Технология создания изображений Macromedia Flash обычная, используется стандартный набор инструментов: кисть, карандаш, пульверизатор, резинка и др.

Чтобы создать следующий кадр, нужно из меню Insert выбрать команду Keyframe. В результате в текущий слой будет добавлен кадр, в который будет скопировано содержимое предыдущего кадра (так как в большинстве случаев следующий кадр создается путем изменения предыдущего). Теперь можно нарисовать второй кадр. Аналогичным образом создаются остальные кадры анимации.

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

Если некоторое изображение должно оставаться статичным в течение времени, кратного выводу нескольких кадров, то вместо того, чтобы вставлять в слой несколько одинаковых кадров (Keyframe), нужно сделать кадр статичным. Если кадр, изображение которого должно быть статичным, является последним кадром ролика, то в окне Timeline нужно выделить кадр, до которого изображение должно оставаться статичным, и из меню Insert выбрать команду Frame. Если кадр, изображение которого должно быть статичным, не является последним, то нужно выделить этот кадр и несколько раз из меню Insert выбрать команду Frame.

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

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

Чтобы выводимая анимация сопровождалась звуком, нужно сначала сделать доступным соответствующий звуковой файл. Для этого надо из меню File выбрать команду Import и добавить в проект звуковой файл (рис. 11.17).

Рис. 11.17. Импорт звукового файла

Затем в окне Timeline нужно выделить кадр, при отображении которого должно начаться воспроизведение звукового фрагмента, используя диалоговое окно Sound (рис. 11.18), выбрать звуковой фрагмент и задать, если нужно, параметры его воспроизведения. Количество повторов нужно ввести в поле Loops, эффект, используемый при воспроизведении, можно выбрать из списка Effect.

В качестве примера на рис. 11.19 приведен вид окна Timeline в конце работы над анимацией. Анимация состоит из двух слоев. Слой Layer 2 содержит фон. Детали фона появляются постепенно, в течение 9 кадров. После этого фон не меняется, поэтому 9 кадр является статичным. Слой Layer 1 содержит слой основного действия, которое начинается после того, как будет выведен фон. Вывод анимации заканчивается стандартным звуком TADA (его длительность равна одной секунде). Начало воспроизведения звука совпадает с выводом последнего (49-го, если считать от начала ролика) кадра основного действия, поэтому этот кадр сделан статичным в течение вывода следующих 12 кадров (скорость вывода анимации — 12 кадров в секунду). Сделано это для того, чтобы процесс вывода анимации завершился одновременно с окончанием звукового сигнала.

Рис. 11.18. Диалоговое окно Sound

Рис. 11.19. Пример анимации

После того как ролик будет готов, его надо сохранить. Делается это обычным образом, то есть выбором из меню File команды Save.

Для преобразования файла из формата Macromedia Flash в AVI-формат нужно из меню File выбрать команду Export Movie и задать имя файла. Затем в появившемся диалоговом окне Export Windows AVI (рис. 11.20) нужно задать размер кадра (поля Width и Height), из списка Video Format выбрать формат, в котором будет записана видеочасть ролика, а из поля Sound Format — формат звука.

Рис. 11.20. Окно Export Windows AVI

Если установлен переключатель Compress video, то после щелчка на кнопке ОК появится диалоговое окно, в котором можно будет выбрать один из стандартных методов сжатия видео. При выборе видео и звукового формата нужно учитывать, что чем более высокие требования будут предъявлены к качеству записи звука и изображения, тем больше места на диске займет AVI-файл. Здесь следует иметь в виду, что завышенные требования не всегда оправданы.



Воспроизведение звука



Звуковые фрагменты находятся в файлах с расширением WAV. Например, в каталоге C:\Winnt\Media можно найти файлы со стандартными звуками Windows.

Следующая программа (вид ее диалогового окна приведен на рис. 11.6, а текст - в листинге 11.2) демонстрирует использование компонента ediaPiayer для воспроизведения звуковых фрагментов, находящихся в WAV-файлах.

Помимо компонента MediaPiayer на форме находится компонент ListBox и два компонента Label, первый из которых используется для вывода информационного сообщения, второй — для отображения имени WAV-файла, выбранного пользователем из списка.

Работает программа следующим образом. После появления диалогового окна воспроизводится "Звук Microsoft", затем пользователь может из списка выбрать любой из находящихся в каталоге C:\Windows\Media звуковых файлов и после щелчка на кнопке Воспроизведение услышать, что находится в этом файле.

Рис. 11.6. Форма программы Звуки Microsoft Windows

Значения измененных свойств компонента MediaPlayerl приведены в табл. 11.6, значения остальных свойств оставлены без изменения.

Таблица 11.6. Значения свойств компонента MediaPlayer1

Компонент

Значение

DeviceType

DtAutoSelect

FileName

C:\Winnt\Media\3вук Microsoft.wav

AutoOpen

True

VisibleButtons . btNext

False

VisibleButtons .btPrev

False

VisibleButtons . btStep

False

VisibleButtons . btBack

False

VisibleButtons . btRecord

False

VisibleButtons .btEject

False

Листинг 11.2. Программа Звуки Microsoft Windows

unit WinSound_; interface

uses

Windows, Messages, SysUtils,

Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, MPlayer;

type

TForm1 = class(TForm)

MediaPlayerl: TMediaPlayer; // медиаплеер

Label1: TLabel; // информационное сообщение

ListBox1: TListBox; // список WAV-файлов

Label2: TLabel; // выбранный из списка файл

procedure FormActivate(Sender: TObject);

procedure ListBoxlClick(Sender: TObject);

procedure MediaPlayerlClick(Sender: TObject; Button: TMPBtnType;

var DoDefault: Boolean); private

{ Private declarations } public

{ Public declarations } end;

const

SOUNDPATCH='с:\winnt\media\'; // положение звуковых файлов

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormActivate(Sender: TObject);

var

SearchRec: TSearchRec; // структура, содержащая информацию о файле,

// удовлетворяющем условию поиска

begin

Form1.MediaPlayer1.Play ;

// сформируем список WAV-файлов, находящихся

// в каталоге c:\winnt\media

if FindFirst(SOUNDPATCH+'*.wav', faAnyFile, SearchRec) =0 then

begin

// в каталоге есть файл с расширением WAV

// добавим имя этого файла в список

Form1.ListBox1.Items.Add(SearchRec.Name) ;

// пока в каталоге есть другие файлы с расширением WAV

while (FindNext(SearchRec) = 0) do

Form1.ListBox1.Items.Add(SearchRec.Name);

end;

end;

// щелчок на элементе списка

procedure TForm1.ListBoxlClick(Sender: TObject);

begin

// вывести в поле метки Label2 имя выбранного файла

Label2.Caption:=ListBox1.Items[ListBox1.itemlndex];

end;

// щелчок на кнопке компонента Media Player

procedure TForm1.MediaPlayerlClick(Sender: TObject; Button: TMPBtnType;

var DoDefault: Boolean); begin

if (Button = btPlay) and (Label2.Caption <> '') then

begin

// нажата кнопка Play

with MediaPlayerl do begin

FileName:=SOUNDPATCH+Label2.Caption; // имя выбранного файла

Open; // открыть и проиграть звуковой файл

end;

end;

end;

end.

Воспроизведение звука сразу после запуска программы активизирует процедура обработки события onFormActivate путем применением метода Play к компоненту MediaPlayerl (действие этого метода аналогично щелчку на кнопке Воспроизведение). Эта же процедура формирует список WAV-файлов, находящихся в каталоге C:\Winnt\Media. Для формирования списка используются функции FindFirst и FindNext, которые, соответственно, выполняют поиск первого и следующего (по отношению к последнему, найденному функцией FindFirst или FindNext) файла, удовлетворяющего указанному при вызове функций критерию. Обеим функциям в качестве параметров передаются маска WAV-файла (критерий поиска) и переменная -структура searchRec, поле Name которой в случае успешного поиска будет содержать имя файла, удовлетворяющего критерию поиска.

Щелчок на элементе списка обрабатывается процедурой TForm1.ListBox1Click, которая выводит в поле метки Label2 имя файла, выбранного пользователем (во время работы программы свойство ItemIndex содержит номер элемента списка на котором выполнен щелчок).

В результате щелчка на одной из кнопок компонента MediaPiayeri активизируется процедура TForm1.MediaPiayer1Сlick, которая проверяет, какая из кнопок компонента была нажата. Если нажата кнопка Воспроизведение (btPlay), то в свойство FileName компонента MediaPiayeri записывается имя выбранного пользователем файла, затем метод open загружает этот файл и активизирует процесс его воспроизведения.

Наличие у компонента MediaPiayer свойства visible позволяет скрыть компонент от пользователя и при этом применять его для воспроизведения звука без участия пользователя. Например, следующая программа пересчитывает вес из фунтов в килограммы и сопровождает выдачу результата звуковым сигналом. В случае, если пользователь забудет ввести исходные данные или введет их неверно, программа выведет сообщение об ошибке, также сопровождаемое звуковым сигналом. Вид диалогового окна программы во время ее разработки приведен на рис. 11.7, значения свойств компонента MediaPlaer в табл. 11.7. Текст модуля программы приведен в листинге 11.3.

Рис. 11.7. Диалоговое окно программы Фунты-килограммы

Таблица 11.7. Значения свойств компонента MediaPiayer1

Свойство

Значение

Name DeviceType

FileName

MediaPiayer1

dtAutoSelect с : \winnt\media\ding . wav

Свойство

Значение

AutoOpen

Visible

True

False

Листинг 11.3. Использование компонента MediaPlayer для вывода звука

unit FuntToKg1_; interface

uses

Windows, Messages, SysUtils,

Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls, MPlayer;

type

TForm1 = class(TForm)

Edit1: TEdit; // поле ввода веса в фунтах

Button1: TButton; // кнопка Пересчет

Label2: TLabel; // поле вывода результата

Label1: TLabel; // поле информационного сообщения

MediaPlayer1: TMediaPlayer; // медиаплеер

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM)

// щелчок на кнопке Пересчет

procedure TForm1.ButtonlClick(Sender: TObject);

var

f: real; // вес в фунтах k: real; // вес в килограммах

begin

form1.Label2.Caption: =' ';

try // возможна ошибка, если в поле

// Edit1 будет не число

f:=StrToFloat(Edit1.Text);

Forml.MediaPlayer1.Play;

// звуковой сигнал k:=f*0.4095;

Label2.caption:=Editl.text+' ф. - это ' +

FloatToStrF(k,ffGeneral,4,2}+' кг. ';

except

on EConvertError do // ошибка преобразования

begin

// определим и проиграем звук "Ошибка"

Form1.MediaPlayer1.FileName:=

'c:\windows\media\chord.wav';

Form1.MediaPlayer1.Open;

Form1.MediaPlayer1.Play; // звуковой сигнал

ShowMessage('Ошибка! Вес следует ввести числом.');

form1.Edit1.SetFocus; // курсор в поле ввода

// восстановим звук

Forml.MediaPlayer1.FileName:=

'c:\windows\media\ding.wav';

Forml.MediaPlayer1.Open;

end;

end;

end;

end.



Запись звука



В некоторых случаях программисту могут потребоваться специфические звуки или музыкальные фрагменты, которые не представлены на диске компьютера в виде WAV-файла. В этом случае возникает задача создания, или, как говорят, записи WAV-файла.

Наиболее просто получить представление нужного звукового фрагмента в виде WAV-файла можно при помощи входящей в состав Windows программы Звукозапись. Программа Звукозапись, вид ее диалогового окна приведен на рис. 11.8, запускается из главного меню Windows при помощи команды Пуск | Программы | Стандартные | Развлечения | Звукозапись.

Рис. 11.8. Диалоговое окно программы Звукозапись

Источником звука для программы Звукозапись может быть микрофон, аудио-CD или любое другое подключенное к линейному входу звуковой платы компьютера устройство, например аудиомагнитофон. Кроме того, возможно микширование (смешение) звуков различных источников.

Создается WAV-файл следующим образом. Сначала нужно определить источник (или источники) звука. Чтобы это сделать, надо открыть Регулятор громкости (для этого надо щелкнуть на находящемся на панели задач изображении динамика и из появившегося меню выбрать команду Регулятор громкости) и из меню Параметры выбрать команду Свойства. Затем в появившемся окне Свойства (рис. 11.9) выбрать переключатель Запись и в списке Отображаемые регуляторы громкости установить флажки, соответствующие тем устройствам, сигнал с которых нужно записать. После щелчка на кнопке ОК на экране появляется окно Уровень записи (рис. 11.10), используя которое, можно управлять уровнем сигнала (громкостью) каждого источника звука в общем звуке и величиной общего, суммарного сигнала, поступающего на вход программы Звукозапись. Величина сигнала задается перемещением движков соответствующих регуляторов. Следует обратить внимание на то, что движки регуляторов группы Уровень доступны только во время процесса записи звука. На этом подготовительные действия заканчиваются. Теперь можно приступить непосредственно к записи звука.

Рис. 11.9. Диалоговое окно Свойства

Рис. 11.10. Диалоговое окно Уровень записи позволяет управлять записываемым сигналом

Чтобы записать музыкальный или речевой фрагмент, надо запустить программу Звукозапись, активизировать диалоговое окно Уровень, выбрать устройство-источник звука, инициировать процесс звучания (если запись осуществляется, например с CD) и в нужный момент времени щелкнуть на кнопке Запись.

Во время записи в диалоговых окнах можно наблюдать изменение сигнала на выходе микшера (индикатор Громкость диалогового окна Уровень) и на входе программы записи. На рис. 11.11 в качестве примера приведен вид диалогового окна Звукозапись во время записи звука.

Рис. 11.11. Диалоговое окно Звукозапись во время записи

Для остановки процесса записи следует щелкнуть на кнопке Стоп.

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

Существует несколько форматов звуковых файлов. В частности, возможно сохранение звука с различным качеством как стерео, так и моно. Здесь следует понимать, что чем выше качество записи, тем больше места на диске компьютера требуется для хранения соответствующего WAV-файла. Считается, что для речи приемлемым является формат "22050 Гц, 8 бит, моно", а музыки - "44100 Гц, 16 бит, моно" или "44100 Гц, 16 бит, стерео".