Компонент Animate
Компонент Animate, значок которого находится на вкладке Win32 (рис. 11.1), позволяет воспроизводить простую анимацию, кадры которой находятся в AVI-файле.
![](image/komponent-animate_7.gif)
Рис. 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.
![](image/komponent-animate_8.gif)
Рис. 11.2. На вкладке Сводка отражается информация об AVI-файле
![](image/komponent-animate_9.gif)
Рис. 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), позволяет воспроизводить видеоролики, звук и сопровождаемую звуком анимацию.
![](image/komponent-mediaplayer_3.gif)
Рис. 11.4. Значок компонента MediaPlayer
В результате добавления к форме компонента MediaPlayer на форме появляется группа кнопок (рис. 11.5), подобных тем, которые можно видеть на обычном аудио- или видеоплеере. Назначение этих кнопок пояснено в табл. 11.4. Свойства компонента MediaPlayer приведены в табл. 11.5.
![](image/komponent-mediaplayer_4.gif)
Рис. 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.
![](image/prosmotr-videorolikov-i-animacii_3.gif)
![](image/prosmotr-videorolikov-i-animacii_4.gif)
Рис. 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).
![](image/sozdanie-animacii_15.gif)
Рис. 11.13. Эскиз Дельфийского храма
![](image/sozdanie-animacii_16.gif)
1
![](image/sozdanie-animacii_17.gif)
2
![](image/sozdanie-animacii_18.gif)
3
![](image/sozdanie-animacii_19.gif)
4
![](image/sozdanie-animacii_20.gif)
5
![](image/sozdanie-animacii_21.gif)
6
![](image/sozdanie-animacii_22.gif)
7
...
![](image/sozdanie-animacii_15.gif)
37
Рис. 11.14. Кадры анимации процесса рисования Дельфийского храма
Для решения поставленной задачи можно воспользоваться популярной программой Macromedia Flash 5.
В Macromedia Flash анимация, которую так же довольно часто называют роликом (Movie), состоит из слоев. В простейшем случае ролик представляет собой один единственный слой (Layer). Слой — это последовательность кадров (Frame), которые в процессе воспроизведения анимации выводятся последовательно, один за другим. Если ролик состоит из нескольких слоев, то кадры анимации получаются путем наложения кадров одного слоя на кадры другого. Например, один слой может содержать изображение фона, на котором разворачивается действие, а другой — изображение персонажей. Возможность формирования изображения путем наложения слоев существенно облегчает процесс создания анимации. Таким образом, чтобы создать анимацию, нужно распределить изображение по слоям и для каждого слоя создать кадры.
После запуска Macromedia Flash на фоне главного окна программы появляется окно Move1 (рис. 11.15), которое используется для создания анимации. В верхней части окна, которая называется Timeline, отражена структура анимации, в нижней части, которая называется рабочей областью, находится изображение текущего кадра выбранного слоя. После запуска Macromedia Flash анимация состоит из одного слоя (Layer 1), который в свою очередь представляет один пустой (чистый) кадр.
![](image/sozdanie-animacii_23.gif)
Рис. 11.15. Окно Movie в начале работы над новой анимацией
Перед тем как приступить непосредственно к созданию кадров анимации, нужно задать общие характеристики анимации (ролика): размер кадров и скорость их воспроизведения. Характеристики вводятся в поля диалогового окна Movie Properties (рис. 11.16), которое появляется в результате выбора из меню Modify команды Movie. В поле Frame Rate нужно ввести скорость воспроизведения ролика, которая измеряется в кадрах в секунду (fps — frame per second, кадров в секунду), в поля Width и Height — ширину и высоту кадров. В этом же окне можно выбрать фон кадров (список Background Color).
![](image/sozdanie-animacii_24.gif)
Рис. 11.16. Характеристики ролика отображаются в окне Movie Properties
После того, как установлены характеристики ролика, можно приступить к созданию кадров анимации.
Первый кадр нужно просто нарисовать. Технология создания изображений Macromedia Flash обычная, используется стандартный набор инструментов: кисть, карандаш, пульверизатор, резинка и др.
Чтобы создать следующий кадр, нужно из меню Insert выбрать команду Keyframe. В результате в текущий слой будет добавлен кадр, в который будет скопировано содержимое предыдущего кадра (так как в большинстве случаев следующий кадр создается путем изменения предыдущего). Теперь можно нарисовать второй кадр. Аналогичным образом создаются остальные кадры анимации.
Иногда не нужно, чтобы новый кадр содержал изображение предыдущего, в этом случае вместо команды Keyframe нужно воспользоваться командой Blank Keyframe.
Если некоторое изображение должно оставаться статичным в течение времени, кратного выводу нескольких кадров, то вместо того, чтобы вставлять в слой несколько одинаковых кадров (Keyframe), нужно сделать кадр статичным. Если кадр, изображение которого должно быть статичным, является последним кадром ролика, то в окне Timeline нужно выделить кадр, до которого изображение должно оставаться статичным, и из меню Insert выбрать команду Frame. Если кадр, изображение которого должно быть статичным, не является последним, то нужно выделить этот кадр и несколько раз из меню Insert выбрать команду Frame.
Можно значительно облегчить работу по созданию анимации, если разделить изображение на основное и фоновое, поместив каждое в отдельный слой (именно так поступают при создании мультфильмов). Сначала нужно создать кадры слоя фона так, как было описано выше. Затем, выбрав из меню Insert команду Layer, нужно добавить слой основного действия.
Следует обратить внимание, что все действия по редактированию изображения направлены на текущий кадр выбранного слоя. В списке слоев выбранный слой выделен цветом, номер текущего кадра помечен маркером — красным квадратиком.
Чтобы выводимая анимация сопровождалась звуком, нужно сначала сделать доступным соответствующий звуковой файл. Для этого надо из меню File выбрать команду Import и добавить в проект звуковой файл (рис. 11.17).
![](image/sozdanie-animacii_25.gif)
Рис. 11.17. Импорт звукового файла
Затем в окне Timeline нужно выделить кадр, при отображении которого должно начаться воспроизведение звукового фрагмента, используя диалоговое окно Sound (рис. 11.18), выбрать звуковой фрагмент и задать, если нужно, параметры его воспроизведения. Количество повторов нужно ввести в поле Loops, эффект, используемый при воспроизведении, можно выбрать из списка Effect.
В качестве примера на рис. 11.19 приведен вид окна Timeline в конце работы над анимацией. Анимация состоит из двух слоев. Слой Layer 2 содержит фон. Детали фона появляются постепенно, в течение 9 кадров. После этого фон не меняется, поэтому 9 кадр является статичным. Слой Layer 1 содержит слой основного действия, которое начинается после того, как будет выведен фон. Вывод анимации заканчивается стандартным звуком TADA (его длительность равна одной секунде). Начало воспроизведения звука совпадает с выводом последнего (49-го, если считать от начала ролика) кадра основного действия, поэтому этот кадр сделан статичным в течение вывода следующих 12 кадров (скорость вывода анимации — 12 кадров в секунду). Сделано это для того, чтобы процесс вывода анимации завершился одновременно с окончанием звукового сигнала.
![](image/sozdanie-animacii_26.gif)
Рис. 11.18. Диалоговое окно Sound
![](image/sozdanie-animacii_27.gif)
Рис. 11.19. Пример анимации
После того как ролик будет готов, его надо сохранить. Делается это обычным образом, то есть выбором из меню File команды Save.
Для преобразования файла из формата Macromedia Flash в AVI-формат нужно из меню File выбрать команду Export Movie и задать имя файла. Затем в появившемся диалоговом окне Export Windows AVI (рис. 11.20) нужно задать размер кадра (поля Width и Height), из списка Video Format выбрать формат, в котором будет записана видеочасть ролика, а из поля Sound Format — формат звука.
![](image/sozdanie-animacii_28.gif)
Рис. 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 звуковых файлов и после щелчка на кнопке Воспроизведение услышать, что находится в этом файле.
![](image/vosproizvedenie-zvuka_3.gif)
Рис. 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.
![](image/vosproizvedenie-zvuka_4.gif)
Рис. 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 при помощи команды Пуск | Программы | Стандартные | Развлечения | Звукозапись.
![](image/zapis-zvuka_5.gif)
Рис. 11.8. Диалоговое окно программы Звукозапись
Источником звука для программы Звукозапись может быть микрофон, аудио-CD или любое другое подключенное к линейному входу звуковой платы компьютера устройство, например аудиомагнитофон. Кроме того, возможно микширование (смешение) звуков различных источников.
Создается WAV-файл следующим образом. Сначала нужно определить источник (или источники) звука. Чтобы это сделать, надо открыть Регулятор громкости (для этого надо щелкнуть на находящемся на панели задач изображении динамика и из появившегося меню выбрать команду Регулятор громкости) и из меню Параметры выбрать команду Свойства. Затем в появившемся окне Свойства (рис. 11.9) выбрать переключатель Запись и в списке Отображаемые регуляторы громкости установить флажки, соответствующие тем устройствам, сигнал с которых нужно записать. После щелчка на кнопке ОК на экране появляется окно Уровень записи (рис. 11.10), используя которое, можно управлять уровнем сигнала (громкостью) каждого источника звука в общем звуке и величиной общего, суммарного сигнала, поступающего на вход программы Звукозапись. Величина сигнала задается перемещением движков соответствующих регуляторов. Следует обратить внимание на то, что движки регуляторов группы Уровень доступны только во время процесса записи звука. На этом подготовительные действия заканчиваются. Теперь можно приступить непосредственно к записи звука.
![](image/zapis-zvuka_6.gif)
Рис. 11.9. Диалоговое окно Свойства
![](image/zapis-zvuka_7.gif)
Рис. 11.10. Диалоговое окно Уровень записи позволяет управлять записываемым сигналом
Чтобы записать музыкальный или речевой фрагмент, надо запустить программу Звукозапись, активизировать диалоговое окно Уровень, выбрать устройство-источник звука, инициировать процесс звучания (если запись осуществляется, например с CD) и в нужный момент времени щелкнуть на кнопке Запись.
Во время записи в диалоговых окнах можно наблюдать изменение сигнала на выходе микшера (индикатор Громкость диалогового окна Уровень) и на входе программы записи. На рис. 11.11 в качестве примера приведен вид диалогового окна Звукозапись во время записи звука.
![](image/zapis-zvuka_8.gif)
Рис. 11.11. Диалоговое окно Звукозапись во время записи
Для остановки процесса записи следует щелкнуть на кнопке Стоп.
Сохраняется записанный фрагмент в файле обычным образом, т. е. выбором из меню Файл команды Сохранить или Сохранить как. При выборе команды Сохранить как можно выбрать формат, в котором будет сохранен записанный звуковой фрагмент.
Существует несколько форматов звуковых файлов. В частности, возможно сохранение звука с различным качеством как стерео, так и моно. Здесь следует понимать, что чем выше качество записи, тем больше места на диске компьютера требуется для хранения соответствующего WAV-файла. Считается, что для речи приемлемым является формат "22050 Гц, 8 бит, моно", а музыки - "44100 Гц, 16 бит, моно" или "44100 Гц, 16 бит, стерео".