Урок 11: Средства создания мультимедийных приложений
Delphi позволяет легко
и просто включать в программу такие мультимедийные объекты, как звуки,
видео и музыку. В данном уроке обсуждается,
как это сделать, используя встроенный в Delphi компонент
TMediaPlayer. Подробно рассматриваются
управление этим компонентом в программе и получение информации о текущем
состоянии.
Точного определения,
что же это такое, нет. Но в данный момент и в данном месте, наверное, лучше
дать по-возможности наиболее общее определение и сказать, что “мультимедиа”
- это термин относящийся к почти всем формам анимации, звукам, видео, которые
используются на компьютере.
Давая такое общее определение, нужно сказать, что в данном уроке мы имеем дело с подмножеством мультимедиа, которое включает:
1. Показ видео в формате Microsoft's Video for Windows (AVI).
2. Воспроизведение звуков и музыки из MIDI и WAVE файлов.
Данную задачу можно выполнить с помощью динамической библиотеки Microsoft Multimedia Extensions для Windows (MMSYSTEM.DLL), методы которой инкапсулированы в компоненте TMediaPlay, находящийся на странице System Палитры Компонент Delphi.
Для проигрывания файлов мультимедиа
может потребоваться наличие некоторого оборудования и программного обеспечения.
Так для воспроизведения звуков нужна звуковая карта. Для воспроизведения
AVI в Windows 3.1 (или
WFW) требуется установить ПО Microsoft
Video.
В Delphi есть
компонент TMediaPlayer, который дает
Вам доступ ко всем основным возможностям программирования мультимедиа.
Данный компонент очень прост в использовании.
Фактически, он настолько прост, что многим
начинающим программистам будет проще создать свою первую программу, проигрывающую
видео или музыку, нежели показывающую классическую надпись "Hello
World".
Простоту использования можно воспринимать двояко:
· С одной стороны - это дает возможность любому создавать мультимедиа приложения.
· С другой стороны, можно обнаружить, что в компоненте реализованы не все возможности. Если Вы захотите использовать низкоуровневые функции, то придется копаться достаточно глубоко, используя язык Delphi.
В данном уроке не описываются подробности внутренних вызовов мультимедийных функций при работе компонента. Все что нужно знать - это то, что компонент называется TMediaPlayer, и что он дает доступ к набору подпрограмм, созданных Microsoft и называемых Media Control Interface (MCI). Эти подпрограммы дают программисту простой доступ к широкому кругу устройств мультимедиа. Собственно работа с TMediaPlayer интуитивно понятна и очевидна.
Рис.1: Компонент TMediaPlayer на форме.
Компонент TMediaPlayer оформлен, как панель управления устройством с кнопками. Как и на магнитофоне, здесь есть кнопки “воспроизведение”, “перемотка”, “запись” и др.
Поместив компонент на форму, Вы увидите, что Инспектор Объектов содержит свойство "FileName" (см. рис.2). Щелкните дважды
Рис.2: Свойства TMediaPlayer в Инспекторе Объектов
на этом свойстве и выберите имя файла с расширением AVI, WAV или
MID. На рис.2 выбран AVI файл DELPHI.AVI. Далее нужно установить свойство AutoOpen в True.
После выполнения этих шагов программа готова к запуску. Запустив программу, нажмите зеленую кнопку “воспроизведение” (крайняя слева) и Вы увидите видеоролик (если выбрали AVI) или услышите звук (если выбрали WAV или MID). Если этого не произошло или появилось сообщение об ошибке, то возможны два варианта:
Еще одно важное свойство компонента TMediaPlayer - Display. Изначально оно не заполнено и видео воспроизводится в отдельном окошке. Однако, в качестве экрана для показа ролика можно использовать, например, панель. На форму нужно поместить компонент TPanel, убрать текст из св-ва Caption. Далее, для TMediaPlayer, в свойстве Display выбрать из списка Panel1. После этого надо запустить программу и нажать кнопку “воспроизведение” (см. рис.3)
Рис.3:
Воспроизведение AVI на панели.
· Иногда
приходится предоставлять пользователям простой путь для проигрывания максимально
широкого круга файлов. Это означает,
что Вам нужно будет дать пользователю доступ к жесткому диску или CD-ROM,
и затем позволить ему выбрать и воспроизвести
подходящий файл. В этом случае, на форме обычно располагается TMediaPlayer,
предоставляющий возможность управления воспроизведением.
· Иногда программист может захотеть скрыть от пользователя существование компонента TMediaPlayer. То есть, воспроизвести звук или видео без того, чтобы пользователь заботился об их источнике. В частности, звук может быть частью презентации. Например, показ какого-нибудь графика на экране может сопровождаться объяснением, записанным в WAV файл. В течении презентации пользователь даже не знает о существовании TMediaPlayer. Он работает в фоновом режиме. Для этого компонент делается невидимым (Visible = False) и управляется программно.
AVI File(*.avi)|*.avi
WAVE File(*.wav)|*.wav
MIDI file(*.MID)|*.mid
Пусть по двойному щелчку мышкой в FileListBox1 выбранный файл будет воспроизводиться. В обработчике события OnDblClick для FileListBox1 укажите
Procedure TForm1.FileListBox1DblClick(Sender:TObject);
begin
with MediaPlayer1 do
begin
Close;
FileName:=FileListBox1.FileName;
Open;
Play;
end;
end;
Внешний вид формы представлен на рис.4
Рис.4: Начальный вид проекта
Сохраните проект, запустите его, выберите нужный файл и дважды щелкните на него мышкой. MediaPlayer должен воспроизвести этот файл в отдельном окне.
Как уже говорилось выше, видеоролик можно воспроизводить внутри формы, например, на панели. Давайте слегка модифицируем проект и добавим туда панель TPanel (см. рис.5). В св-ве Display для MediaPlayer1 укажите Panel1. Нужно убрать надпись с панели (Caption)
и св-во BevelOuter = bvNone. Чтобы переключаться при воспроизведении с окна на панель - поместите TСheckBox на форму и в обработчике события OnClick для него запишите:
procedure TForm1.CheckBox1Click(Sender: TObject);
var
Start_From : Longint;
begin
with MediaPlayer1 do begin
if FileName='' then Exit;
Start_From:=Position;
Close;
Panel1.Refresh;
if CheckBox1.Checked then
Display:=Panel1
else
Display:=NIL;
Open;
Position:=Start_From;
Play;
end;
end;
Запустите проект и воспроизведите видеоролик. Пощелкайте мышкой на CheckBox.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
with MediaPlayer1 do
if FileName<>'' then
Gauge1.Progress:=Round(100*Position/Length);
end;
Запустите проект, выберите файл (AVI) и щелкните на нем два раза мышкой. При воспроизведении ролика прогресс-индикатор должен отображать процент, соответствующий прошедшему времени (см. рис.6).